<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>${itextpdf.version}</version>
</dependency>
<itextpdf.version>5.4.3</itextpdf.version>
目录:
Chunk chunk = new Chunk("目录展示文本");
chunk.setLocalGoto("锚点位置字符串");
要跳转的地方 加下面这个东西
Anchor anchor = new Anchor("标题或者文本或者啥东西", new Font(Font.FontFamily.HELVETICA, 16, Font.BOLD));
anchor.setName("锚点位置字符串 跟Chunk那个对应上");
给这个跳转 加事件
PdfAction action = PdfAction.gotoLocalPage("锚点位置字符串", false);
writer.setOpenAction(action);
上面这一套 就是一个目录。
然后页码:
页码有个矛盾的点,目录是放在文章前面的,但页码是写入文档时才能取到的。
通过 document.add(目录); 把目录写到文档 就不能更改目录中的页码了。
页码是通过 int pageNumber = writer.getPageNumber(); 取到的
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("document.pdf"));
// 获取页码
int pageNumber = writer.getPageNumber();
解决办法 : 先写内容 ,获取 页码 后,插入目录。
再读文件 调整顺序。pdf page 的顺序 把目录移到前面,保存成新的 正确的 文件
(这步使用 pdfbox 这个包做的 如果有复制完文件,文件大小变得超级大的问题
见我另一篇文章:pdfbox 复制文件 文件变大-CSDN博客)