Aspose.Pdf合並PDF文件


使用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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM