Chapters in iText 7
我正在使用iText 7创建带有章节和子章节的pdf文件。我已经使用Chapter类找到了iText早期版本的示例。但是,此类似乎未包含在iText 7中。
该功能如何在iText7中实现?
iText 5中的
有关如何创建章节的示例,更具体地说,书签面板中相应的轮廓,请查看iText 7:Building Blocks教程。本教程反复出现一个主题:长篇小说"杰基尔博士和海德先生的怪案"。
我们使用该文本和基于该小说的电影数据库来解释iText 7的工作原理。如果您没有时间阅读它,请跳至第6章。
在本章中,我们将创建一个如下所示的文档:
您可以在此处下载完整的示例代码:TOC_OutlinesDestinations
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | BufferedReader br = new BufferedReader(new FileReader(SRC)); String name, line; Paragraph p; boolean title = true; int counter = 0; PdfOutline outline = null; while ((line = br.readLine()) != null) { p = new Paragraph(line); p.setKeepTogether(true); if (title) { name = String.format("title%02d", counter++); outline = createOutline(outline, pdf, line, name); p.setFont(bold).setFontSize(12) .setKeepWithNext(true) .setDestination(name); title = false; document.add(p); } else { p.setFirstLineIndent(36); if (line.isEmpty()) { p.setMarginBottom(12); title = true; } else { p.setMarginBottom(0); } document.add(p); } } |
在此示例中,我们遍历包含标题和章节的文本文件。每次遇到标题时,我们都会创建一个
我们使用
1 2 3 4 5 6 7 8 9 10 11 | public PdfOutline createOutline(PdfOutline outline, PdfDocument pdf, String title, String name) { if (outline == null) { outline = pdf.getOutlines(false); outline = outline.addOutline(title); outline.addDestination(PdfDestination.makeDestination(new PdfString(name))); return outline; } PdfOutline kid = outline.addOutline(title); kid.addDestination(PdfDestination.makeDestination(new PdfString(name))); return outline; } |
还有其他方法可以实现此结果,但是使用命名目的地是最简单的方法。只需尝试该示例,您就会发现该示例的大部分复杂性是由于我们将一个简单的文本文件转换为具有章标题和章内容的文档而引起的。