摘要:在开发中,处理 PDF 文件是一个常见的需求,例如生成报告、填充表单、设置权限或签名等。iText7 是一个功能强大的 PDF 操作库,支持多种 PDF 操作,包括表单填充、加密、数字签名、分割与合并等。
在开发中,处理 PDF 文件是一个常见的需求,例如生成报告、填充表单、设置权限或签名等。iText7 是一个功能强大的 PDF 操作库,支持多种 PDF 操作,包括表单填充、加密、数字签名、分割与合并等。
本文将通过实战,详细介绍如何使用 iText7 在 C# 中处理 PDF 文件,帮助快速上手并解决常见问题。
2.1 安装 iText7dotnet add package itext7 --version 9.1.0dotnet add package itext7.font-asian --version 9.1.0
dotnet add package itext7.bouncy-castle-adapter --version 9.1.03.1 填充 PDF 表单并设置为只读
打开一个 PDF 文件,填充表单字段,并将其设置为只读:
using System;using System.IO;
using iText.Kernel.Pdf;
using iText.Forms;
using iText.Forms.Fields;
// 输入 PDF 文件路径
using System.Reflection.PortableExecutable;
stringsrc = "template.pdf";
// 输出 PDF 文件路径
stringdest = "filled_form.pdf";
// 打开现有的 PDF 文件
using (PdfDocument pdfDoc = new PdfDocument(new PdfReader(src), new PdfWriter(dest)))
{
// 获取 PDF 表单
PdfAcroForm form = PdfAcroForm.GetAcroForm(pdfDoc,true);
// 填充表单字段
form.GetField("Name").SetValue("Netshare").SetReadOnly(true);
form.GetField("Date").SetValue("2025-04-19").SetReadOnly(true);
form.GetField("Amount").SetValue("$1000").SetReadOnly(true);
// 将表单字段设置为不可编辑
form.FlattenFields;
}
Console.WriteLine("PDF 表单已填充并设置为只读");3.2 合并多个 PDF 文件using System;
using iText.Kernel.Pdf;
string pdfFiles = { "file1.pdf", "file2.pdf", "file3.pdf" };
stringdest = "merged.pdf";
using (PdfDocument mergedPdf = new PdfDocument(new PdfWriter(dest)))
{
foreach (stringfilein pdfFiles)
{
using (PdfDocument pdf = new PdfDocument(new PdfReader(file)))
{
pdf.CopyPagesTo(1, pdf.GetNumberOfPages, mergedPdf);
}
}
}
Console.WriteLine("PDF 文件已成功合并");3.3 分割 PDF 文件using System;
using iText.Kernel.Pdf;
stringsrc = "large.pdf";
stringoutputDir = "output/";
using (PdfDocument pdfDoc = new PdfDocument(new PdfReader(src)))
{
for (inti =1; i <= pdfDoc.GetNumberOfPages; i++)
{
stringdest = $"{outputDir}page-{i}.pdf";
using (PdfDocument singlePagePdf = new PdfDocument(new PdfWriter(dest)))
{
pdfDoc.CopyPagesTo(i, i, singlePagePdf);
}
}
}
Console.WriteLine("PDF 文件已成功分割");3.4 加密 PDF 文件using System;
using iText.Kernel.Pdf;
stringsrc = "document.pdf";
stringdest = "encrypted.pdf";
WriterProperties props = new WriterProperties
.SetStandardEncryption(
"user_password".GetBytes,
"owner_password".GetBytes,
EncryptionConstants.ALLOW_PRINTING,
EncryptionConstants.ENCRYPTION_AES_256
);
using (PdfWriter writer = new PdfWriter(dest, props))
using (PdfDocument pdfDoc = new PdfDocument(new PdfReader(src), writer))
{
Console.WriteLine("PDF 文件已加密");
}问题描述:调用GetField时返回 。
解决方案:确保字段名称与 PDF 表单中的实际名称一致,可以使用 PDF 编辑工具(如 Adobe Acrobat)检查字段名称。
4.2 中文字体显示问题解决方案:
1. 安装 iText7 的字体支持包:
dotnet add package itext7.font-asian2. 在代码中指定支持中文的字体:
var font = PdfFontFactory.CreateFont(StandardFonts.HELVETICA);field.SetFont(font);
通过本文的实战案例,您可以使用 iText7 在 C# 中轻松实现 PDF 表单填充、文件合并、分割和加密等操作。iText7 提供了强大的功能,适用于各种复杂的 PDF 处理场景。
来源:opendotnet