【itext操作pdf】

直击Itext作用

java 复制代码
遇到了什么问题?
    随着互联网时代的到来,很多流程化的约定想要在互联网上进行会签,当然这个文件也具有法律效益
哪个技术可以解决这个问题?
    itext: 第三方封装的工具,可以生成pdf文件
这个技术的使用方式?

Itext使用

1.创建maven项目并导入jar包

xml 复制代码
<dependencies>
    <!-- itext核心包 -->
    <dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>itextpdf</artifactId>
        <version>5.5.10</version>
    </dependency>
    <!-- 输出中文 -->
    <dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>itext-asian</artifactId>
        <version>5.2.0</version>
    </dependency>
    <!-- 设置pdf文件密码 -->
    <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcprov-jdk15on</artifactId>
        <version>1.54</version>
    </dependency>
    <!-- 单元测试包 -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.1</version>
        <scope>compile</scope>
    </dependency>
</dependencies>

2.Itext相关API

markdown 复制代码
Itext的相关API: 核心类对象
com.itextpdf.text:
    Document:这是iText库中最常用的类,它代表了一个pdf(实例)文件。如果你需要从零开始生成一个PDF文件,
    	你需要使用这个Document类。首先创建(new)该实例,然后打开(open)它,并添加(add)内容,
    	最后关闭(close)该实例,即可生成一个pdf文件。
    Paragraph:表示一个缩进的文本段落,在段落中,你可以设置对齐方式,缩进,段落前后间隔等
    Chapter:表示PDF的一个章节,他通过一个Paragraph类型的标题和整形章数创建
    Font:这个类包含了所有规范好的字体,包括family of font,大小,样式和颜色,所有这些字体都被声明为静态常量
    List:表示一个列表;
    Anchor:表示一个锚,类似于HTML页面的链接。
    pdf.PdfWriter:当这个PdfWriter被添加到PdfDocument后,所有添加到Document的内容将会写入到与文件或网络关联的输出流中。
    pdf.PdfReader:用于读取PDF文件;

3.编写测试类

java 复制代码
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPRow;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import org.junit.Test;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.List;

public class ItextDemo {
    // 输出的基础路径
    private static final String path = "C:/Users/85190/Desktop/pdf/";
    /*
       todo:
        Itext的相关API: 核心类对象
        com.itextpdf.text:
            Document:这是iText库中最常用的类,它代表了一个pdf(实例)文件。如果你需要从零开始生成一个PDF文件,
                你需要使用这个Document类。首先创建(new)该实例,然后打开(open)它,并添加(add)内容,
                最后关闭(close)该实例,即可生成一个pdf文件。
            Paragraph:表示一个缩进的文本段落,在段落中,你可以设置对齐方式,缩进,段落前后间隔等
            Chapter:表示PDF的一个章节,他通过一个Paragraph类型的标题和整形章数创建
            Font:这个类包含了所有规范好的字体,包括family of font,大小,样式和颜色,所有这些字体都被声明为静态常量
            List:表示一个列表;
            Anchor:表示一个锚,类似于HTML页面的链接。
            pdf.PdfWriter:当这个PdfWriter被添加到PdfDocument后,所有添加到Document的内容将会写入到与文件或网络关联的输出流中。
            pdf.PdfReader:用于读取PDF文件;
     */
    /**
     * 创建一个pdf文件,往文件中输入一段简单的内容
     */
    @Test
    public void test01() throws Exception {
        // 1.新建document对象: 创建了一个pdf文件
        Document document = new Document();
        // 2.建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中。
        // 创建 PdfWriter 对象 第一个参数是对文档对象的引用,第二个参数是文件的实际名称,在该名称中还会给出其输出路径。
        PdfWriter.getInstance(document, new FileOutputStream(path+"test1.pdf"));
        // 3.打开pdf文档
        document.open();
        // 4.添加一个内容段落
        document.add(new Paragraph("Hello World!"));
        document.add(new Paragraph("I love you"));
        document.add(new Paragraph("Now now is not once said after Now now is not once said after "));
        // 5.关闭文档
        document.close();
        System.out.println("创建成功...");

    }

    /**
     * 创建pdf文件并写入表格
     */
    @Test
    public void test02() throws Exception {
        //创建文件
        Document document = new Document();
        //建立一个书写器
        PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(path+"test2.pdf"));
        //打开文件
        document.open();
        //添加内容
        document.add(new Paragraph("content here"));

        // 3列的表.
        PdfPTable table = new PdfPTable(3);
        table.setWidthPercentage(100); // 宽度100%填充
        // 距相邻元素的像素值
        table.setSpacingBefore(50f); // 前间距
        table.setSpacingAfter(50f); // 后间距

        List<PdfPRow> listRow = table.getRows();
        //设置列宽: 列比例
        float[] columnWidths = { 1f, 1f, 1f };
        table.setWidths(columnWidths);

        //行1
        // 设置单元格数量
        PdfPCell cells1[]= new PdfPCell[3];
        // 在当前行中添加3个单元格
        PdfPRow row1 = new PdfPRow(cells1);
        //单元格
        cells1[0] = new PdfPCell(new Paragraph("111"));//单元格内容
        cells1[0].setBorderColor(BaseColor.BLUE);//边框验证
        cells1[0].setPaddingLeft(5);//左填充20
//        cells1[0].setHorizontalAlignment(Element.ALIGN_CENTER);//水平居中
//        cells1[0].setVerticalAlignment(Element.ALIGN_MIDDLE);//垂直居中
        cells1[1] = new PdfPCell(new Paragraph("222"));
        cells1[2] = new PdfPCell(new Paragraph("333"));
        //行2
        PdfPCell cells2[]= new PdfPCell[3];
        PdfPRow row2 = new PdfPRow(cells2);
        cells2[0] = new PdfPCell(new Paragraph("444"));
        cells2[1] = new PdfPCell(new Paragraph("555"));
        cells2[2] = new PdfPCell(new Paragraph("666"));
        //把第一行添加到集合
        listRow.add(row1);
        listRow.add(row2);
        //把表格添加到文件中
        document.add(table);
        //关闭文档
        document.close();
        //关闭书写器
        writer.close();
    }
}
相关推荐
月巴月巴白勺合鸟月半12 小时前
一次PDF文件的处理(一)
pdf·c#
弓.长.13 小时前
ReactNative for OpenHarmony项目鸿蒙化三方库:react-native-pdf — PDF文档查看器
react native·pdf·harmonyos
开开心心就好15 小时前
绿色版PDF多功能工具,支持编辑转换
人工智能·windows·pdf·ocr·excel·语音识别·harmonyos
月巴月巴白勺合鸟月半20 小时前
一次PDF文件的处理(二)
pdf·c#
开开心心就好20 小时前
免费无广告的礼金记账本,安卓应用
java·前端·ubuntu·edge·pdf·负载均衡·语音识别
优化控制仿真模型20 小时前
2015-2025年12月英语六级历年真题及答案PDF电子版(含听力音频)
经验分享·pdf
爱编程的小吴21 小时前
LangChain基础入门:DocumentLoader加载PDF/Markdown文档实战
python·langchain·pdf
软件工程小施同学21 小时前
区块链论文速读 CCF A--CCS 2025 (1) 附pdf下载
pdf·区块链
葡萄城技术团队2 天前
SpreadJS 中“打印”和“导出 PDF”到底该选哪个?
pdf
优化控制仿真模型2 天前
2025年12月英语六级真题及答案解析完整版(第一、二、三套全PDF)
经验分享·pdf