为啥又写一篇? 因为之前 用 Anchor 写的,这东西 放到Paragraph 里就不好使了 。
这回 目录里 和 跳转的地方 用的都是 Chunk
添加 目录条目 返回跳转的标记
public String addMenuTag (List<Pair<Chunk, String>> chunks, String[] menuTag, Font font) {// 跳转标记String uuidTagFlag = IdGen.uuid();// 添加目录条目ArrayList<String> strings = Lists.newArrayList(menuTag);List<String> list = strings.subList(0, menuTag.length - 1);String join = StringUtils.join(list, " \t");// 设置跳转标记Chunk chunk = new Chunk(join, font);chunk.setLocalGoto(uuidTagFlag);chunks.add(new Pair<Chunk, String>(chunk, menuTag[menuTag.length-1]));return uuidTagFlag;}
目录要跳转到的位置:
// 添加目录条目 获取锚点标记String uuidTagFlag = addMenuTag(menuParagraphs,new String[]{"试验流程图",(writer.getPageNumber() + 1 - footerBeginNum) + ""}, blackFont);// 锚点Chunk chunk = new Chunk ("试验流程图", formFont);// 设置跳转标记chunk.setLocalDestination(uuidTagFlag);// 可以直接加到 document 该样式的话 放Paragraph 里改
// document.add(chunk);Paragraph processTitle = new Paragraph(chunk);processTitle.setSpacingAfter(10);processTitle.setAlignment(Element.ALIGN_CENTER);document.add(processTitle);
// 输出目录Chunk dotLine = new Chunk(new DottedLineSeparator());for (Pair<Chunk, String> paragraph : menuChunks) {Paragraph p = new Paragraph();p.add(paragraph.getFirst());p.add(dotLine);p.add(String.valueOf(paragraph.getSecond()));document.add(p);}
把目录挪到前面
try(PDDocument pdfDoc = Loader.loadPDF(new File(finalTempFilePath));PDDocument pdfPage = new PDDocument();){for (int i = 0; i < footerEndNum-1; i++) {if(i==footerBeginNum-1){for (int j = footerEndNum-1; j < menuPageEndNum; j++) {PDPage page = pdfDoc.getPage(j);pdfPage.addPage(page);}}PDPage page = pdfDoc.getPage(i);pdfPage.addPage(page);}// 存pdfPage.save(finalMenuFilePath);}
我又不想要这种了 左侧 目录信息 怎么添加啊