使用Aspose.Pdf类库,有很多种方法可以合并PDF文件,这里简单介绍小生见到的几种:

  • Doucment.Pages.Add
  • PdfFileEditor.Append
  • PdfFileEditor.Concatenate

Doucment.Pages.Add

要合并几个PDF文件,实际上就是把文档里的页合并到同一个文件里面,

所以可以打开PDF文件,简单的把其他文件的页面添加即可

Doucment pdfdoc1 = new Doucment("input.pdf");
Doucment pdfdoc2 = new Doucment("input.pdf"); pdfdoc1.Pages.Add(pdfdoc2.Pages); pdfdoc1.Save("output.pdf");

PdfFileEditor.Append

基本思路和上面是一样的,讲一个文件的页面添加到另一个文件末尾,

但是调用这个方法需要指定输入文件,要添加的文件,以及要添加的页数范围和输出文件

PdfFileEditor.Append(input, ports, startpage, endpage, output)
  • input 输入文件,可以是String类型的文件路径,也可以是Stream类型的文件数据流

  • ports 要添加的文件,可以是一个文件,也可以是一个数组,类型同input一样可以是String也可以是Stream

  • startpageendpage 要添加的页数范围,这个范围是指所有ports放在一起的页数范围

    例如:ports有三个文件,分别有3页,4页,5页,指定startpage=1endpage=4

    则会添加第一个文件的所有页面和第二个文件的第一页

  • output 输出文件,同input,可以是StringStream类型,在ports维数组时也可以是HttpResponse类型

PdfFileEditor pdfeditor = new PdfFileEditor();

// 将input2.pdf的第一页添加到input1.pdf末尾并输出output.pdf
pdfeditor.Append("input1.pdf", "input2.pdf", 1, 1, "output.pdf"); FileStream input1 = new FileStream("input1.pdf", FileMode.Open);
FileStream input2 = new FileStream("input2.pdf", FileMode.Open);
FileStream output = new FileStream("output.pdf", FileMode.Open);
pdfeditor.Append(input1, input2, 1, 1, output); // 将input2.pdf、input3.pdf的前6页添加到input1.pdf末尾并输出output.pdf
String[] ports = new String[]{"input2.pdf", "input3.pdf"};
pdfeditor.Append("input1.pdf", ports, 1, 6, "output.pdf"); FileStream input1 = new FileStream("input1.pdf", FileMode.Open);
FileStream[] ports = new FileStream[]{
new FileStream("input2.pdf", FileMode.Open),
new FileStream("input3.pdf", FileMode.Open)
};
FileStream output = new FileStream("output.pdf", FileMode.Open);
pdfeditor.Append(input1, ports, 1, 6, output); // 将结果输出到HTTP响应
pdfeditor.Append(input1, ports, 1, 6, HttpContext.Current.Response);

PdfFileEditor.Concatenate

Concatenate方法与Append的调用方式类似,也支持一个或多个路径String或数据流Stream输入,

输出到一个路径String、数据流Stream或HTTP请求响应HttpResponse

但是并不支持合并页数的指定,会将输入文件一个接着一个的合并,其重载列表如下

// 将两个文件合并成一个输出
Concatenate(Stream, Stream, Stream)
Concatenate(String, String, String) // 多个文件合并成一个
Concatenate(Stream[], Stream)
Concatenate(Stream[], HttpResponse)
Concatenate(String[], String)
Concatenate(String[], HttpResponse)
Concatenate(Document[], Document) // 前方高能
Concatenate(Stream, Stream, Stream, Stream)
Concatenate(String, String, String, String)

其中四个参数的重载方法,允许将两个文件交叉的合并成一个文件并用指定页填充空白页,

举例来说,加入input1.pdf有6页p1, p2, p3, p4, p5, p6,input2.pdf有3页p1', p2', p3'

再加上空白页blank.pdf,则输出为p1, p1', p2, p2', p3, p3', p4, blank, p5, blank, p6

注意这里因为没有p4', p5'所以使用blank页来代替

PdfFileEditor pdfeditor = new PdfFileEditor();
pdfeditor.Concatenate("input1.pdf", "input2.pdf", "blank.pdf", "output.pdf");

另外,因为小生的业务需求,需要在pdf合成完毕之后删除源文件,

所以就在执行完Concatenate方法后直接调用File.Delete方法删除文件,

但是却报错了,在看了API文档之后才了解到,需要设置

PdfFileEditor.CloseConcatenateStreams = true;

在合成完毕之后,关闭Stream

参考链接

Concatenate PDF Files

Append PDF files

Concatenate PDF Files with Blank PDF Using File Paths (Facades)

PdfFileEditor Class

Aspose.Pdf合并PDF文件的更多相关文章

  1. pypdf2:下载Americanlife网页生成pdf合并pdf并添加书签

    初步熟悉 安装 pip install pypdf2 合并并添加书签 #!/usr/bin/env python3.5 # -*- coding: utf-8 -*- # @Time : 2019/1 ...

  2. Aspose.Pdf合并图片到PDF文件

    将图片和PDF文件合成为新的PDF文件,可以先将图片转换为PDF文件, 然后合成PDF即可, 将图片转换成PDF文件有如下方法: Aspose.Pdf.Document Aspose.Pdf.Gene ...

  3. Pdf文件处理组件对比(Aspose.Pdf,Spire.Pdf,iText7)

    目的 因为公司是做医疗相关软件的,所以经常和文档打交道,其中就包含了Pdf.医院的Pdf(通常是他们的报告)都千奇百怪,而我们一直以来都是在用一些免费且可能已经没人维护了的组件来处理Pdf,所以就经常 ...

  4. 使用Python批量合并PDF文件(带书签功能)

    网上找了几个合并pdf的软件,发现不是很好用,一般都没有添加书签的功能. 又去找了下python合并pdf的脚本,发现也没有添加书签的功能的. 于是自己动手编写了一个小工具,使用了PyPDF2. 下面 ...

  5. 使用ItextSharop合并pdf文件,体积变大的解决

    通用的合并方式导致输出的pdf 文件中嵌入了大量的重复字体.导致文件体积膨胀. 使用基于内存流的方式,读取文件字节,可以解决重复字体的嵌入问题: public static string MergeF ...

  6. Java 合并PDF文件

    处理PDF文档时,我们可以通过合并的方式,来任意合并几个不同的PDF文件,使我们方便的存储和管理文档.例如,在做毕业设计的时候,封面和论文正文往往是两个PDF文档,但是,上交电子档的时候,需要合二为一 ...

  7. ImageMagick convert多张照片JPG转成pdf格式,pdfunite合并PDF文件

      在认识ImageMagick之前,我***的图像浏览软件是KuickShow,截图软件是KSnapShot,这两款软件都是KDE附带的软件,用起来也是蛮方便的.在一次偶然的机会中,我遇到了Imag ...

  8. 使用PyPdf2合并PDF文件(没有空白、报错)

    使用PyPdf2合并PDF文件(没有空白.报错) 对于合并之后pdf空白,或者出现 'latin-1' codec can't encode characters in position 8-11: ...

  9. iText C# 合并PDF文件流,以及A5变A4时内容默认放在最底下的问题的解决方法;ASP.NET 实现Base64文件流下载PDF

    /// <summary> 合併PDF檔(集合) </summary> /// <param name="files">欲合併PDF檔之集合(一 ...

随机推荐

  1. [SCOI2009]windy数(数位DP)

    题目描述 windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道, 在A和B之间,包括A和B,总共有多少个windy数? 输入输出格式 输 ...

  2. 选择客栈(noip2011 day1 t2)

    题目描述 丽江河边有 n 家很有特色的客栈,客栈按照其位置顺序从 1 到 nn n 编号.每家客栈都按照某一种色调进行装饰(总共 k 种,用整数 0 ~ k−1 表示),且每家客栈都设有一家咖啡店,每 ...

  3. 最长公共子序列Lcs (51Nod - 1006)

    20180604   11:28   给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的).   比如两个串为:   abcicba abdkscab   ab是两个串的子序列,ab ...

  4. Zabbix——部署(DB与web一体)

    前提条件: CentOS连接网络并可以正常访问网络 DNS设置完成,可以Ping同外网域名 安装数据库为8.0版本 关闭防火墙 如果需要搭建分离式请见:DB与Web分离 &DB.web.age ...

  5. Axure RP Extension for Chrome安装

    Axure RP Extension for Chrome安装 Axure RP Extension for Chrome是一款谷歌插件,主要可以用来查看原型文件.以前安装插件的时候总是找半天资源,很 ...

  6. 网络基础,tpc,udp

    一 , 网络基础相关知识 1. 架构 (重点) C / S  架构 : client 客户端(APP) 和 server 服务器端 能充分发挥pc机的性能 B / S 架构 : browser 浏览器 ...

  7. ruby 可枚举模块Enumerable

    Enumerable模块提供了遍历,搜索,比较,排序等方法.如果我们自定义的类需要实现这些方法,必须实现一个each方法.如果需要使用max,min,sort等方法,因为这些方法是集合的元素之间的排序 ...

  8. Qt——菜单栏、工具栏、状态栏

    1.菜单栏 菜单栏的意义是将可点击触发最终事件的集中在一起,所以菜单栏中是QAction 添加菜单栏是QMainWindow的行为 QMenubar *menubar = this->addMe ...

  9. xshell怎样打印

    Xshell提供用本地打印机打印终端窗口文本的功能.在Xshell打印时可以沿用终端窗口使用的字体及颜色.且在页面设置对话框可以设置打印纸的边距. 如何设置打印纸的大小和方向: 1.打开xshell ...

  10. CC3200作为STA模式连接路由器sl_WlanConnect出现exception occured at:0xa72fcf6

    1. 先看下出错的提示 2. 出错的代码部分,现在问题是定位不到哪一行代码出问题,反正运行一段时间就进入了 lRetVal = sl_WlanConnect((signed , &secPar ...