? ? ? ?隨著PDF文檔在日常工作學(xué)習(xí)中的運(yùn)用越來(lái)越廣泛,為了便于更好地儲(chǔ)存和管理文檔啸臀,不可避免地會(huì)遇到將多個(gè)PDF文檔合為一個(gè)文檔届宠,或?qū)⒁粋€(gè)PDF文檔拆分成若干個(gè)文檔的操作。本文就將詳細(xì)介紹如何使用Java程序來(lái)對(duì)PDF文檔進(jìn)行合并及拆分乘粒。
使用工具:Free Spire.PDF for Java(免費(fèi)版)
Jar文件獲取及導(dǎo)入:
方法1:通過(guò)官網(wǎng)下載獲取jar包豌注。解壓后將lib文件夾下的Spire.Pdf.jar文件導(dǎo)入Java程序。(如下圖)
方法2:通過(guò)maven倉(cāng)庫(kù)安裝導(dǎo)入灯萍。具體安裝詳解參見(jiàn)此網(wǎng)頁(yè)轧铁。
【示例1】合并PDF文檔
方法1:加載三個(gè)獨(dú)立的PDF文檔,然后將第二旦棉、第三個(gè)PDF文檔中的數(shù)據(jù)插入到第一個(gè)文檔齿风。
import com.spire.pdf.PdfDocument;
public class MergeDocument { ???
public static void main(String[] args) { ???????
String[] files = new String[]? ? ? ? ? ? ? ? {
"C:\\Users\\Test1\\Desktop\\Sample1.pdf", ??????????????????????? "C:\\Users\\Test1\\Desktop\\Sample2.pdf", ??????????????????????? "C:\\Users\\Test1\\Desktop\\Sample3.pdf", ??????????????? };? ? ? ??
String outputFile = "output/MergeDocument.pdf"; ???????
//創(chuàng)建PDFDocument示例并加載三個(gè)示例文檔 ???????
PdfDocument[] docs = new PdfDocument[files.length]; ???????
PdfDocument doc = new PdfDocument(); ???????
for (int i = 0; i < files.length; i++) { ???????????
docs[i] = new PdfDocument(); ???????????
docs[i].loadFromFile(files[i]); ??????? } ???????
//添加第一頁(yè)并寫入第一個(gè)示例文檔的數(shù)據(jù) ???????
docs[0].appendPage(docs[1]); ???????
//將另外兩個(gè)文檔的數(shù)據(jù)插入新的頁(yè)面 ???????
for (int i = 0; i < docs[2].getPages().getCount(); i = i + 2) { ??????????? docs[0].insertPage(docs[2], i); ??????? } ???????
// 保存文檔 ???????
docs[0].saveToFile(outputFile); ???????
doc.close(); ???
}
}
方法2:通過(guò)流的方式加載三個(gè)示例文檔,并使用 mergeFiles(streams)方法將多個(gè)PDF文檔合并為一個(gè)PDF文檔绑洛。
import com.spire.pdf.*;
import java.io.*;
public class MergeFilesByStream { ???
public static void main(String[] args) throws FileNotFoundException { ???????
String outputFile = "output/mergeFilesByStream.pdf"; ???????
FileInputStream stream1 = new FileInputStream(new File("C:\\Users\\Test1\\Desktop\\Sample1.pdf")); ???????
FileInputStream stream2 = new FileInputStream(new File("C:\\Users\\Test1\\Desktop\\Sample2.pdf")); ???????
FileInputStream stream3 = new FileInputStream(new File("C:\\Users\\Test1\\Desktop\\Sample3.pdf")); ???????
//加載PDF示例文檔 ???????
InputStream[] streams = new FileInputStream[]{stream1, stream2, stream3}; ???????
//合并PDF文檔 ???????
PdfDocumentBase doc = PdfDocument.mergeFiles(streams); ???????
//保存文檔 ???????
doc.save(outputFile); ???????
doc.close(); ???
}
}
文檔合并效果:
【示例2】拆分PDF文檔
原PDF文檔如下:
方式1:將一個(gè)PDF文檔均分為多個(gè)PDF(每個(gè)PDF包含1頁(yè))救斑。
import com.spire.pdf.*;
public class SplitFile { ???
public static void main(String[] args) { ???????
//加載PDF文檔 ???????
PdfDocument doc = new PdfDocument(); ??????? doc.loadFromFile("C:\\Users\\Test1\\Desktop\\Sample.pdf"); ???????
//拆分為多個(gè)PDF文檔 ???????
doc.split("output/splitDocument-{0}.pdf", 0); ???????
doc.close(); ???
}
}
文檔拆分效果:
方式2:將一個(gè)PDF文檔拆分為2個(gè)或多個(gè)PDF(每個(gè)PDF可包含不同的頁(yè)數(shù))。
以下代碼將原PDF文檔的第1-4頁(yè)拆分一個(gè)PDF文檔真屯,第5-9頁(yè)拆分為另一個(gè)PDF文檔:
import com.spire.pdf.*;
import com.spire.pdf.graphics.PdfMargins;
import java.awt.geom.Point2D;
public class SplitFile2 { ???
public static void main(String[] args) { ???????
//加載PDF文檔 ???????
PdfDocument doc = new PdfDocument(); ??????? doc.loadFromFile("C:\\Users\\Test1\\Desktop\\Sample.pdf"); ???????
//新建一個(gè)PDF文檔 ???????
PdfDocument newDoc1 = new PdfDocument(); ???????
PdfPageBase page; ???????
//將原PDF文檔的第1頁(yè)到3頁(yè)頁(yè)添加至新建的PDF ???????
for(int i = 0;i<4;i++) ???????
{ page = newDoc1.getPages().add(doc.getPages().get(i).getSize(), new PdfMargins(0)); ??????? doc.getPages().get(i).createTemplate().draw(page, new Point2D.Float(0,0)); ??????? }? ? ? ? ?
//保存文檔 ???????
newDoc1.saveToFile("output/SplitDoc1.pdf"); ???????
//新建另一個(gè)PDF文檔 ????? ??
PdfDocument newDoc2 = new PdfDocument(); ???????
//將原PDF文檔的第4至9頁(yè)添加至新建的PDF ???????
for(int i = 4;i<9;i++) ???????
{ page = newDoc2.getPages().add(doc.getPages().get(i).getSize(), new PdfMargins(0)); ??????? doc.getPages().get(i).createTemplate().draw(page, new Point2D.Float(0,0)); ??????? } ???????
//保存文檔 ???????
newDoc2.saveToFile("output/SplitDoc2.pdf"); ???
}
}
文檔拆分效果:
(本文完)