Java doc等文件生成PDF、多个PDF合并

news/2024/7/5 3:23:50

之前写过一遍文章是 图片生成PDF。
今天继续来对 doc等文件进行pdf合并以及多个pdf合并为一个pdf。
兄弟们,还是开箱即用。

1、doc生成pdf

依赖

 <!--  doc生成pdf  -->
        <dependency>
            <groupId>com.aspose</groupId>
            <artifactId>aspose-words</artifactId>
            <version>20.4</version>
        </dependency>

示例代码

import com.aspose.words.Document;
import com.aspose.words.SaveFormat;
import lombok.extern.slf4j.Slf4j;
import java.io.*;

/**
 * doc生成pdf 依靠依赖 aspose-words
 * @Author hanmw
 **/
@Slf4j
public class Doc2Pdf {
    public static void main(String[] args) throws Exception {
        doc2pdf(null,null);
    }

    /**
     * doc 生成 pdf
     * @param inPath doc路径
     * @param outPath pdf路径
     */
    public static void doc2pdf(String inPath, String outPath) {
        inPath = "D:\\doc\\生成word、生成pdf、合并pdf\\维修报告.docx";
        outPath = "D:\\doc\\生成word、生成pdf、合并pdf\\12.pdf";
        FileOutputStream os = null;
        try {
            // 新建一个空白pdf文档
            File file = new File(outPath);
            os = new FileOutputStream(file);
            // 读取doc文档
            Document doc = new Document(inPath);
            // 全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF,EPUB, XPS, SWF 相互转换
            doc.save(os, SaveFormat.PDF);

            System.out.println("doc生成pdf成功!");
        } catch (Exception e) {
            log.error("doc2pdf failed", e);
        } finally {
            if (os != null) {
                try {
                    os.close();
                } catch (IOException e) {
                    log.error("关闭os失败", e);
                }
            }
        }
    }

}

2、多个pdf合并为一个pdf

依赖

     <!--  适用于 多个pdf合并 -->
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>2.0.28</version>
        </dependency>

示例代码

import lombok.extern.slf4j.Slf4j;
import org.apache.pdfbox.multipdf.PDFMergerUtility;
import java.io.File;
import java.io.IOException;

/**
 * 合并PDF 依靠依赖 org.apache.pdfbox
 * @Author hanmw
 **/
@Slf4j
public class PdfMergeController {
    public static void main(String[] args) {
        mergePdf();
    }


    public static void mergePdf(){
        // 定义要合并的PDF文件列表
        File[] pdfFiles = {
                new File("D:\\SoftWare\\图片\\测试pdf\\file_one.pdf"),
                new File("D:\\SoftWare\\图片\\测试pdf\\file_two.pdf"),
                new File("D:\\SoftWare\\图片\\测试pdf\\file_three.pdf")
        };

        // 定义合并后的输出文件
        String mergeFilePath = "D:\\SoftWare\\图片\\测试pdf\\test\\merged.pdf";
        //文件地址的目录  是否存在,不存在新建目录
        File file = new File(mergeFilePath);
        if(!file.getParentFile().exists()){
            file.getParentFile().mkdirs();
        }

        try {
            // 创建PDF合并实用程序
            PDFMergerUtility pdfMerger = new PDFMergerUtility();

            // 将所有要合并的文件添加到实用程序中
            for (File pdfFile : pdfFiles) {
                pdfMerger.addSource(pdfFile);
            }

            // 设置合并后的输出文件
            pdfMerger.setDestinationFileName(mergeFilePath);

            // 执行合并操作
            pdfMerger.mergeDocuments(null);

            System.out.println("PDF合并成功!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

http://lihuaxi.xjx100.cn/news/1494466.html

相关文章

ApiPost软件会对数据进行预处理,有可能会导致数据报错

文章目录 测试数据正确的请求方式当URL有数据被修改之后&#xff08;数据就不一致了&#xff09; 测试数据 %257B%2522pageNum%2522:1,%2522pageSize%2522:10,%2522param%2522:%257B%2522flowType%2522:1,%2522workcardType%2522:%2522作者的请求方便大家一键复制 localhost:…

dp答案和状态互换 || 多询问类dp转倍增/二分优化:CF1175E

https://www.luogu.com.cn/problem/CF1175E Trick 1 按照正常套路 d p i dp_i dpi​ 为到达 i i i &#xff08;限制&#xff09;最少多少条&#xff08;答案&#xff09;&#xff0c;其实可以转化为 d p i dp_i dpi​ 用 i i i 条&#xff08;限制&#xff09;最远可以到…

安装grpc

安装过程依照 官网指南&#xff0c;以下内容为进一步解释 1.将 MY_INSTALL_DIR 环境变量设置为当前用户的主目录下的 .local 子目录路径。export 命令用于将环境变量添加到当前会话的环境中&#xff0c;使其对于后续执行的命令和子进程都可用。 export MY_INSTALL_DIR$HOME/.l…

涉及结构体的排序问题

简单举一个例子来介绍涉及结构体的排序问题。 例&#xff1a;输入若干学生姓名、语文成绩、数学成绩、英语成绩&#xff0c;根据三科成绩总分由高到低进行排序。 输入数据&#xff1a; 小明 78 89 90 小红 87 88 77 小华 91 92 96 输出样例&#xff1a; 小华 91 92 96 279 小明…

C# List与HashSet的contains()方法查询速度比较

List 和HashSet同时查询40万条数据&#xff0c;谁的效率更高&#xff1f; //**1.下面是List底层源码**public boolean contains(Object o) {//如果查到我们想要查询的值则返回一个true&#xff0c;否则返回false&#xff0c;return indexOf(o) > 0;//这里是调用了indexOf方…

为何我要写Qt入门教程

C的就业市场 C的就业市场有如下的典型特征&#xff0c;尤其是一些有价值的岗位。 行业众多难以培训 C的就业市场很难通过标准化的培训来实现&#xff0c;往往隔行如隔山。 不同的行业&#xff0c;虽然都用C&#xff0c;但是他们的业务确是完全不相关。 使用的技术点&#…

JSX基础

1. JSX介绍 概念&#xff1a;JSX是 JavaScript XML&#xff08;HTML&#xff09;的缩写&#xff0c;表示在 JS 代码中书写 HTML 结构 作用&#xff1a;在React中创建HTML结构&#xff08;页面UI结构&#xff09; 优势&#xff1a; 采用类似于HTML的语法&#xff0c;降低学习成…

Ant Design组件动态嵌套表单制作

使用Ant Design组件我们需要使用Form.List对表单进行操作 1.首先将Form.List放入form组件中&#xff0c;并name命名&#xff0c; 2.设置一个命名为数组&#xff0c;添加编辑和删除事件 3.以刚刚设置的数组设置map循环&#xff0c;可以在循环的的括号可以设置对嵌套表单控制 4.…