首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C# 实战指南:使用 iText7 高效处理 PDF 文件

C# 实战指南:使用 iText7 高效处理 PDF 文件

作者头像
郑子铭
发布2025-06-07 13:53:28
发布2025-06-07 13:53:28
38400
代码可运行
举报
运行总次数:0
代码可运行

1. 引言

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

本文将通过实战,详细介绍如何使用 iText7 在 C# 中处理 PDF 文件,帮助快速上手并解决常见问题。

2. 环境准备

2.1 安装 iText7

代码语言: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. 使用 iText7 处理 PDF 文件

3.1 填充 PDF 表单并设置为只读

打开一个 PDF 文件,填充表单字段,并将其设置为只读:

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

// 输入 PDF 文件路径
using System.Reflection.PortableExecutable;

string src = "template.pdf";
// 输出 PDF 文件路径
string dest = "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 文件

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

string[] pdfFiles = { "file1.pdf", "file2.pdf", "file3.pdf" };
string dest = "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 文件

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

string src = "large.pdf";
string outputDir = "output/";

using (PdfDocument pdfDoc = new PdfDocument(new PdfReader(src)))
{
    for (int i = 1; i <= pdfDoc.GetNumberOfPages(); i++)
    {
        string dest = $"{outputDir}page-{i}.pdf";
        using (PdfDocument singlePagePdf = new PdfDocument(new PdfWriter(dest)))
        {
            pdfDoc.CopyPagesTo(i, i, singlePagePdf);
        }
    }
}

Console.WriteLine("PDF 文件已成功分割");

3.4 加密 PDF 文件

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

string src = "document.pdf";
string dest = "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 文件已加密");
}

4. 常见问题及解决方案

4.1 表单字段名称不匹配

问题描述:调用 GetField 时返回 null解决方案:确保字段名称与 PDF 表单中的实际名称一致,可以使用 PDF 编辑工具(如 Adobe Acrobat)检查字段名称。

4.2 中文字体显示问题

问题描述:填充的中文字符显示为乱码。 解决方案

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

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

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

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

5. 总结

通过本文的实战案例,您可以使用 iText7 在 C# 中轻松实现 PDF 表单填充、文件合并、分割和加密等操作。iText7 提供了强大的功能,适用于各种复杂的 PDF 处理场景。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 引言
  • 2. 环境准备
    • 2.1 安装 iText7
  • 3. 使用 iText7 处理 PDF 文件
    • 3.1 填充 PDF 表单并设置为只读
    • 3.2 合并多个 PDF 文件
    • 3.3 分割 PDF 文件
    • 3.4 加密 PDF 文件
  • 4. 常见问题及解决方案
    • 4.1 表单字段名称不匹配
    • 4.2 中文字体显示问题
  • 5. 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档