新闻详情

新闻详情

首页 / 资讯中心 / 详情

通过C#拆分PDF页面的多场景示例

发布时间:2026/9/1 4:35:44来源:尧图网络
通过C#拆分PDF页面的多场景示例
在处理 PDF 文档时“拆分页面”可以说是最常遇到的需求之一。比如一份几十页的报告你只想要其中某一章或者开会发的 PDF 会议纪要需要按参会者姓名拆成单页分别发邮件又或者你刚把一份扫描件导出来希望每一页变成一个独立的 PDF 文件……这些场景我都遇到过。今天就介绍如何用 Free Spire.PDF for .NET 这个免费库通过 C# 实现各种 PDF 页面拆分 场景。安装在 NuGet 包管理器里搜FreeSpire.PDF直接安装就行。这是一个免费社区版唯一的限制是单次处理不能超过 10 页适用于偶尔处理小文件。一、PDF 页面拆分原理拆 PDF 其实就四步把原 PDF 读进来决定要拆出哪些页单页、一个范围、或者抽几页新建一个空的 PDF 对象把选中的页面“复制”进去保存成新文件Free Spire.PDF 提供了一个PdfDocument类里面的Pages集合就像数组一样你可以按索引取出每一页然后插入到另一个文档里。下面我会用实际代码演示。二、每一页单独存一个 PDF如果你的目标就是“把一份 PDF 的每一页拆成单独的文件”这个库内置了一个Split方法一行调用就能搞定。1234567891011121314151617181920usingSpire.Pdf;namespaceSplitPdfDemo{internalclassProgram{staticvoidMain(string[] args){PdfDocument pdf newPdfDocument();pdf.LoadFromFile(D:\\测试文档.pdf);// 注意模板里必须写 {0}这是编号占位符// 比如 page_{0}.pdf 会生成 page_1.pdf, page_2.pdf ...pdf.Split(C:\\output\\page_{0}.pdf, 1);pdf.Close();Console.WriteLine(拆分完成请去 output 文件夹查看);}}}一点小经验Split方法第二个参数startNumber我一般就填 1这样文件名看起来更自然。如果你填 0第一个文件就会变成page_0.pdf容易引起困惑。三、每 N 页合并成一个 PDF比如每 3 页一个文件有时候我们不是要“每页一个文件”而是“每几页合成一个文件”。比方说你把扫描仪设置成了连续进纸每 3 页是一份合同那么拆分时就要按 3 页一组来切。这时候Split就不管用了得我们自己动手循环。代码12345678910111213141516171819202122232425262728293031323334353637383940414243usingSpire.Pdf;usingSystem;namespaceSplitPdf{internalclassProgram{staticvoidMain(string[] args){stringinputFile sample.pdf;intpagesPerGroup 3;// 每3页一组stringoutputPattern Group_{0}.pdf;PdfDocument source newPdfDocument();source.LoadFromFile(inputFile);inttotalPages source.Pages.Count;intgroupCount (int)Math.Ceiling((double)totalPages / pagesPerGroup);for(intg 0; g groupCount; g){PdfDocument groupDoc newPdfDocument();intstartIdx g * pagesPerGroup;// 起始索引0基intendIdx Math.Min(startIdx pagesPerGroup - 1, totalPages - 1);for(inti startIdx; i endIdx; i){groupDoc.InsertPage(source, source.Pages[i]);}stringoutputFile string.Format(outputPattern, g 1);groupDoc.SaveToFile(outputFile);groupDoc.Close();Console.WriteLine($已生成{outputFile});}source.Close();Console.WriteLine($全部完成共生成 {groupCount} 个文件);}}}四、其他常用拆分玩法1. 提取不连续的几页例如第 2、5、7 页有时候你只想抽几页出来做成一个新 PDF比如从合同里只把签字页拿出来。12345678910111213141516171819202122PdfDocument source newPdfDocument();source.LoadFromFile(合同.pdf);PdfDocument result newPdfDocument();int[] wantedPages { 2, 5, 7 };// 这里的数字是页码从1开始foreach(intpageNuminwantedPages){// 注意Pages 集合的索引是从0开始的所以要减1if(pageNum 1 pageNum source.Pages.Count){result.InsertPage(source, source.Pages[pageNum - 1]);}else{Console.WriteLine($警告第{pageNum}页不存在已跳过);}}result.SaveToFile(提取的签字页.pdf);result.Close();source.Close();一个小坑如果你传入的页码超出范围代码不会自动报错只是那页不会被复制。所以我加了一个if判断并打印警告避免你“以为复制了其实没有”。2. 提取所有奇数页 / 偶数页比如一份双面扫描的文档你想把奇数页和偶数页分开处理。123456789101112131415161718192021PdfDocument source newPdfDocument();source.LoadFromFile(双面扫描件.pdf);PdfDocument oddPages newPdfDocument();// 奇数页第1、3、5...PdfDocument evenPages newPdfDocument();// 偶数页第2、4、6...for(inti 0; i source.Pages.Count; i)// i 是0基索引{// 第1页的索引是0第2页索引是1依此类推if(i % 2 0)oddPages.InsertPage(source, source.Pages[i]);elseevenPages.InsertPage(source, source.Pages[i]);}oddPages.SaveToFile(奇数页.pdf);evenPages.SaveToFile(偶数页.pdf);oddPages.Close();evenPages.Close();source.Close();这里容易混淆的是索引 i0 对应第1页奇数页所以i%20是奇数页。五、总结需求使用方法核心 API每页单独保存pdf.Split(pattern_{0}.pdf, 1)内置Split每 N 页合为一个文件手动循环 InsertPagePdfDocument.InsertPage按指定页码提取手动筛选 InsertPage同上掌握上述模式后您可以灵活组合出满足各种业务规则的 PDF 拆分逻辑。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

ANNA 7.6 RAG 系统 – 国际版使用说明与宣传手册 2026/9/1 5:02:48

ANNA 7.6 RAG 系统 – 国际版使用说明与宣传手册

文章目录ANNA 7.5 RAG 系统——用户评估报告1. 一句话总结2. 系统能做什么3. 实测表现3.1 单轮问答——全部通过3.2 多轮对话(核心亮点)——全部通过3.3 回答质量示例4. 使用体验4.1 您会感受到的4.2 典型使用场景4.3 集成方式5. 系统可靠性与数据安全6.…

阅读更多 →
阿里钉钉ios面经及参考答案 2026/9/1 5:02:48

阿里钉钉ios面经及参考答案

目录 你了解哪些操作系统?请简单描述它们的特点。 请介绍操作系统内存管理中的虚拟地址空间,以及用户态和内核态的区别与切换过程。 进程和线程有什么区别?你在实际开发中使用过哪些进程或线程间的通信方式? 多线程开发中有哪些常见的锁(如互斥锁、自旋锁、读写锁、条…

阅读更多 →
腾讯2023后端面试全解析:核心考点、场景题与备考路线 2026/9/1 5:02:48

腾讯2023后端面试全解析:核心考点、场景题与备考路线

腾讯2023年的后端面试,整体给我的感觉是:考察面比前几年更宽,但对深度的要求一点没降。尤其是对项目经历的追问,几乎到了“掘地三尺”的程度——你以为准备好了一个亮点,面试官会顺着你的回答连环追问五六个“为什么”…

阅读更多 →
百度Java面试高频考点与底层原理全解析 2026/9/1 5:02:48

百度Java面试高频考点与底层原理全解析

说句实在话,临近2023年那段时间我一直在准备大厂Java岗的面试,百度是其中比较有代表性的一家。跟其他大厂比,百度的面试风格更偏“基础为骨、原理为肉”,很少问你特别偏门的框架API,反而会把Java基础、并发、JVM、中间…

阅读更多 →
端到端深度学习大白菜病害检测系统系统|PyTorch+ResNet+OpenCV完整源码+训练与部署教程 2026/9/1 5:02:48

端到端深度学习大白菜病害检测系统系统|PyTorch+ResNet+OpenCV完整源码+训练与部署教程

博主介绍 🚀 技术导师 & 全栈架构师 专业背景: 深耕技术领域多年,全网累计影响力覆盖10W开发者,荣获CSDN特邀作者、技术专家等多项认证,担任CSDN新星计划技术导师,专注Java企业级开发与小程序生态建设。…

阅读更多 →
网页的相关概念 2026/9/1 4:59:47

网页的相关概念

1.网页1.1什么是网页网页是指在因特网上根据一定的规则,使用HTML等制作的用于展示特定内容相关的页面网页是网站中的一页,网站是多个网页的集合。网页通常是HTML格式的文件,它需要通过浏览器来阅读网页是构成网站的基本元素,它通常…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞