一、合并和拆分PDF文件的方式
PDF文件使用了工业标准的压缩算法,易c#教程于传输与储存。它还是页独立的,一个PDF文件包含一个或多个“页“,可以单独处理各页,特别适合多处理器系统的工作。PDF文件结构主要可以分为python基础教程四个部分:首部、文件体、交叉引用表、尾部。PDF操作类库非常多,如下图所示,常用的类库有:Spire.Pdf、iTextSharp。

二、使用 Spire.Pdf 合并和拆分PDF文件
使用 Nuget 添加Spire.Pdf 类库,然后添加如下代码:

/// <summary>/// 合并PDF文件/// </summary>/// <param name="files">待合并文件列表</param>/// <param name="outFile">合并生成的文件名称</param>static void SpirePdfMerge(string[] files, string outFile){var doc = Spire.Pdf.PdfDocument.MergeFiles(files);doc.Save(outFile, FileFormat.PDF);}/// <summary>/// 按每页拆分PDF文件/// </summary>/// <param name="inFile">待拆分PDF文件名称</param>static void SpirePdfSplit(string inFile){var doc = new Spire.Pdf.PdfDocument(inFile);doc.Split("SpirePdf_拆分-{0}.pdf");doc.Close();}

三、使用 iTextSharp 合并和拆分PDF文件
使用 Spire.Pdf 操作PDF文件,简单高效,但生成的PDF文件带有水印,即使使用破解版在第一页还是有水印,我们可以使用 iTextSharp 类库,该类库生成的PDF无水印,具体使用如下:

/// <summary>/// 合并PDF文件/// </summary>/// <param name="inFiles">待合并文件列表</param>/// <param name="outFile">合并生成的文件名称</param>static void iTextSharpPdfMerge(List<String> inFiles, String outFile){using (var stream = new FileStream(outFile, FileMode.Create)){using (var doc = new Document()){using (var pdf = new PdfCopy(doc, stream)){doc.Open();inFiles.ForEach(file =>{var reader = new PdfReader(file);for (int i = 0; i < reader.NumberOfPages; i++){var page = pdf.GetImportedPage(reader, i + 1);pdf.AddPage(page);}pdf.FreeReader(reader);reader.Close();});}}}}/// <summary>/// 按每页拆分PDF文件/// </summary>/// <param name="inFile">待拆分PDF文件名称</param>static void iTextSharpPdfSplit(string inFile){using (var reader = new PdfReader(inFile)){// 注意起始页是从1开始的for (int i = 1; i <= new PdfReader(inFile).NumberOfPages; i++){using (var sourceDocument = new Document(reader.GetPageSizeWithRotation(i))){var pdfCopyProvider = new PdfCopy(sourceDocument, new System.IO.FileStream($"iTextSharp_拆分_{i}.pdf", System.IO.FileMode.Create));sourceDocument.Open();var importedPage = pdfCopyProvider.GetImportedPage(reader, i);pdfCopyProvider.AddPage(importedPage);}}}}

四、测试结果
完整代码如下:

using Spire.Pdf;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Mime;
using System.Text;
using System.Threading.Tasks;
using iTextSharp.text;
using iTextSharp.text.pdf;
using PdfDocument = iTextSharp.text.pdf.PdfDocument;namespace Pdf
{class Program{static void Main(string[] args){try{SpirePdfMerge(Directory.GetFiles("Merge"), "SpirePdfMerge.pdf");Console.WriteLine("使用 Spire.Pdf 合并文件完成...");SpirePdfSplit($"{AppDomain.CurrentDomain.BaseDirectory}Split\\1.pdf");Console.WriteLine("使用 Spire.Pdf 拆分文件完成...");iTextSharpPdfMerge(Directory.GetFiles("Merge").ToList(), "iTextSharpPdfMerge.pdf");Console.WriteLine("使用 iTextSharp 合并文件完成...");iTextSharpPdfSplit($"{AppDomain.CurrentDomain.BaseDirectory}Split\\2.pdf");Console.WriteLine("使用 iTextSharp 拆分文件完成...");}catch (Exception e){Console.WriteLine(e);}finally{Console.ReadKey();}}#region Spire.Pdf/// <summary>/// 合并PDF文件/// </summary>/// <param name="files">待合并文件列表</param>/// <param name="outFile">合并生成的文件名称</param>static void SpirePdfMerge(string[] files, string outFile){var doc = Spire.Pdf.PdfDocument.MergeFiles(files);doc.Save(outFile, FileFormat.PDF);}/// <summary>/// 按每页拆分PDF文件/// </summary>/// <param name="inFile">待拆分PDF文件名称</param>static void SpirePdfSplit(string inFile){var doc = new Spire.Pdf.PdfDocument(inFile);doc.Split("SpirePdf_拆分-{0}.pdf");doc.Close();}#endregion#region iTextSharp.text.pdf/// <summary>/// 合并PDF文件/// </summary>/// <param name="inFiles">待合并文件列表</param>/// <param name="outFile">合并生成的文件名称</param>static void iTextSharpPdfMerge(List<String> inFiles, String outFile){using (var stream = new FileStream(outFile, FileMode.Create)){using (var doc = new Document()){using (var pdf = new PdfCopy(doc, stream)){doc.Open();inFiles.ForEach(file =>{var reader = new PdfReader(file);for (int i = 0; i < reader.NumberOfPages; i++){var page = pdf.GetImportedPage(reader, i + 1);pdf.AddPage(page);}pdf.FreeReader(reader);reader.Close();});}}}}/// <summary>/// 按每页拆分PDF文件/// </summary>/// <param name="inFile">待拆分PDF文件名称</param>static void iTextSharpPdfSplit(string inFile){using (var reader = new PdfReader(inFile)){// 注意起始页是从1开始的for (int i = 1; i <= new PdfReader(inFile).NumberOfPages; i++){using (var sourceDocument = new Document(reader.GetPageSizeWithRotation(i))){var pdfCopyProvider = new PdfCopy(sourceDocument, new System.IO.FileStream($"iTextSharp_拆分_{i}.pdf", System.IO.FileMode.Create));sourceDocument.Open();var importedPage = pdfCopyProvider.GetImportedPage(reader, i);pdfCopyProvider.AddPage(importedPage);}}}}#endregion}
}
  测试效果如下图所示:

C# 如何合并和拆分PDF文件相关推荐

  1. shell换行合并多个文件_如何合并多个pdf文件?这里有合并PDF最简单的方法

    如何合并多个pdf文件?今天在整理一些PDF文件的时候,由于文件的数量比较多,我就想着将这些PDF文件合并起来,好在平时也了解了一些PDF合并的方法,很快就完成了文件的合并.想到应该还有很多朋友还不知 ...

  2. java pdf合并_Java 合并、拆分PDF文档

    本文将介绍如何在Java程序中合并及拆分PDF文档,合并文档时,包括合并多个不同PDF文档为一个文档,以及合并PDF文档的不同页面为一页:拆分文档是,包括将PDF文档按每一页拆分,以及按指定页数范围来 ...

  3. PDF合并:如何将两个PDF文件合并成一个PDF文件

    PDF文件是我们在工作中经常能够用到的文件,尤其是在办公中会遇到很多PDF文件在传输的过程中为了传输更快被拆分成了几个PDF文件,但是要找一个完整的PDF文件就需要把两个被拆分的PDF文件合并成一个P ...

  4. Python实现按序合并多个pdf文件

    技术交流QQ群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder的程序人生 1.整体实现步骤 在日常办公中,我们可能会有一个需求,需要将多个pdf文件合并成一个文件. ...

  5. python合并多个pdf_python合并多个pdf文件

    假设您有个无聊的工作,将几十个PDF文档合并成一个PDF文件. 他们每个都有封面页作为第一页,但你不希望在最终结果中重复覆盖表. 即使有有很多免费的程序来组合PDF,其中许多只是合并整个文件在一起. ...

  6. 如何拆分PDF文件或提取PDF页面为一个单独文件?

    如何拆分PDF文件或提取PDF页面为一个单独文件?无论是工作还是生活中,我们都经常接触PDF文件,PDF格式文件在阅读体验感上无疑是极佳的,但如果一个PDF文件内容过大,页数过长,每次打开PDF文档速 ...

  7. 如何合并多个PDF文件?这几个小妙招快来码住吧

    在日常工作中,由于PDF文件具有不可编辑性,因此,我们也经常使用PDF格式来传输文件.可当文件数量较多时,一个个传输较麻烦且对方接收文件也不方便,但如果将多个PDF文件合并成一个文件就可以解决上述的烦 ...

  8. python pdf脚本之家_Python实现简单拆分PDF文件的方法

    本文实例讲述了Python实现简单拆分PDF文件的方法.分享给大家供大家参考.具体如下: 依赖pyPdf处理PDF文件 切分pdf文件 使用方法: 1)将要切分的文件放在input_dir目录下 2) ...

  9. python多图片合并pdf_Python结合ImageMagick实现多张图片合并为一个pdf文件的方法

    本文实例讲述了Python结合ImageMagick实现多张图片合并为一个pdf文件的方法.分享给大家供大家参考,具体如下: 前段时间买了不少书,现在手头的书籍积累的越来越多,北京这边租住的小屋子空间 ...

  10. 怎么合并多个PDF文件?仅需三个步骤,轻松合成一个文档

    大家在日常学习.工作中有没有碰到过这种情况,当完成一项任务时,需要在网上寻找各式各样的PDF文档资料,而寻找完之后,为了方便阅读与整理,将它们合并成一个PDF文件不失为一个好方法. 有的小伙伴可能刚接 ...

最新文章

  1. WinDbg的cmdtree命令
  2. 学习ASP.NET一定要学习ASP.NET AJAX吗?
  3. 局部变量和成员变量的区别
  4. 微信小程序的多选改变样式_微信小程序radio的样式修改
  5. java设计按月每天签到_活动攻略|新同学新签到,欢乐福利全都要!
  6. python能制作游戏吗_如何用Python制作小游戏
  7. [科技部与你共成长] 倒牛奶
  8. 摆摊神器五菱荣光爆红后,上汽大通房车又成夜市新晋网红
  9. C++之new和delete探究
  10. 使用git版本管理时的免密问题
  11. Vysor_2.1.2破解,及安装包
  12. C++_类和对象_对象特性_构造函数调用规则---C++语言工作笔记043
  13. unity3D-Gear VR字体由小变大效果
  14. linux下mysql允许远程连接
  15. (NeurIPS 2019) Gated CRF Loss -一种用于弱监督图像语义分割的新型损失函数
  16. EVC下如何直接访问寄存器?
  17. 点云应用于电力行业助力输配电安全距离检测分析以及精细化巡检
  18. C语言 将大写字母转换为小写字母
  19. Thinkphp 5.0 仿百度糯米开发多商家电商平台
  20. 网易新闻iOS版使用的18个开源组件

热门文章

  1. A problem occurred starting process 'command 'xxx
  2. F-Train Wreck_2021牛客暑期多校训练营10
  3. amd服务器epyc系列,AMD在市场上有EPYC系列的两个版本
  4. 网络流中 InputStream.available() = 0 问题探究
  5. 微信Log日志分析——初步探索
  6. android运行微信小程序,【报Bug】微信小程序在Android真机运行时报错atob is not a function...
  7. 蓝桥真题,跑步问题c语言解决方案
  8. SceneFlow Dataset
  9. Google Android8.1镜像WIFI提示“已连接但无法访问互联网“的解决办法
  10. html5校园生活,校园日常生活日记(精选12篇)