TypechoJoeTheme

至尊技术网

统计
登录
用户名
密码

Java操作PDF文件实战指南:iText库从入门到精通

2025-12-31
/
0 评论
/
52 阅读
/
正在检测是否收录...
12/31

在现代企业应用中,PDF文件的生成与处理是常见需求,例如报表导出、合同生成等场景。Java生态中,iText库是操作PDF的标杆工具,支持从零创建PDF、编辑现有文件、添加复杂元素等功能。本文将带你系统学习iText的核心用法,全程代码实战。

1. iText库简介与环境配置

iText是一个开源的Java/PDF库,支持PDF 1.7标准(ISO 32000),提供对文本、表格、图像、签名的精细控制。

Maven依赖配置
xml <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.13</version> </dependency>

2. 基础PDF生成

以下代码创建一个包含标题和段落的PDF文件:

  
import com.itextpdf.text.Document;  
import com.itextpdf.text.Paragraph;  
import com.itextpdf.text.pdf.PdfWriter;  
import java.io.FileOutputStream;  

public class BasicPdf {  
    public static void main(String[] args) {  
        Document document = new Document();  
        try {  
            PdfWriter.getInstance(document, new FileOutputStream("basic.pdf"));  
            document.open();  
            document.add(new Paragraph("Hello PDF with iText!"));  
            document.add(new Paragraph("This is a sample paragraph."));  
            document.close();  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
}  

3. 添加表格与样式控制

iText支持通过PdfPTable类创建表格,并设置字体、颜色等样式:

  
import com.itextpdf.text.Font;  
import com.itextpdf.text.pdf.PdfPTable;  

// 创建表格  
PdfPTable table = new PdfPTable(3);  
table.addCell("Name");  
table.addCell("Age");  
table.addCell("Role");  

// 设置字体  
Font boldFont = new Font(Font.FontFamily.HELVETICA, 12, Font.BOLD);  
Paragraph header = new Paragraph("Employee List", boldFont);  

document.add(header);  
document.add(table);  

4. 插入图片与水印

通过Image类添加图片,结合PdfContentByte实现水印效果:

  
import com.itextpdf.text.Image;  
import com.itextpdf.text.pdf.PdfContentByte;  

// 插入图片  
Image logo = Image.getInstance("logo.png");  
logo.scaleToFit(100, 100);  
document.add(logo);  

// 添加水印  
PdfContentByte canvas = writer.getDirectContentUnder();  
canvas.beginText();  
canvas.setFontAndSize(baseFont, 40);  
canvas.showTextAligned(PdfContentByte.ALIGN_CENTER, "CONFIDENTIAL", 300, 400, 45);  
canvas.endText();  

5. 读取与编辑现有PDF

使用PdfReaderPdfStamper修改已有PDF:

  
PdfReader reader = new PdfReader("input.pdf");  
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("output.pdf"));  

// 在第二页添加文本  
ColumnText ct = new ColumnText(stamper.getOverContent(2));  
ct.setSimpleColumn(50, 50, 500, 700);  
ct.addText(new Phrase("Modified by iText"));  
ct.go();  

stamper.close();  
reader.close();  

6. 高级功能:加密与签名

通过PdfEncryptor设置文件密码,或使用PdfSignatureAppearance实现数字签名:

  
// 加密PDF  
PdfEncryptor.encrypt(reader, new FileOutputStream("encrypted.pdf"),   
    "userpass".getBytes(), "ownerpass".getBytes(),   
    PdfWriter.ALLOW_PRINTING, PdfWriter.STRENGTH128BITS);  

// 数字签名(需密钥库)  
PdfSignatureAppearance sap = stamper.getSignatureAppearance();  
sap.setCrypto(key, chain, null, PdfSignatureAppearance.WINCER_SIGNED);  

7. 性能优化与常见问题

  • 内存管理:处理大文件时使用PdfReaderpartialRead模式。
  • 中文支持:引入itext-asian包,设置中文字体:
  
  BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", false);  
  Font chineseFont = new Font(bf, 12);  
  

结语

iText库PDF编辑Java开发Java PDF操作PDF生成
朗读
赞(0)
版权属于:

至尊技术网

本文链接:

https://www.zzwws.cn/archives/42455/(转载时请注明本文出处及文章链接)

评论 (0)
37,548 文章数
92 评论量

人生倒计时

今日已经过去小时
这周已经过去
本月已经过去
今年已经过去个月