`
qingyu11068
  • 浏览: 67737 次
文章分类
社区版块
存档分类
最新评论

java 往 pdf 插入数据 (pdfbox+poi)

 
阅读更多

指定页码插入/替换

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开始。

搜索

复制

<iframe src="/admin/blogs/"></iframe>
0
0
分享到:
评论

相关推荐

    使用poi根据模版生成word文档并转换成PDF文件

    - 版本兼容性:确保你的Apache POI和PDFBox版本与你处理的Word和PDF文件格式兼容。 - 处理复杂格式:Word模板可能包含复杂的格式,如图片、表格、页眉页脚等,这些都需要额外处理。 - 错误处理:在代码中添加适当...

    POI将文件转为html

    在IT行业中,尤其是在数据处理和文档管理领域,Apache POI是一个非常重要的库,它允许开发者使用Java处理Microsoft Office格式的文件,如Excel、Word和PowerPoint。本篇将详细讲解如何利用Apache POI将不同类型的...

    POI按word模版生成合同并生成PDF

    这里提到的“POI按word模版生成合同并生成PDF”是一个使用Apache POI库来操作Microsoft Word模板,并通过Java编程语言实现动态数据替换,最终将生成的文档转换为PDF格式的过程。这个技术有助于提高工作效率,减少...

    POI按word模版生成合同并生成PDF(修复生成pdf功能)

    本项目聚焦于使用Apache POI库按照预设的Word模板生成合同,并进一步将生成的合同转换为PDF格式。这个过程涉及到的技术点包括模板引擎的使用、数据动态替换以及PDF文档的生成。 首先,Apache POI提供了一个名为`...

    java生成excle和pdf

    Java生成Excel和PDF是两种常见的数据导出技术,在企业级应用中广泛使用,尤其是在报表、数据分析和文件交互场景。这两个技术分别基于不同的库,对于Java开发者来说,掌握它们的使用方法是十分重要的。 1. Java生成...

    POI.rar_POI_POI word_java poi word

    虽然PDF处理不是Apache POI的主要焦点,但有一些扩展库如PDFBox,同样属于Apache的顶级项目,可用于PDF操作。 标签"poi poi_word java_poi_word"再次突出了POI与Word处理的关联,以及它是用Java语言实现的。Java ...

    pdfbox1.8.13

    1. **PDF创建**:你可以使用PDFBox创建全新的PDF文档,添加页面、设置元数据、插入文本、绘制图形以及插入图像。 2. **PDF读取**:PDFBox可以解析已有的PDF文档,提取文本、图片、元数据等信息。这对于文档分析、...

    java代码实现word转换为pdf

    综上所述,"java代码实现word转换为pdf"涉及到的主要知识点包括Java编程、Apache POI的使用、PDF生成库(如iText或PDFBox)的掌握,以及文件转换的逻辑实现。这个项目可以帮助开发者理解如何在Java环境中实现文档...

    Java 读写docx文件后直接转成PDF方法

    例如,Apache POI库用于处理Office文档,而iText或Apache PDFBox等库用于生成PDF。 3. **Apache POI**:这是一个流行的Java库,用于读写Microsoft Office格式的文件,包括docx。它允许开发者访问文档的内部结构,如...

    B.zip_PDF转WORD_java把pdf转化为word

    本文将深入探讨如何使用Java来将PDF文件转换为Word文件,同时也会提及网络爬虫在获取论文数据时可能涉及的格式转换问题。 首先,我们需要理解PDF和Word文件格式之间的差异。PDF(Portable Document Format)是一种...

    Java操作Word, Excel, PDF文档

    ### Java操作Word、Excel、PDF文档 在日常工作中,Word、Excel 和 PDF 是最常用的办公文档格式之一。通过 Java 编程语言可以实现对这些文档的操作自动化,这对于提高工作效率具有重要意义。本文将详细介绍如何使用 ...

    java 加水印 支持各种格式pdf doc 图片

    在Java中,我们可以使用Apache PDFBox库来操作PDF文档。PDFBox提供了丰富的API,允许开发者读取、创建、编辑PDF文档。添加水印通常涉及创建一个透明的文本或图像覆盖层,然后将其合并到原始PDF页面上。例如,你可以...

    java-pdf&word-jar.zip

    Java平台提供了一系列库来支持这些操作,本项目中涉及的主要有Spire.Doc、Spire.PDF以及Apache PDFBox。让我们详细探讨这些库的功能及其在Java开发中的应用。 首先,`Spire.Doc.jar`是Spire.Doc for Java的库文件,...

    java将WORD转图片,转PDF来回转.zip

    总结来说,Java实现Word转图片、Word转PDF以及图片转PDF,需要依赖于如Apache POI、iText、PDFBox等第三方库,结合Java的IO和图像处理功能。这个压缩包提供了相关的jar包和代码示例,有助于开发者快速上手这些转换...

    poi所需要的jar

    至于PDF,虽然POI本身并不直接支持PDF操作,但可以与其他库结合,如iText或Apache PDFBox,实现PDF的读写。 Apache POI的核心组件包括: 1. HSSF:这是处理旧版Excel文件(.xls)的API,提供了创建、读取和修改...

    富文本pdf转图片image,图片image转ppt

    总结起来,本文介绍了如何使用Java的PDFBox和Apache POI库,结合Spring Web框架,实现“富文本PDF转图片Image”和“图片Image转PPT”的功能。在实际开发中,还需要考虑性能优化、错误处理、安全性等问题,以提供稳定...

    ItextpdfboxPDFword生成和读取各种例子最详细的打包

    IText和PDFBox是两个广泛使用的Java库,用于处理PDF文档和Word文件。它们提供了丰富的API,可以帮助开发者创建、编辑、解析和操作PDF文件。在这个压缩包中,你可能会找到一系列示例代码,展示了如何使用这两个库进行...

    使用java将多种类型的文件如Word、PDF、JPG汇总到一个文档中(Word或者PDF)

    JPG图片的处理相对简单,因为它们本质上是二进制数据,可以直接写入Word或PDF文档。在Word中,可以创建`XWPFPicture`对象来插入图片;而在PDF中,可以使用PDFBox的`PDImageXObject`来添加图像。 在实现这个功能时,...

    POI导出报表

    【POI导出报表】是Java开发中一个常见的任务,主要涉及如何利用Apache POI库来生成和导出Word、Excel以及PDF格式的报表。Apache POI是一个流行的开源项目,它为Microsoft Office文档(如Word、Excel)提供读写功能,...

    报表技术-POI导出PDF(含资料、代码、讲义).zip

    在IT行业中,报表技术是数据分析和业务展示的重要一环,而Apache POI是一个广泛使用的Java库,它允许程序开发者创建、修改和显示Microsoft Office格式的文件,如Excel。本资源包"报表技术-POI导出PDF(含资料、代码、...

Global site tag (gtag.js) - Google Analytics