C#怎么操作PDF合并拆分 C#如何用代码将多个PDF合并成一个或拆分成多个文件【工具】
<p>PdfPig 是 C# 中最稳的 PDF 合并/拆分方案,无许可证风险、API 清晰;iTextSharp v4.x 不支持新标准,易生成损坏文件。</p>用 PdfPig 合并 PDF 最稳,别碰 iTextSharp 旧版直接说结论:C# 做 PDF 合并/拆分, PdfPig 是目前最省心、无许可证风险、API 清晰的开源方案; iTextSharp (v4.x)虽老但有人还在用,它默认不支持新 PDF 标准(如 AES-256 加密、流式对象),合并后常报 PdfReader not initialized 或生成损坏文件。实操建议: PdfPig 安装只需 dotnet add package PdfPig ,.NET 5+ 原生支持,无需额外依赖合并时不要用“追加流”方式(比如把二进制直接拼接),必须通过 PdfDocumentBuilder 逐页导入——否则书签、字体、交叉引用表全丢如果源 PDF 有密码, PdfPig 支持传入口令: PdfDocument.Open(path, new PdfPasswordProvider("123")) ,但只支持用户密码(User Password),不支持所有者密码(Owner Password)解密注意页码偏移: builder.AddPagesFromDocument(doc, 0, 2) 表示取前两页(索引从 0 开始),不是“第 0 到第 2 页”拆分 PDF 按页或按范围,关键在 PdfDocumentBuilder 的生命周期管理常见错误是反复复用同一个 PdfDocumentBuilder 实例去写多个输出文件,结果只有最后一个文件能打开——因为 builder 内部缓冲区没清空,或底层 FileStream 被提前关闭。正确做法:每次拆分都新建独立 PdfDocumentBuilder + 新 FileStream ,别共用按页拆:遍历 sourceDoc.GetPages() ,每页单独建 builder、add page、save按范围拆(如每 5 页一个文件):用 GetPages().Skip(x).Take(5) 提取页面集合,再统一 add 进 builder别用 File.Copy() 拆单页 PDF——PDF 不是纯二进制拼图,页对象可能共享资源(字体、图像流),直接复制会断引用中文乱码?先确认字体是否嵌入,别急着换库合并后中文变方块或空白,大概率不是代码问题,而是源 PDF 里中文字体没嵌入,或用了非标准编码(如 GBK 而非 Unicode)。 PdfPig 默认不替换字体,它照搬原页面的字体字典。 跃问 跃问是由阶跃星辰开发的免费AI智能问答助手,随时帮你智能搜索、高效阅读、识图理解、和你畅聊感兴趣的话题。
