为啥又写一篇? 因为之前 用 Anchor 写的,这东西 放到Paragraph 里就不好使了 。
这回 目录里 和 跳转的地方 用的都是 Chunk
添加 目录条目 返回跳转的标记
java
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;
}
目录要跳转到的位置:
java
// 添加目录条目 获取锚点标记
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);
java
// 输出目录
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);
}
把目录挪到前面
java
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);
}
我又不想要这种了 左侧 目录信息 怎么添加啊