PDF 生成目录和页码 点击跳转(新)

为啥又写一篇?  因为之前 用 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);
		}

我又不想要这种了   左侧 目录信息 怎么添加啊

最近更新

  1. .Net Core WebAPI参数的传递方式

    2024-05-16 06:22:11       2 阅读
  2. QT--气泡框的实现

    2024-05-16 06:22:11       3 阅读
  3. LeetCode 968.监控二叉树 (hard)

    2024-05-16 06:22:11       2 阅读
  4. leetcode热题100.完全平方数(动态规划进阶)

    2024-05-16 06:22:11       2 阅读
  5. leetcode328-Odd Even Linked List

    2024-05-16 06:22:11       3 阅读
  6. C 语言设计模式(结构型)

    2024-05-16 06:22:11       2 阅读
  7. v-if 与 v-show(vue3条件渲染)

    2024-05-16 06:22:11       2 阅读
  8. kafka防止消息丢失配置

    2024-05-16 06:22:11       3 阅读

热门阅读

  1. Azure SQL server database 权限管理-赋予权限

    2024-05-16 06:22:11       3 阅读
  2. STM32多个外部中断可能共享同一个中断向量

    2024-05-16 06:22:11       4 阅读
  3. STM32 HAL TM1637使用

    2024-05-16 06:22:11       3 阅读
  4. Nginx-04-Docker Nginx

    2024-05-16 06:22:11       2 阅读
  5. socket介绍

    2024-05-16 06:22:11       4 阅读
  6. Linux系统安装MongoDB流程

    2024-05-16 06:22:11       3 阅读
  7. mysql入门与mongoDB入门

    2024-05-16 06:22:11       3 阅读
  8. Docker学习(10)搭建kubernetes集群

    2024-05-16 06:22:11       4 阅读
  9. 基于C++的OpenCV支持的KCF目标跟踪

    2024-05-16 06:22:11       2 阅读
  10. MongoDB聚合运算符:$zip

    2024-05-16 06:22:11       3 阅读
  11. Jetpack Compose 初探

    2024-05-16 06:22:11       4 阅读