首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用 iText7 在 C# 中填充 PDF 表单并设置为只读

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

作者头像
郑子铭
发布2025-06-07 14:00:15
发布2025-06-07 14:00:15
28400
代码可运行
举报
运行总次数:0
代码可运行

1. 引言

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

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

2. 环境准备

2.1 安装 iText7

在项目中添加 iText7 的 NuGet 包:

代码语言:javascript
代码运行次数:0
运行
复制
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

3. 填充 PDF 表单并设置为只读

代码语言:javascript
代码运行次数:0
运行
复制
 
using iText.Forms;
using iText.Kernel.Pdf;


// 输入PDF文件
string src = "demo.pdf";
// 输出PDF文件
string dest = "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表单已填充并设置为只读");

4. 代码详解

4.1 打开 PDF 文件

通过PdfReaderPdfWriter打开现有的 PDF 文件,并创建一个新的 PDF 文件:

代码语言:javascript
代码运行次数:0
运行
复制
using (PdfDocument document = new PdfDocument(new PdfReader(src), new PdfWriter(ms)))

4.2 获取表单和字段

使用PdfAcroForm.GetAcroForm获取 PDF 表单,并通过GetAllFormFields获取所有字段:

代码语言:javascript
代码运行次数:0
运行
复制
var form = PdfAcroForm.GetAcroForm(document, true);
var fields = form.GetAllFormFields();

4.3 填充表单字段

遍历表单字段,使用SetValue方法填充数据,并通过SetReadOnly方法将字段设置为只读:

代码语言:javascript
代码运行次数:0
运行
复制
foreach (var field in fields)
{
    field.Value
        .SetValue("123123") // 填充的值
        .SetReadOnly(true); // 设置为只读
}

4.4 设置表单为只读

通过FlattenFields方法将表单字段设置为不可编辑:

代码语言:javascript
代码运行次数:0
运行
复制
form.FlattenFields();

4.5 保存文件

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

代码语言:javascript
代码运行次数:0
运行
复制
var bt = ms.ToArray();
using (FileStream fs = new FileStream(dest, FileMode.OpenOrCreate, FileAccess.Write))
{
    fs.Write(bt, 0, bt.Length);
}

5. 常见问题及解决方案

5.1 调用PdfAcroForm.GetAcroForm()时出现空引用异常

问题描述:调用PdfAcroForm.GetAcroForm()方法时可能会抛出空引用异常。

解决方案

  1. 1. 确保 PDF 文件中包含有效的表单字段。
  2. 2. 检查 Visual Studio 的调试设置:
    • • 打开工具 > 选项 > 调试 > 常规
    • • 勾选仅启用我的代码选项。
    • • 重新运行代码,问题可能会消失。

5.2 中文字体显示问题

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

解决方案

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

代码语言:javascript
代码运行次数:0
运行
复制
dotnet add package itext7.font-asian

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

代码语言:javascript
代码运行次数:0
运行
复制
var font = PdfFontFactory.CreateFont(StandardFonts.HELVETICA);
field.SetFont(font);

6. 参考资料

  • •Adobe Acrobat 表单字段属性
  • •iText7 官方文档
  • •博客园:iText7 使用指南

7. 总结

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-05-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DotNet NB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 引言
  • 2. 环境准备
    • 2.1 安装 iText7
  • 3. 填充 PDF 表单并设置为只读
  • 4. 代码详解
    • 4.1 打开 PDF 文件
    • 4.2 获取表单和字段
    • 4.3 填充表单字段
    • 4.4 设置表单为只读
    • 4.5 保存文件
  • 5. 常见问题及解决方案
    • 5.1 调用PdfAcroForm.GetAcroForm()时出现空引用异常
    • 5.2 中文字体显示问题
  • 6. 参考资料
  • 7. 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档