指定页码插入/替换
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.实现方法
/**from fhadmin.cn
* 指定页码插入页
* @param filename1 源pdf路径
* @param filename2 需要插入的pdf路径
* @param number 插入的页码
* @param newfilename 全新pdf的路径
* @throws Exception
*/
public void insertPage(String filename1,String filename2,int number,String newfilename,String tempPath) throws Exception {
PDDocument pdf1 = PDDocument.load(new File(filename1));
PDDocument pdf2 = PDDocument.load(new File(filename2));
//1、将第一个pdf按页码全部拆开
Splitter splitter = new Splitter();
List<PDDocument> Pages = splitter.split(pdf1);
Iterator<PDDocument> iterator = Pages.listIterator();
PDFMergerUtility PDFmerger = new PDFMergerUtility();
int i = 1;
while(iterator.hasNext()) {
if(i==number){
System.out.println("当前插入页码:"+number);
pdf2.save(tempPath+"/"+ i +".pdf");
i++;
}
PDDocument pd = iterator.next();
String tempFile = tempPath+"/"+ i +".pdf";
System.out.println("开始拆分:"+tempFile);
pd.save(tempFile);
i++;
}
//2、开始重组
PDFmerger.setDestinationFileName(newfilename);
//上面的i最后多加了一次,这里不取等
for(int j=1;j<i;j++){
String tempFile = tempPath+"/"+ j +".pdf";
System.out.println("开始合并:"+tempFile);
PDFmerger.addSource(tempFile);
}
//合并文档
PDFmerger.mergeDocuments();
System.out.println("文档合并完成");
pdf1.close();
pdf2.close();
}
3.测试
//from fhadmin.cn
@Test
void insertPage() throws Exception {
PdfUtils pdfUtils = new PdfUtils();
String filename1 = "F:\\Users\\admin\\Desktop\\A.pdf";
String filename2 = "F:\\Users\\admin\\Desktop\\B.pdf";
String newfilename = "F:\\Users\\admin\\Desktop\\newA.pdf";
String tempPath = "F:\\Users\\admin\\Desktop\\temp";
int insertNum = 32;
pdfUtils.insertPage(filename1,filename2,insertNum,newfilename,tempPath);
}
啰嗦几句
1、我将要修改的页面先拆分出来了,比如这里的第6页,然后(我这个整页都是图片)将内容修改后,合并进来发现尺码不对,是的,你没有听错就是尺码不对,当我修改后的pdf在放进来合并的时候,这一页它变小了~,原来是我在将图片另存为pdf,或者使用打印另存为pdf的时候,纸张大小就那么几类(A4/A3等),那我就不干了啊,丑里吧唧的。
2、这个时候就用pdfbox的图片插入功能:将图片写入原来的6.pdf这一页里面来,你要问我为啥?因为原来的6.pdf尺码是对的,其中画图的时候开始位置x,y都从0开始。
相关推荐
- 版本兼容性:确保你的Apache POI和PDFBox版本与你处理的Word和PDF文件格式兼容。 - 处理复杂格式:Word模板可能包含复杂的格式,如图片、表格、页眉页脚等,这些都需要额外处理。 - 错误处理:在代码中添加适当...
在IT行业中,尤其是在数据处理和文档管理领域,Apache POI是一个非常重要的库,它允许开发者使用Java处理Microsoft Office格式的文件,如Excel、Word和PowerPoint。本篇将详细讲解如何利用Apache POI将不同类型的...
这里提到的“POI按word模版生成合同并生成PDF”是一个使用Apache POI库来操作Microsoft Word模板,并通过Java编程语言实现动态数据替换,最终将生成的文档转换为PDF格式的过程。这个技术有助于提高工作效率,减少...
本项目聚焦于使用Apache POI库按照预设的Word模板生成合同,并进一步将生成的合同转换为PDF格式。这个过程涉及到的技术点包括模板引擎的使用、数据动态替换以及PDF文档的生成。 首先,Apache POI提供了一个名为`...
Java生成Excel和PDF是两种常见的数据导出技术,在企业级应用中广泛使用,尤其是在报表、数据分析和文件交互场景。这两个技术分别基于不同的库,对于Java开发者来说,掌握它们的使用方法是十分重要的。 1. Java生成...
虽然PDF处理不是Apache POI的主要焦点,但有一些扩展库如PDFBox,同样属于Apache的顶级项目,可用于PDF操作。 标签"poi poi_word java_poi_word"再次突出了POI与Word处理的关联,以及它是用Java语言实现的。Java ...
1. **PDF创建**:你可以使用PDFBox创建全新的PDF文档,添加页面、设置元数据、插入文本、绘制图形以及插入图像。 2. **PDF读取**:PDFBox可以解析已有的PDF文档,提取文本、图片、元数据等信息。这对于文档分析、...
综上所述,"java代码实现word转换为pdf"涉及到的主要知识点包括Java编程、Apache POI的使用、PDF生成库(如iText或PDFBox)的掌握,以及文件转换的逻辑实现。这个项目可以帮助开发者理解如何在Java环境中实现文档...
例如,Apache POI库用于处理Office文档,而iText或Apache PDFBox等库用于生成PDF。 3. **Apache POI**:这是一个流行的Java库,用于读写Microsoft Office格式的文件,包括docx。它允许开发者访问文档的内部结构,如...
本文将深入探讨如何使用Java来将PDF文件转换为Word文件,同时也会提及网络爬虫在获取论文数据时可能涉及的格式转换问题。 首先,我们需要理解PDF和Word文件格式之间的差异。PDF(Portable Document Format)是一种...
### Java操作Word、Excel、PDF文档 在日常工作中,Word、Excel 和 PDF 是最常用的办公文档格式之一。通过 Java 编程语言可以实现对这些文档的操作自动化,这对于提高工作效率具有重要意义。本文将详细介绍如何使用 ...
在Java中,我们可以使用Apache PDFBox库来操作PDF文档。PDFBox提供了丰富的API,允许开发者读取、创建、编辑PDF文档。添加水印通常涉及创建一个透明的文本或图像覆盖层,然后将其合并到原始PDF页面上。例如,你可以...
Java平台提供了一系列库来支持这些操作,本项目中涉及的主要有Spire.Doc、Spire.PDF以及Apache PDFBox。让我们详细探讨这些库的功能及其在Java开发中的应用。 首先,`Spire.Doc.jar`是Spire.Doc for Java的库文件,...
总结来说,Java实现Word转图片、Word转PDF以及图片转PDF,需要依赖于如Apache POI、iText、PDFBox等第三方库,结合Java的IO和图像处理功能。这个压缩包提供了相关的jar包和代码示例,有助于开发者快速上手这些转换...
至于PDF,虽然POI本身并不直接支持PDF操作,但可以与其他库结合,如iText或Apache PDFBox,实现PDF的读写。 Apache POI的核心组件包括: 1. HSSF:这是处理旧版Excel文件(.xls)的API,提供了创建、读取和修改...
总结起来,本文介绍了如何使用Java的PDFBox和Apache POI库,结合Spring Web框架,实现“富文本PDF转图片Image”和“图片Image转PPT”的功能。在实际开发中,还需要考虑性能优化、错误处理、安全性等问题,以提供稳定...
IText和PDFBox是两个广泛使用的Java库,用于处理PDF文档和Word文件。它们提供了丰富的API,可以帮助开发者创建、编辑、解析和操作PDF文件。在这个压缩包中,你可能会找到一系列示例代码,展示了如何使用这两个库进行...
JPG图片的处理相对简单,因为它们本质上是二进制数据,可以直接写入Word或PDF文档。在Word中,可以创建`XWPFPicture`对象来插入图片;而在PDF中,可以使用PDFBox的`PDImageXObject`来添加图像。 在实现这个功能时,...
【POI导出报表】是Java开发中一个常见的任务,主要涉及如何利用Apache POI库来生成和导出Word、Excel以及PDF格式的报表。Apache POI是一个流行的开源项目,它为Microsoft Office文档(如Word、Excel)提供读写功能,...
在IT行业中,报表技术是数据分析和业务展示的重要一环,而Apache POI是一个广泛使用的Java库,它允许程序开发者创建、修改和显示Microsoft Office格式的文件,如Excel。本资源包"报表技术-POI导出PDF(含资料、代码、...