C# 删除 PDF 页面:单页 / 多页批量删除技巧

张开发
2026/4/17 20:14:16 15 分钟阅读

分享文章

C# 删除 PDF 页面:单页 / 多页批量删除技巧
在自动化文档处理流程中PDF 文件可能因导出错误、内容重复或格式转换问题而包含多余页面。手动删除不仅耗时而且处理大批量文件时容易导致文件损坏。通过 C# 调用 .NET 组件实现程序化删除 PDF 页面可以将功能无缝集成到桌面应用、Web 服务中实现自动化、批量化处理。本文演示如何使用免费库 Free Spire.PDF for .NET 删除 PDF 文件中的单个或多个页面。1. 安装打开 Visual Studio进入 工具 → NuGet 包管理器 → 程序包管理器控制台执行Install-Package FreeSpire.PDF或者在管理 NuGet 程序包界面中搜索FreeSpire.PDF并安装最新版本。2. 加载 PDF 文档使用PdfDocument类。该库提供了多种加载方式usingSpire.Pdf;// 从文件路径加载PdfDocumentpdfnewPdfDocument();pdf.LoadFromFile(C:\input.pdf);// 从流加载using(FileStreamfsnewFileStream(C:\input.pdf,FileMode.Open)){pdf.LoadFromStream(fs);}// 从字节数组加载byte[]dataFile.ReadAllBytes(C:\input.pdf);pdf.LoadFromStream(newMemoryStream(data));注意LoadFromFile内部会检查文件是否存在若不存在则抛出FileNotFoundException。建议用File.Exists预判。3. 删除单个 PDF 页面 关键规则Free Spire.PDF 的页面索引为0 开头0-based日常使用的页码是1 开头1-based删除前需要转换目标页码1-based - 1 代码索引0-based// 示例删除第 3 页对应索引 2pdf.Pages.RemoveAt(2);返回值和影响RemoveAt方法没有返回值。删除后后续页面的索引会自动减 1。例如原本有 5 页删除索引 2 后原索引 3 变成新的索引 24. 删除多个 PDF 页面删除多页时删除靠前的页面会导致后续页面索引自动前移直接删除会引发索引错误。✅最佳方案先将页码转为索引再按【降序】删除以下示例使用 1‑based 页码删除第 1 页和第 3 页// 定义需要删除的页码1-based直接填日常看到的页码即可int[]pagesToDeletenewint[]{1,3};// 转换为 0‑based 索引并降序排列vardeleteIndicespagesToDelete.Select(pagepage-1).Where(indexindex0indexpdf.Pages.Count)// 过滤无效索引.OrderByDescending(indexindex);// 循环删除页面foreach(intindexindeleteIndices){pdf.Pages.RemoveAt(index);}注意删除前务必使用pdf.Pages.Count验证页码的有效性。效果预览5. 保存修改后的 PDF 文件删除完成后调用SaveToFile保存文件支持覆盖原文件或生成新文件// 保存到新文件pdf.SaveToFile(output.pdf);// 覆盖原文件谨慎使用pdf.SaveToFile(C:\input.pdf);// 保存到流using(FileStreamfsnewFileStream(output.pdf,FileMode.Create)){pdf.SaveToStream(fs);}pdf.Close();6. 完整可运行代码含异常处理整合所有功能加入异常捕获适配文件损坏、页码无效、权限不足等场景usingSystem;usingSystem.Linq;usingSystem.IO;usingSpire.Pdf;classPdfPageDeleter{staticvoidMain(string[]args){stringinputPathC:\docs\input.pdf;stringoutputPathC:\docs\output.pdf;int[]pagesToDelete{2,4};// 1‑based: 删除第 2 页和第 4 页try{using(PdfDocumentpdfnewPdfDocument()){// 检查文件是否存在if(!File.Exists(inputPath)){Console.WriteLine($文件不存在:{inputPath});return;}pdf.LoadFromFile(inputPath);intoriginalPageCountpdf.Pages.Count;Console.WriteLine($原始页数:{originalPageCount});// 过滤有效页码varindicespagesToDelete.Select(pp-1).Where(ii0ioriginalPageCount).OrderByDescending(ii).ToList();if(indices.Count0){Console.WriteLine(没有有效的页码需要删除。);return;}foreach(intindexinindices){pdf.Pages.RemoveAt(index);}Console.WriteLine($删除后页数:{pdf.Pages.Count});pdf.SaveToFile(outputPath);Console.WriteLine($已保存到:{outputPath});}}catch(System.IO.IOException){Console.WriteLine(错误PDF 文件被其他程序占用或无文件读写权限);}catch(Exceptionex){Console.WriteLine($操作失败:{ex.Message});}}}7. 常见异常处理开发中常见的异常场景直接套用以下处理逻辑场景处理方式页码超出范围通过index pdf.Pages.Count过滤无效索引避免报错空 PDF 文件判断pdf.Pages.Count 0直接终止操作文件损坏 / 无法读取使用try-catch捕获加载异常删除全部页面免费库支持该操作最终会生成一个空白 PDF 文件文件权限不足捕获IOException提示用户管理员权限运行程序8. 页面集合操作PdfDocument.Pages属性返回PdfPageCollection对象。其他常用方法Count: 获取总页数。Insert(int index)在指定位置插入页面。Add()在末尾追加页面。 更多方法参考该 API 接口文档如果需要条件删除例如删除包含指定关键词文本的页面可以结合PdfTextFinder使用usingSpire.Pdf.Texts;PdfTextFinderfindernewPdfTextFinder(pdf.Pages[0]);varfoundfinder.Find(机密);// 返回文本位置列表本文介绍了删除单页、多页和条件删除的 PDF 页面管理方案可轻松集成到自动化工作流中无需依赖 Adobe Acrobat 等外部软件。

更多文章