【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();
    }
}
相关推荐
开开心心_Every7 小时前
免费进销存管理软件:云端本地双部署
java·游戏·微信·eclipse·pdf·excel·语音识别
winfredzhang9 小时前
从零构建:手写一个支持“高度定制化排版”的 Chrome 网页摘录插件
chrome·pdf·插件·epub·零碎信息归档
裴嘉靖10 小时前
前端获取二进制文件并预览的完整指南
前端·pdf
KG_LLM图谱增强大模型11 小时前
[20页中英文PDF]生物制药企业新一代知识管理:用知识图谱+大模型构建“第二大脑“
人工智能·pdf·知识图谱
开开心心就好12 小时前
系统清理工具清理缓存日志,启动卸载管理
linux·运维·服务器·神经网络·cnn·pdf·1024程序员节
helloworld也报错?12 小时前
保存网页为PDF
前端·javascript·pdf
东方-教育技术博主12 小时前
PDF文件夹去重
pdf
eybk12 小时前
拖放pdf转化为txt文件多进程多线程合并分词版
java·python·pdf
梦凡尘12 小时前
前端web端解析 Word、Pdf 文档文本内容
pdf·js
白典典12 小时前
iTextPDF生成手册时目录页码与实际页码不匹配问题求助
java·spring·pdf·intellij-idea