今天小编给大家分享一下java中怎么用pdfbox+poi往pdf插入数据的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

指定页码插入/替换

pdfbox好像没有专门提供这个方法,但是现有的方法多重组合起来也能实现这个功能,

需求:一个pdf文件A有10页,现在想在第6页插入一页新的pdf文件B,插入完成后整个pdf文件A变成11页。

思路1(插入):

先将这个10的pdf拆分成10个1页的pdf,按顺序放好,文件名分别是:1.pdf、2.pdf....10.pdf。再拆分到第6页的时候将文件B放进来,重命名问6.pdf,原本pdf文件A里面的第6页重命名为7.pdf,依次后推,最后的得到的1.pdf----->11.pdf一共11个文件

然后使合并功能将这个11个pdf按顺序合并。

思路2(替换):

在插入的基础上,拆分的时候将pdf文件A里面的第6个页丢弃,使用新的页面来代替它命名6.pdf,然后合并就完事了。

1.pom<!--pdfbox--><dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox-tools</artifactId><version>2.0.25</version></dependency><dependency><groupId>net.sf.cssbox</groupId><artifactId>pdf2dom</artifactId><version>2.0.1</version></dependency><!--poi--><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.10</version></dependency><dependency><groupId>com.itextpdf.tool</groupId><artifactId>xmlworker</artifactId><version>5.5.10</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.15</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>3.15</version></dependency>2.实现方法/**fromfhadmin.cn*指定页码插入页*@paramfilename1源pdf路径*@paramfilename2需要插入的pdf路径*@paramnumber插入的页码*@paramnewfilename全新pdf的路径*@throwsException*/publicvoidinsertPage(Stringfilename1,Stringfilename2,intnumber,Stringnewfilename,StringtempPath)throwsException{PDDocumentpdf1=PDDocument.load(newFile(filename1));PDDocumentpdf2=PDDocument.load(newFile(filename2));//1、将第一个pdf按页码全部拆开Splittersplitter=newSplitter();List<PDDocument>Pages=splitter.split(pdf1);Iterator<PDDocument>iterator=Pages.listIterator();PDFMergerUtilityPDFmerger=newPDFMergerUtility();inti=1;while(iterator.hasNext()){if(i==number){System.out.println("当前插入页码:"+number);pdf2.save(tempPath+"/"+i+".pdf");i++;}PDDocumentpd=iterator.next();StringtempFile=tempPath+"/"+i+".pdf";System.out.println("开始拆分:"+tempFile);pd.save(tempFile);i++;}//2、开始重组PDFmerger.setDestinationFileName(newfilename);//上面的i最后多加了一次,这里不取等for(intj=1;j<i;j++){StringtempFile=tempPath+"/"+j+".pdf";System.out.println("开始合并:"+tempFile);PDFmerger.addSource(tempFile);}//合并文档PDFmerger.mergeDocuments();System.out.println("文档合并完成");pdf1.close();pdf2.close();}3.测试//fromfhadmin.cn@TestvoidinsertPage()throwsException{PdfUtilspdfUtils=newPdfUtils();Stringfilename1="F:\\Users\\admin\\Desktop\\A.pdf";Stringfilename2="F:\\Users\\admin\\Desktop\\B.pdf";Stringnewfilename="F:\\Users\\admin\\Desktop\\newA.pdf";StringtempPath="F:\\Users\\admin\\Desktop\\temp";intinsertNum=32;pdfUtils.insertPage(filename1,filename2,insertNum,newfilename,tempPath);}

以上就是“java中怎么用pdfbox+poi往pdf插入数据”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。