首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iText 7中的章节

iText 7中的章节
EN

Stack Overflow用户
提问于 2016-10-27 13:35:41
回答 1查看 1.5K关注 0票数 1

我希望用iText 7创建一个包含章节和子章节的pdf文件,我已经找到了使用章节类的iText早期版本的例子。但是,这个类似乎没有包含在iText 7中。

该功能是如何在iText7中实现的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-27 13:48:27

ChapterSection类在iText 5中是有问题的。在iText 5中,我们建议人们使用PdfOutline

有关如何创建章节的示例,更具体而言,是书签面板中相应的大纲,请查看iText 7:积木教程。本教程有一个反复出现的主题:小说“Jekyll博士和Hyde先生的奇怪案例”。

我们使用该文本和基于这部小说的电影数据库来解释iText 7的工作原理。如果您没有时间阅读,请跳到第六章

在本章中,我们创建了如下所示的文档:

您可以在这里下载完整的示例代码:OutlinesDestinations

代码语言:javascript
复制
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);
    }
}

在本例中,我们循环遍历包含标题和章节的文本文件。每次遇到一个标题时,我们都会创建一个name (title01title02等),并使用这个名称作为标题段落的命名目的地:setDestination(name)

我们使用PdfOutline对象创建轮廓,为此定义了一个命名的目标,如下所示:PdfDestination.makeDestination(new PdfString(name))

代码语言:javascript
复制
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;
}

实现这一结果还有其他方法,但使用命名目的地是最简单的方法。只要尝试一下这个例子,您就会发现这个例子的大部分复杂性是由于我们将一个简单的文本文件转换成一个包含章节标题和章节内容的文档。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40286014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档