【Java】多pdf文件合并为一个.docx文件

这篇具有很好参考价值的文章主要介绍了【Java】多pdf文件合并为一个.docx文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

当将多个 PDF 文件合并成单个 DOCX 文档时,利用 Java 中的 Apache PDFBox 和 Apache POI 库可以实现这一目标。这个过程可以分为几个步骤:

1. 导入所需的库

使用 Apache PDFBox 和 Apache POI 库来处理 PDF 和 DOCX 文件。你需要导入相关库,并确保在项目中使用了正确的依赖。

<dependency>
     <groupId>org.apache.pdfbox</groupId>
     <artifactId>pdfbox</artifactId>
     <version>2.0.29</version>
</dependency>

2. 获取PDF文件列表

通过指定文件夹路径,遍历文件夹中的所有 PDF 文件,并将其存储在一个列表中。

3. 创建DOCX文档对象

使用 Apache POI 的 XWPFDocument 类创建一个新的空白 DOCX 文档对象。

4. 逐个处理PDF文件

对于每个 PDF 文件:

  • 使用 PDFBox 的 PDDocument 加载 PDF 文件。
  • 遍历 PDF 文件的每一页,将每一页渲染为图像(PNG 格式)。
  • 将图像插入到 DOCX 文档中对应的段落中,并保留文件名作为文字内容。
  • 创建一个空的XWPFDocument对象,即将用于存储合并后的文档内容。

5. 将结果保存为DOCX文件

最后,将生成的 DOCX 文档保存到指定的输出路径。文章来源地址https://www.toymoban.com/news/detail-780181.html

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.util.Units;
import org.apache.poi.xwpf.usermodel.*;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.imageio.ImageIO;

public class MergePDFsToDOCX {

    public static void main(String[] args) {
        String pdfFolderPath = "\\mergePdfsTODocument"; // 替换为包含PDF文件的文件夹路径
        String outputDOCXPath = "\\mergePdfsTODocument\\document.docx"; // 输出的DOCX文件路径

        try {
            List<File> pdfFiles = getPdfFilesInFolder(pdfFolderPath);
            mergePDFsToDocx(pdfFiles, outputDOCXPath);
            System.out.println("PDFs merged to DOCX successfully: " + outputDOCXPath);
        } catch (IOException e) {
            System.err.println("Failed to merge PDFs to DOCX.");
            e.printStackTrace();
        }
    }

    public static List<File> getPdfFilesInFolder(String folderPath) {
        File folder = new File(folderPath);
        List<File> pdfFiles = new ArrayList<>();

        if (folder.exists() && folder.isDirectory()) {
            File[] files = folder.listFiles();
            if (files != null) {
                for (File file : files) {
                    if (file.isFile() && file.getName().toLowerCase().endsWith(".pdf")) {
                        pdfFiles.add(file);
                    }
                }
            }
        } else {
            System.err.println("Folder not found: " + folderPath);
        }
        return pdfFiles;
    }

    public static void mergePDFsToDocx(List<File> pdfFiles, String outputDOCXPath) throws IOException {
        XWPFDocument doc = new XWPFDocument();

        for (File pdfFile : pdfFiles) {
            try (PDDocument pdf = PDDocument.load(pdfFile)) {
                PDFRenderer pdfRenderer = new PDFRenderer(pdf);
                int numPages = pdf.getNumberOfPages();

                for (int pageIndex = 0; pageIndex < numPages; pageIndex++) {
                    BufferedImage bim = pdfRenderer.renderImageWithDPI(pageIndex, 300); // 渲染PDF页面为图像
                    String imgFileName = pdfFile.getName() + "_page_" + (pageIndex + 1) + ".png"; // 图像文件名
                    File imageFile = new File(imgFileName);

                    ImageIO.write(bim, "png", imageFile); // 将图像写入文件

                    FileInputStream imageStream = new FileInputStream(imageFile);
                    XWPFParagraph paragraph = doc.createParagraph();
                    XWPFRun run = paragraph.createRun();
                    run.setText(pdfFile.getName());
                    run.addBreak();

                    doc.createParagraph().createRun().addPicture(
                            imageStream, Document.PICTURE_TYPE_PNG, imgFileName, Units.toEMU(400), Units.toEMU(400));

                    imageStream.close();
                    imageFile.delete(); // 删除临时图像文件
                }
            } catch (IOException e) {
                System.err.println("Failed to process file: " + pdfFile.getName());
                e.printStackTrace();
            } catch (InvalidFormatException e) {
                throw new RuntimeException(e);
            }
        }

        try (FileOutputStream fos = new FileOutputStream(outputDOCXPath)) {
            doc.write(fos);
        }
    }
}

到了这里,关于【Java】多pdf文件合并为一个.docx文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 🔥🔥Java开发者的Python快速实战指南:实用工具之PDF转DOCX文档(可视化界面)

    首先,大家对Python语法的了解已经基本完成,现在我们需要开始进行各种练习。我为大家准备了一些练习题目,比如之前的向量数据库等,这些题目可以参考第三方的SDK来进行操作,文档也是比较完善的。这个过程有点像我们之前使用Java对接第三方接口的方式,所以今天我想

    2024年02月05日
    浏览(63)
  • Java开发者的Python快速实战指南:实用工具之PDF转DOCX文档(可视化界面)

    首先,大家对Python语法的了解已经基本完成,现在我们需要开始进行各种练习。我为大家准备了一些练习题目,比如之前的向量数据库等,这些题目可以参考第三方的SDK来进行操作,文档也是比较完善的。这个过程有点像我们之前使用Java对接第三方接口的方式,所以今天我想

    2024年02月05日
    浏览(64)
  • 合并PDF(将多个pdf文件整合成一个pdf文件)

    推荐使用下面这个 免费在线 的PDF文件合并工具,简单且易操作。 合并PDF - 在线上免费合并PDF文件 (smallpdf.com) 还有其他功能,不过现在我尚未使用其他功能:  关于费用:  

    2024年02月04日
    浏览(37)
  • 两个pdf文件合并为一个怎么操作?分享pdf合并操作步骤

    不管是初入职场的小白,还是久经职场的高手,都必须深入了解pdf,特别是关于pdf的各种操作,如编辑、合并、压缩等操作,其中合并是这么多操作里面必需懂的技能之一,但是很多人还是不知道两个pdf文件合并为一个怎么操作,下面 不管是初入职场的小白,还是久经职场的

    2024年02月10日
    浏览(51)
  • java实现图片、word、pdf等多文件融合到一个pdf(word转pdf)

    本文主要介绍了srpingboot如何将 jpg、jpeg、png、pdf、docx、doc六种格式文件合并输出成一个pdf文件 以及 word文档如何转换为pdf ,关键是 开源免费 在日常工作学习中免不了会涉及到将多种格式的文件合并为一个pdf或者是将word文档、ppt、excel等转换为pdf。废话不多说,直接上代码

    2024年02月15日
    浏览(45)
  • Java开发中Word转PDF文件5种方案横向评测

    Java开发中Word转PDF文件5种方案横向评测 前段时间接了个项目,需要各种处理Word模板、转PDF、签章等等,非常头疼,其中光是一个word转PDF就折磨我好久,实现转换很简单,但是效果总是达不到满意,于是我把市面上能找到的word转pdf方法都试了个遍。现在把这些方案来做个横向

    2024年02月03日
    浏览(38)
  • Springboot -- 按照模板生成docx、pdf文件,docx转pdf格式

    使用 poi-tl 根据模板生成 word 文件。 使用 xdocreport 将 docx 文件转换为 pdf 文件。 xdocreport 也支持根据模板导出 word ,但是 poi-tl 的功能更齐全,操作更简单,文档清晰。 poi-tl 、xdocreport 内部均依赖了 poi ,要注意两者中 poi 和 自身项目引用的 poi 的版本是否存在冲突。 使用 p

    2024年02月15日
    浏览(38)
  • java 如何实现多张PDF合并为一张PDF

    import org.apache.pdfbox.multipdf.PDFMergerUtility; import java.io.IOException; public class PDFMergerExample {     public static void main(String[] args) {         // 定义要合并的PDF文件路径         String[] filesToMerge = {\\\"file1.pdf\\\", \\\"file2.pdf\\\", \\\"file3.pdf\\\"};         // 创建PDF合并工具实例         PDFMergerUtility mer

    2024年02月10日
    浏览(58)
  • java使用poi-tl导出word及转换PDF后的合并导出pdf

    为某单位开发的一款项目申报审批系统,用户需求在申报阶段填写的信息资料能够导出PDF。且项目申报的报告正文为用户上传,所以需要合并导出。 在项目初期阶段使用的是PDF的预设模板导出,因为以前使用过,比较熟悉。所以优先选择此方法,但项目测试阶段发现问题,因

    2024年02月06日
    浏览(80)
  • 纯前端实现文件预览(pdf、docx 、xlsx)详细过程

    我详细这个当这个需求来的时候,有很大一部分人跟我的想法是一样的纯前端如何去实现多文件预览。确实这个功能很让人头疼,虽然市面上也有很多成型的插件,但是极少数能满足不同文件的预览,要么就是用第三方的链接去预览。这种虽然是最简单的方式。但是好多公司

    2024年02月14日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包