关于这个问题,其实在iText官网和Stack Overflow上面都有答案。之所以还要记录是想有更多人看到简单易懂的解决办法。因为我不想再有人直接CSDN搜一个,不管是否要新引入Jar包也不管代码是否复杂,然后告诉我参考那个写。

官网例子

下面是一个示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
public static void merge(List<String> srcFiles, String desFile) throws Exception {
        Document document = new Document();
        PdfCopy copy = new PdfCopy(document, new FileOutputStream(desFile));
        document.open();
        int page = 1;
        List<HashMap<String, Object>> outlines = new ArrayList<HashMap<String, Object>>();
        for (String scrFile : srcFiles) {
            PdfReader reader = new PdfReader(scrFile);
            copy.addDocument(reader);
            // add outline element
            HashMap<String, Object> outline = new HashMap<String, Object>();
            outline.put("Title", FilenameUtils.getBaseName(scrFile)); // 书签的名字
            outline.put("Action", "GoTo");
            outline.put("Page", String.format("%d Fit", page));
            outlines.add(outline);
            // update page count
            page += reader.getNumberOfPages();
            reader.close();
        }
        copy.setOutlines(outlines);
        document.close();
}