生成PDF时如何创建指向尚未生成的目标页面的跳转链接
PDF生成时先创建目录跳转链接(目标页面未生成)的解决方案
核心解决思路
你当前使用的是绑定具体页面对象的显式目的地,必须目标页面已存在才能调用pdfDocument.getPage()获取对象。改用**命名目的地(Named Destination)**即可规避这个限制,相当于先给跳转目标预留唯一标识占位,等后续生成对应内容页面时,再将标识和实际页面绑定即可。
实现代码示例
1. 生成目录阶段(目标页面未生成时创建跳转链接)
// 为每个目标内容页面提前定义全局唯一的命名标识,比如按章节编号命名 String chapterDestName = "chapter_3"; // 直接用命名标识创建跳转动作,无需获取页面对象 PdfAction gotoChapterAction = PdfAction.createGoTo(chapterDestName); Link catalogLink = new Link("第三章 具体内容", gotoChapterAction); catalogLink.getLinkAnnotation().setBorder(new PdfArray(new int[]{0,0,0})); // 后续正常将链接添加到目录页面渲染即可
2. 生成内容页面阶段(绑定命名标识到实际页面)
// 生成完对应章节的内容页面后,绑定命名目的地 String chapterDestName = "chapter_3"; // 和目录中使用的命名标识完全一致 // 获取刚生成的内容页面对象,创建适配跳转规则的目的地 PdfDestination chapterDest = PdfDestination.makeFit(pdfDocument.getLastPage()); // 将命名标识和目的地绑定到PDF文档 pdfDocument.addNamedDestination(chapterDestName, chapterDest.getPdfObject());
注意事项
- 命名标识需全局唯一,不可重复
- 所有命名目的地的绑定操作只需在PDF文档执行关闭操作前完成即可,和目录生成的先后顺序无要求
- 如果后续内容页面的页码发生调整,只需修改绑定阶段的页面对象即可,无需回头修改目录的链接配置
内容的提问来源于stack exchange,提问作者MTilsted
相关产品推荐
相关产品推荐

