LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

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

admin
2025年4月19日 11:40 本文热度 60

1. 引言

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

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


2. 环境准备

2.1 安装 iText7

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 文件,填充表单字段,并将其设置为只读:

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 文件

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 文件

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 文件

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. 1. 安装 iText7 的字体支持包:
    dotnet add package itext7.font-asian
  2. 2. 在代码中指定支持中文的字体:
    var font = PdfFontFactory.CreateFont(StandardFonts.HELVETICA);
    field.SetFont(font);

5. 总结

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


该文章在 2025/4/19 11:40:42 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved