1

iText 7 を使用して、チャプターとサブチャプターを含む pdf ファイルを作成しようとしています。Chapter クラスを使用した以前のバージョンの iText の例を見つけました。ただし、このクラスは iText 7 には含まれていないようです。

その機能は iText7 でどのように実装されていますか?

4

1 に答える 1

2

iText 5のChapterandクラスには問題がありました。Sectionすでに iText 5 を使用しているため、 を使用することをお勧めしますPdfOutline

章の作成方法の例、およびより具体的には、ブックマーク パネル内の対応するアウトラインについては、iText 7: Building Blocksチュートリアルをご覧ください。このチュートリアルには、小説「ジキル博士とハイド氏の奇妙な事件」という繰り返しのテーマがあります。

そのテキストと、この小説に基づく映画のデータベースを使用して、iText 7 がどのように機能するかを説明します。読む時間がない場合は、第 6 章にジャンプしてください。

この章では、次のようなドキュメントを作成します。

ここに画像の説明を入力

完全なサンプル コードは、 TOC_OutlinesDestinationsからダウンロードできます。

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))

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;
}

この結果を達成する方法は他にもありますが、名前付き宛先を使用するのが最も簡単な方法です。例を試してみてください。この例の複雑さのほとんどは、単純なテキスト ファイルを章のタイトルと章の内容を含むドキュメントに変換するという事実によって引き起こされていることがわかります。

于 2016-10-27T13:48:27.870 に答える