使用 iText7 在 C# 中填充 PDF 表单并设置为只读

360影视 欧美动漫 2025-04-21 08:32 2

摘要:在日常开发中,处理 PDF 文件是一个常见的需求,如填充 PDF 表单、生成报告或设置文件权限等。iText7 是一个功能强大的 PDF 操作库,支持多种 PDF 操作,包括表单填充、加密、数字签名等。

在日常开发中,处理 PDF 文件是一个常见的需求,如填充 PDF 表单、生成报告或设置文件权限等。iText7 是一个功能强大的 PDF 操作库,支持多种 PDF 操作,包括表单填充、加密、数字签名等。

本文将介绍如何使用 iText7 在 C# 中填充 PDF 表单,并将其设置为只读,同时解决可能遇到的常见问题。

2.1 安装 iText7

在项目中添加 iText7 的 NuGet 包:

dotnet add package itext7 --version 9.1.0
dotnet add package itext7.font-asian --version 9.1.0
dotnet add package itext7.bouncy-castle-adapter --version 9.1.0
using iText.Forms;
using iText.Kernel.Pdf;

// 输入PDF文件
stringsrc ="demo.pdf";
// 输出PDF文件
stringdest ="output3.pdf";

var ms = new MemoryStream;
// 打开现有的PDF文件
using (PdfDocument document = new PdfDocument(new PdfReader(src), new PdfWriter(ms)))
{
//获取表单
var form = PdfAcroForm.GetAcroForm(document,true);
//获取表单域
var fields = form.GetAllFormFields;

//设置字体
//PdfFont systemfont = PdfFontFactory.CreateFont("simhei.ttf", PdfEncodings.IDENTITY_H);

//form.GetField("gongcheng").SetValue("xxx").SetReadOnly(true).SetFont(systemfont);

//遍历表单域进行填充
foreach (var field in fields)
{
//填充表单、设置字体、设置只读
field.Value
.SetValue("123123")
.SetReadOnly(true);

}

// 设置表单为只读
form.FlattenFields;
}

var bt = ms.ToArray;
using (FileStream fs = new FileStream(dest, FileMode.OpenOrCreate, FileAccess.Write))
{
fs.Write(bt,0, bt.Length);
}

Console.WriteLine("Net分享 , PDF表单已填充并设置为只读");通过PdfReader和PdfWriter打开现有的 PDF 文件,并创建一个新的 PDF 文件:using (PdfDocument document = new PdfDocument(new PdfReader(src), new PdfWriter(ms)))4.2 获取表单和字段使用PdfAcroForm.GetAcroForm获取 PDF 表单,并通过获取所有字段:var form = PdfAcroForm.GetAcroForm(document, true);
var fields = form.GetAllFormFields;4.3 填充表单字段遍历表单字段,使用SetValue方法填充数据,并通过foreach (var field in fields)
{
field.Value
.SetValue("123123") // 填充的值
.SetReadOnly(true); // 设置为只读
}4.4 设置表单为只读通过FlattenFields方法将表单字段设置为不可编辑:form.FlattenFields;4.5 保存文件

将内存流中的数据写入目标文件:

var bt = ms.ToArray;
using (FileStream fs = new FileStream(dest, FileMode.OpenOrCreate, FileAccess.Write))
{
fs.Write(bt,0, bt.Length);
}5.1 调用时出现空引用异常问题描述:调用方法时可能会抛出空引用异常。

解决方案

1. 确保 PDF 文件中包含有效的表单字段。

2. 检查 Visual Studio 的调试设置:

• 打开工具 > 选项 > 调试 > 常规

• 勾选仅启用我的代码选项。

• 重新运行代码,问题可能会消失。

5.2 中文字体显示问题

问题描述:如果表单中包含中文字符,可能会出现字体不支持的问题。

解决方案

1. 安装 iText7 的字体支持包:

dotnet add package itext7.font-asian

2. 在代码中指定支持中文的字体:

var font = PdfFontFactory.CreateFont(StandardFonts.HELVETICA);
field.SetFont(font);

通过本文的介绍,可以使用 iText7 在 C# 中轻松实现 PDF 表单的填充和只读设置。iText7 提供了强大的 PDF 操作功能,适用于各种复杂的 PDF 处理场景。

来源:opendotnet

相关推荐