前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C# 实战指南:使用 iText7 高效处理 PDF 文件

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

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

1. 引言

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

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

2. 环境准备

2.1 安装 iText7

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
运行
AI代码解释
复制
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
运行
AI代码解释
复制
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
运行
AI代码解释
复制
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
运行
AI代码解释
复制
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
运行
AI代码解释
复制
dotnet add package itext7.font-asian

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
对象存储COS × 云顾问:安全管理重磅升级,守护数据安全!
在数字化浪潮下,对象存储 COS 作为海量数据的核心载体,安全防护能力至关重要。存储桶配置不当可能引发数据泄露、流量盗刷等安全问题,因此腾讯云对象存储 COS 基于云顾问的云巡检能力,正式推出全新「安全管理」功能,通过智能巡检、多维评估、实时管控三大核心能力,为企业构建从风险识别到修复闭环的全链路防护体系,让数据安全从“被动防御”迈向“主动治理”。
云存储
2025/03/14
3150
对象存储COS × 云顾问:安全管理重磅升级,守护数据安全!
对象存储COS-防盗刷指引
近年来,越来越多的用户在搭建网站或图床时将图片视频等资源上传到对象存储COS,提升了访问稳定性的同时降低了服务器的存储空间压力,但随之而来的流量盗刷、图片盗链问题也困扰着不少开发者,一旦存储空间被恶意访问,会产生高额的流量费用,产生不必要的纠纷。这类问题实际上可以通过多种手段来防护,本文将主要介绍一些常见的防护手段,帮助开发者合理配置存储桶,建立安全机制,降低因类似问题带来的大额资金损失的风险。
云存储
2023/09/22
1.9K0
对象存储COS-防盗刷指引
运维干货|对象存储COS成本管理秘籍
成本管理是业务运维的一项重要内容,我们在使用云产品时一定要熟悉其计费规则,在保证服务质量、数据安全的前提下尽可能的降低服务运营成本,下文从预防预期外成本增长、现有成本的优化、以及成本的持续运营思路来探讨对象存储COS成本管理方案。
覃春善
2021/02/25
2.9K0
运维干货|对象存储COS成本管理秘籍
【最佳实践】巡检项:对象存储(COS)存储桶防盗链(Referer)配置
检查腾讯云对象存储 COS 的防盗链配置情况。 当COS存储桶权限为公有读时,如果防盗链出现以下两种情况,可能会导致存储桶出现安全风险。
吴硕卫
2022/05/10
3.3K1
腾讯云对象存储COS安全方案介绍
​相信所有企业和个人开发者在选用云存储产品时都把数据安全作为重要考量标准。 本文介绍了用户如何使用腾讯云对象存储COS的事前防护、事中监控、事后追溯三个手段来保证自己的数据安全。
云存储
2020/03/03
7.5K0
【客户案例】巡检项:对象存储(COS)存储桶防盗链(Referer)配置
某客户根据账单发现COS的费用突然增加,然后去分析发现请求费用和流量费用的增加,但是客户业务量没有明显的增。
Smart Advisor
2022/03/15
1.1K0
如何使用对象存储 COS ?七个步骤,帮你搞定!
腾讯云对象存储 COS(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务,用户可通过网络随时存储和查看数据。同时为用户提供了高数据持久性、高可用性、高性能的对象存储服务。
云存储
2022/02/25
9.4K0
如何使用对象存储 COS ?七个步骤,帮你搞定!
【玩转腾讯云】对象存储COS的权限管理分析
随着互联网和公有云的发展,越来越多的企业把数据放到公有云上,COS(Cloud Object Storage)作为腾讯云的对象存储产品,提供了高容量、高可靠、低成本的存储解决方案,也使得客户把越来越多的业务数据放到了COS上。
ictfox
2020/04/27
16.6K5
【玩转腾讯云】对象存储COS的权限管理分析
腾讯云COS设置防盗链
为了避免恶意程序使用资源 URL 盗刷公网流量或使用恶意手法盗用资源,给用户带来不必要的损失。腾讯云对象存储支持防盗链配置,建议您通过控制台的防盗链设置配置黑/白名单,来进行安全防护。
西里国际站
2023/05/11
5.7K0
腾讯云COS设置防盗链
腾讯云cos对象存储的流程!
西里网
2025/05/30
1650
【腾讯云轻量对象存储“用户实践”征文】腾讯云轻量对象存储LighthouseCOS 实践体验:简单高效的数据存储解决方案
摘要:本文将介绍分享关于LighthouseCOS的功能和特点,并分享用户在实践中的体验,因为LighthouseCOS作为一种简单高效的数据存储解决方案,为用户提供了可靠、安全和易用的云端存储服务,值得一用。
三掌柜
2024/02/23
3303
【腾讯云轻量对象存储“用户实践”征文】腾讯云轻量对象存储LighthouseCOS 实践体验:简单高效的数据存储解决方案
腾讯云对象存储 COS 高可用解决方案,都在这里了!
上一篇内容我们说到了 COS 是什么“要对象存储做什么,我有女朋友就够了!”的文章。本文将着重介绍如何尽可能的提高腾讯云对象存储 COS 的可用性。
云存储
2019/12/06
2.8K0
腾讯云对象存储 COS 高可用解决方案,都在这里了!
腾讯云对象存储COS之间的数据如何进行迁移
全托管公网迁移模式中,无需自主部署 Agent,任务创建之后自动化执行。腾讯云 COS 间迁移时 MSP 将通过内网拉取源对象存储桶数据并保存到目标对象存储桶,不会产生额外费用。
云存储
2020/01/03
2.8K0
腾讯云对象存储COS之间的数据如何进行迁移
【最佳实践】巡检项:对象存储(COS)存储桶公有读写
某客户使用COS存储进行一些文件的存储,近期发现桶中出现了一些不是自己上传的文件、一些文件被删除了,还有一些流量的产生,经排查是因为桶开启了公有读写,任何人都可以对桶进行读写操作。
xinjwang王健
2022/04/21
2K0
安排!国内首个对象存储攻防矩阵,护航数据安全
前言 对象存储是云厂商提供的一种用来存储海量文件的分布式存储服务,可用于大规模存储非结构化数据。因为其具有高扩展性、低成本、可靠安全等优点,所以成为许多IT产业向云原生的开发和部署模式转变过程中不可或缺的一部分。 随着云上业务的蓬勃发展,作为云原生的一项重要能力,对象存储服务面临着一系列的安全挑战。纵观近些年来的云安全漏洞,与对象存储服务相关的数据泄露事件比比皆是,以2017美国国防部承包商数据泄露为例: “Booz Allen Hamilton公司(提供情报与防御顾问服务)在使用亚马逊S3服务器存储政
云存储
2021/11/10
2.3K0
轻量对象存储 LighthouseCOS实践
如今互联网时代在高速发展,对网站的访问速度越来越高了,往往在图片加载的时候,会遇到卡顿、超时、缓慢的情况产生,从而需要将大量的文本类资源(如css、html、图片、txt文本)都可以通过云储存为商户实现了快捷稳定的服务。
用户10585271
2024/02/13
6.7K8
轻量对象存储 LighthouseCOS实践
使用腾讯云SCF实现COS费用封顶的最佳实践
腾讯云COS对象存储,在使用的过程中,为了降低开发成本或单纯的出于“便捷”的考虑,往往将存储桶设置为公有读状态。但这也埋下了巨大的安全风险的种子,在各种流量盗刷场景下,会快速吸干账户余额,正可谓“公有一时爽,盗刷就破产”。
wainsun
2023/04/05
11.9K1
使用腾讯云SCF实现COS费用封顶的最佳实践
腾讯云主机安装COSFS工具并使用COS对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。
yuanfan2012
2021/01/28
3.9K0
【腾讯云顾问产品白皮书】重磅发布
随着云计算技术的快速发展,企业上云已成为推动业务创新和发展的重要手段。在这个过程中,构建一个高效、稳定、安全的云上架构成为企业面临的关键挑战。腾讯云卓越架构框架(Tencent Cloud Well-Architected Framework)旨在为企业提供一套全面的设计理念,帮助客户解决业务上云后的关键问题。
Smart Advisor
2024/08/20
4411
【腾讯云顾问产品白皮书】重磅发布
WordPress使用腾讯云对象存储COS进行静态资源CDN加速
个人博客目前使用的腾讯云服务器只有1M带宽,如果文章里图片多一些的话加载速度会明显变慢,解决这个问题除了升级带宽最好的办法就是将博客进行动静分离来加速图片加载。今天将博客使用腾讯云对象存储COS进行静态资源CDN加速布置方法写出来,做一个简单的教程,给需要的朋友参考。
聚优云惠
2019/12/25
6.2K0
推荐阅读
相关推荐
对象存储COS × 云顾问:安全管理重磅升级,守护数据安全!
更多 >
LV.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 归档