iText7 を使用して、複数のセクションを持つドキュメントを作成しています。一部のセクションは通常どおりフォーマットされますが、一部は列にフォーマットされます。ColumnDocumentRenderer オブジェクトを使用して適切に列にフォーマットすることはできますが、そうすると、ドキュメント全体が列を使用するように設定されます。その場で使用するレンダラーを iText に交換させる方法はありますか?
その場でレンダラーを交換しようとすると、null ポインター例外が発生します (com.itextpdf.kernel.pdf.PdfDictionary.get(PdfDictionary.java:482))。
PdfDocument pdf = new PdfDocument(new PdfWriter(targetFile));
Document document = new Document(pdf);
DocumentRenderer defRender = new DocumentRenderer(document);
document.setRenderer(defRender);
ColumnDocumentRenderer dictRender = getColumnRender();
while (<CONDITION>) {
document.setRenderer(dictRender);
document.add(new Paragraph("THIS IS NORMAL TEXT"));
document.add(new Paragraph("THIS IS NORMAL TEXT"));
document.add(new Paragraph("THIS IS NORMAL TEXT"));
<...>
document.setRenderer(defRender);
document.add(new Paragraph("THIS IS COLUMN TEXT"));
document.add(new Paragraph("THIS IS COLUMN TEXT"));
document.add(new Paragraph("THIS IS COLUMN TEXT"));
<...>
}
レンダラーを dictRender に設定した後、最初の document.add() ステートメントが com.itextpdf.kernel.pdf.PdfDictionary.get(PdfDictionary.java:482) でヌル ポインター エラーをスローします。
複数の異なる PDF ファイルを作成する必要はありませんが、それが私がしなければならないことになるのではないかと考えています。ここで助けてくれてありがとう。