当前位置: 代码网 > it编程>编程语言>Java > Java合并PDF文档的三种常用方式总结

Java合并PDF文档的三种常用方式总结

2024年12月08日 Java 我要评论
前言java常用的三种合并pdf的方式合并pdf1.pdfbox合并pdfapache的pdfboxpom.xml <dependency> <groupid>org.

前言

java常用的三种合并pdf的方式

合并pdf

1.pdfbox合并pdf

apache的pdfbox

pom.xml

 <dependency>
     <groupid>org.apache.pdfbox</groupid>
     <artifactid>pdfbox</artifactid>
     <version>2.0.26</version>
 </dependency>

代码示例

// 添加待合并文件
for (ziputil.relativefile sourcepdf : filerefers) {
   long time1 = system.currenttimemillis();
   log.info("开始添加{}, 大小:{}mb, 路径:{}", (++index),
   fileutils.newfile(sourcepdf.getfilepath()).length() / 1024 / 1024, sourcepdf.getfilepath());
   try (pddocument document = pddocument.load(fileutils.newfile(sourcepdf.getfilepath()), memoryusagesetting.setuptempfileonly());
        ) {
            // 页面大纲(1级)
            string newname = fileutils.newfile(sourcepdf.getrelativepath()).getname();
            newname = stringutils.trimtoempty(newname).replace("." + filenameutils.getextension(newname), "");
            pdfboxbookmark boxdata = new pdfboxbookmark(newname, totalpage);

            pddocumentoutline outline = document.getdocumentcatalog().getdocumentoutline();
            if (outline != null) {
                buildbookmark(outline, boxdata, totalpage);
            }
            /
            allbooklist.add(boxdata);

            mergepdf.addsource(sourcepdf.getfilepath());

            // 更新总页码
            totalpage += document.getnumberofpages();
        } catch (ioexception e) {
            e.printstacktrace();
            log.error("合并pdf失败:{}",e);
            throw new baseexception("文件不存在:" + sourcepdf.getfilepath());
        }
        log.info("结束添加,添加后,总{}页:{},耗费:{}秒",totalpage,
                sourcepdf.getfilepath(), (system.currenttimemillis() - time1) / 1000);
    }

    // 设置合并后的pdf文件路径
    mergepdf.setdestinationfilename(destfilepath);

    // 合并pdf
    try {
        mergepdf.setdocumentmergemode(pdfmergerutility.documentmergemode.optimize_resources_mode);
        mergepdf.mergedocuments(memoryusagesetting.setuptempfileonly());
    } catch (ioexception e) {
        e.printstacktrace();
        throw new baseexception("合并发生异常");
    }

2.spire.pdf

e-iceblue的spire.pdf

pom.xml

<dependency>
    <groupid>e-iceblue</groupid>
    <artifactid>spire.pdf</artifactid>
    <version>9.5.6</version>
</dependency>

代码示例:

string[] files = new string[] {
                "c:\\users\\test\\desktop\\tmp\\001\\20241014-001\\error-file.pdf",
                "c:\\users\\test\\desktop\\tmp\\001\\20241014-001\\111.pdf"};

//merge documents and return an object of pdfdocumentbase
pdfdocumentbase pdf = pdfdocument.mergefiles(files);

//save the result to a pdf file
pdf.save("c:\\users\\test\\desktop\\tmp\\001\\20241014-001\\mergedpdf222.pdf", fileformat.pdf);

3.itextpdf

itextpdf

pom.xml

<dependency>
    <groupid>com.itextpdf</groupid>
    <artifactid>itextpdf</artifactid>
    <version>5.5.13.4</version>
</dependency>

代码示例:

string[] pdfs = new string[] {
                "c:\\users\\test\\desktop\\tmp\\001\\20241014-001\\0001.pdf",
                "c:\\users\\test\\desktop\\tmp\\001\\20241014-001\\0002.pdf"};

string outputpdf = "c:\\users\\test\\desktop\\tmp\\001\\20241014-001\\mergedpdf333-.pdf"; // 合并后的pdf文件

try {
    document document = new document();
    pdfcopy copy = new pdfcopy(document, new fileoutputstream(outputpdf));
    document.open();

    for (string pdf : pdfs) {
        pdfreader reader = new pdfreader(pdf);
        for (int i = 1; i <= reader.getnumberofpages(); i++) {
            document.newpage();
            copy.addpage(copy.getimportedpage(reader, i));
        }
        reader.close();
    }

    document.close();
    system.out.println("pdfs merged successfully.");
} catch (exception e) {
    e.printstacktrace();
}

总结

1.apache的pdfbox和itextpdf是免费的,e-iceblue的spire.pdf是收费的而且价格不菲,无授权会有水印,虽然e-iceblue有免费的spire.pdf.free但有页数限制。

2.apache的pdfbox和e-iceblue的spire.pdf对pdf文档的容错不高,如果pdf文档是通过三方软件生成或编辑过的(可能会存在一定问题,但是浏览器打开或wps打开会容错显示),在合并时会抛文档的异常。但是itextpdf会进行容错修复并合并成功。

所以个人推荐使用itextpdf。

到此这篇关于java合并pdf文档的三种常用方式的文章就介绍到这了,更多相关java合并pdf文档方式内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com