【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();
    }
}
相关推荐
夕阳之后的黑夜3 小时前
Python脚本:为PDF批量添加水印
开发语言·python·pdf
夏沫mds3 小时前
Node.js 实现高保真 PDF 压缩:从 Canvas 方案到 Ghostscript 的踩坑实录
pdf·node.js
开开心心_Every21 小时前
家长控制电脑软件:定时锁屏管理使用时长
网络协议·tcp/ip·游戏·微信·pdf·excel·语音识别
开开心心就好1 天前
免费抽奖工具支持批量导入+自定义主题
linux·运维·服务器·macos·pdf·phpstorm·1024程序员节
pass_port_csdn1 天前
zotero搬家,迁移换机/重装100% 完美克隆指南:文献PDF、插件配置、文献分类、标签、笔记等所有信息全克隆
笔记·pdf·zotero
开开心心_Every1 天前
电脑定时休息软件:久坐提醒养成活动习惯
游戏·微信·pdf·excel·语音识别·散列表·启发式算法
vlln1 天前
【调研报告】PDF解析技术现状与趋势:从人类阅读到大模型适配的需求
pdf
软件资深者2 天前
全能图片缩略图显示工具,体积较大,直接显示AI,PSD,EPS,PDF,INDD,TIFF,CR2,RAW等格式缩略图的图像解码包
windows·microsoft·pdf·windows11·系统修复
DS随心转小程序2 天前
AI公式不乱码
人工智能·pdf·deepseek·ds随心转
luyun0202022 天前
PDF神仙工具,批量处理
windows·pdf·figma