Java實(shí)現(xiàn)合并多個(gè)PDF的示例代碼
這里合并用到了一個(gè)itext的包。使用maven直接導(dǎo)入依賴即可。
<dependency> <groupId>com.lowagie</groupId> <artifactId>itext</artifactId> <version>2.1.7</version> </dependency>
這個(gè)是我寫的一個(gè)utl工具類,里面還寫了一個(gè)main方法,如果你有兩個(gè)pdf,可以直接用main方法跑一下。
import com.lowagie.text.Document; import com.lowagie.text.pdf.PdfCopy; import com.lowagie.text.pdf.PdfImportedPage; import com.lowagie.text.pdf.PdfReader; import java.io.FileOutputStream; public class PdfUtil { /** * 合并pdf * @param files 需要合并的pdf路徑 * @param newfile 合并成新的文件的路徑 * @return */ public static boolean mergePdfFiles(String[] files, String newfile) { boolean retValue = false; Document document = null; PdfCopy copy = null; PdfReader reader = null; try { document = new Document(new PdfReader(files[0]).getPageSize(1)); copy = new PdfCopy(document, new FileOutputStream(newfile)); document.open(); for (int i = 0; i < files.length; i++) { reader = new PdfReader(files[i]); int n = reader.getNumberOfPages(); for (int j = 1; j <= n; j++) { document.newPage(); PdfImportedPage page = copy.getImportedPage(reader, j); copy.addPage(page); } } retValue = true; } catch (Exception e) { e.printStackTrace(); } finally { if (reader != null) { reader.close(); } if (copy != null) { copy.close(); } if (document != null) { document.close(); } } return retValue; } public static void main(String[] args) { String[] files = { "D:\\Case\\0000001\\00001\\ABIStatistic.pdf", "D:\\Case\\0000001\\00001\\ABITable.pdf", "D:\\Case\\0000001\\00001\\CVRR.pdf" }; String savepath = "D:\\Case\\0000001\\00001\\temp.pdf"; boolean b = mergePdfFiles(files, savepath); System.out.println(b); } }
補(bǔ)充
通過java還能實(shí)現(xiàn)pdf的拆分
1.按每頁(yè)單獨(dú)拆分
import com.spire.pdf.*; public class SplitPDF1 { public static void main(String[] args) { //加載需要拆分的PDF文檔 PdfDocument doc = new PdfDocument(); doc.loadFromFile("test.pdf"); //調(diào)用方法split()將PDF文檔按每一頁(yè)拆分為單獨(dú)的文檔 doc.split("output/splitDocument-{0}.pdf", 0); doc.close(); } }
2.按指定頁(yè)數(shù)范圍拆分
import com.spire.pdf.*; import com.spire.pdf.graphics.PdfMargins; import java.awt.geom.Point2D; public class SplitPDF2 { public static void main(String[] args) { //加載需要拆分的PDF文檔 PdfDocument doc = new PdfDocument(); doc.loadFromFile("test.pdf"); //新建第1個(gè)PDF文檔1 PdfDocument newpdf1 = new PdfDocument(); PdfPageBase page; //將原PDF文檔的第1、2頁(yè)拆分,并保存到newpdf1 for(int i = 0;i<2;i++) { page = newpdf1.getPages().add(doc.getPages().get(i).getSize(), new PdfMargins(0)); doc.getPages().get(i).createTemplate().draw(page, new Point2D.Float(0,0)); } newpdf1.saveToFile("split/result1.pdf"); //新建第2個(gè)PDF文檔 PdfDocument newpdf2 = new PdfDocument(); //將原PDF文檔的第3、4頁(yè)拆分,并保存到newpdf2 for(int i = 2;i<4;i++) { page = newpdf2.getPages().add(doc.getPages().get(i).getSize(), new PdfMargins(0)); doc.getPages().get(i).createTemplate().draw(page, new Point2D.Float(0,0)); } newpdf2.saveToFile("split/result2.pdf"); } }
到此這篇關(guān)于Java實(shí)現(xiàn)合并多個(gè)PDF的示例代碼的文章就介紹到這了,更多相關(guān)Java合并多個(gè)PDF內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Java創(chuàng)建多線程的四種方式以及優(yōu)缺點(diǎn)
這篇文章主要介紹了Java創(chuàng)建多線程的四種方式以及優(yōu)缺點(diǎn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11SpringBoot2.3新特性優(yōu)雅停機(jī)詳解
這篇文章主要介紹了SpringBoot2.3新特性優(yōu)雅停機(jī)詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05ThreadLocal導(dǎo)致JVM內(nèi)存泄漏原因探究
ThreadLocal是JDK提供的線程本地變量機(jī)制,但若使用不當(dāng)可能導(dǎo)致內(nèi)存泄漏。正確的使用方式是在使用完后及時(shí)remove,或者使用弱引用等手段避免強(qiáng)引用導(dǎo)致的內(nèi)存泄漏。在多線程編程中,合理使用ThreadLocal可以提高并發(fā)性能,但也需要注意其潛在的內(nèi)存泄漏問題2023-04-04SpringBoot+Mybatis-Plus實(shí)現(xiàn)mysql讀寫分離方案的示例代碼
這篇文章主要介紹了SpringBoot+Mybatis-Plus實(shí)現(xiàn)mysql讀寫分離方案的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03Java類加載之Class對(duì)象到Klass模型詳解
這篇文章主要介紹了Java類加載之Class對(duì)象到Klass模型詳解,每一個(gè)Java類在JVM中都會(huì)對(duì)應(yīng)創(chuàng)建一個(gè)C++類實(shí)例,我們稱這個(gè)C++類為Klass實(shí)例,Klass實(shí)例里面存儲(chǔ)了java類中所描述的方法、字段、屬性等,需要的朋友可以參考下2023-08-08Java基礎(chǔ)學(xué)習(xí)之Swing事件監(jiān)聽
今天學(xué)習(xí)java的Swing庫(kù),創(chuàng)建桌面應(yīng)用的時(shí)候,突然發(fā)現(xiàn)有些按鈕需要特定的功能響應(yīng),故來研究一番Swing的事件監(jiān)聽,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-05-05Java8 用Lambda表達(dá)式給List集合排序的實(shí)現(xiàn)
這篇文章主要介紹了Java8 用Lambda表達(dá)式給List集合排序的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08