使用 apache pdfbox 合并pdf文件

发布时间 2023-06-06 13:27:42作者: zno2

 

import java.io.File;
import java.util.Iterator;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.FileFilterUtils;
import org.apache.commons.io.filefilter.IOFileFilter;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDDocumentCatalog;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageTree;
import org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDDocumentOutline;
import org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDOutlineItem;
import org.junit.Test;

public class PDFUtilsTest {

    @Test
    public void mergePdfs() throws Exception {
        // 合并下面的pdf ,每个都是单独的一章,带标签
        
        // E:\test\parts\01.pdf
        // E:\test\parts\02.pdf
        // E:\test\parts\03.pdf
        // E:\test\parts\04.pdf
        // E:\test\parts\05.pdf
        // E:\test\parts\06.pdf
        // E:\test\parts\07.pdf
        // E:\test\parts\08.pdf
        // E:\test\parts\09.pdf
        // E:\test\parts\10.pdf

        File file = new File("E:\\test\\parts");
        IOFileFilter onlypdf = FileFilterUtils.suffixFileFilter(".pdf");
        IOFileFilter noFolder = FileFilterUtils.falseFileFilter();
        Iterator<?> pdfFiles = FileUtils.iterateFiles(file, onlypdf, noFolder);
        PDDocument target = new PDDocument();
        PDDocumentCatalog documentCatalog = target.getDocumentCatalog();
        // 创建标签(outline)
        PDDocumentOutline rootOutline = new PDDocumentOutline();
        documentCatalog.setDocumentOutline(rootOutline);

        try {
            while (pdfFiles.hasNext()) {
                File part = (File) pdfFiles.next();
                PDDocument doc = PDDocument.load(part);
                PDDocumentOutline subOutline = doc.getDocumentCatalog().getDocumentOutline();
                PDOutlineItem firstChild = subOutline.getFirstChild();
                rootOutline.addLast(firstChild);
                PDPageTree pages = doc.getPages();
                for (PDPage pdPage : pages) {
                    target.addPage(pdPage);
                }
            }

            target.save(new File("E://test/Design Patterns 中文版.pdf"));
        } finally {
            target.close();
        }

    }
}

 

http://www.netlikon.de/docs/PDFBox-0.7.2/docs/userguide/bookmarks.pdf