私は昨日、自分の携帯電話から答えましたが、今私は、コンピュータへのアクセス権を持っていることを、私はこのようなColumnDocumentRenderer
を変更:
public class ColumnDocumentRenderer extends DocumentRenderer {
protected Rectangle[] columns;
protected int nextAreaNumber;
public ColumnDocumentRenderer(Document document, Rectangle[] columns) {
super(document);
this.columns = columns;
}
public ColumnDocumentRenderer(Document document, boolean immediateFlush, Rectangle[] columns) {
super(document, immediateFlush);
this.columns = columns;
}
@Override
protected LayoutArea updateCurrentArea(LayoutResult overflowResult) {
if (overflowResult != null && overflowResult.getAreaBreak() != null && overflowResult.getAreaBreak().getType() != AreaBreakType.NEXT_AREA) {
nextAreaNumber = 0;
}
if (nextAreaNumber % columns.length == 0) {
super.updateCurrentArea(overflowResult);
}
return (currentArea = new LayoutArea(currentPageNumber, columns[nextAreaNumber++ % columns.length].clone()));
}
public int getNextAreaNumber() {
return nextAreaNumber;
}
}
変更はiTextは7.0.1になりますが、あなたはこれを使用することができますあなた自身のレンダラーのコード
あなたは次のように、このレンダラを使用することができ
:
public void createPdf(String dest) throws IOException {
OutputStream fos = new FileOutputStream(dest);
PdfWriter writer = new PdfWriter(fos);
PdfDocument pdf = new PdfDocument(writer);
Document document = new Document(pdf);
float offSet = 36;
float gutter = 23;
float columnWidth = (PageSize.A4.getWidth() - offSet * 2)/3 - gutter * 2;
float columnHeight = PageSize.A4.getHeight() - offSet * 2;
Rectangle[] columns = {
new Rectangle(offSet, offSet, columnWidth, columnHeight),
new Rectangle(offSet + columnWidth + gutter, offSet, columnWidth, columnHeight),
new Rectangle(offSet + 2 * (columnWidth + gutter), offSet, columnWidth, columnHeight)};
ColumnDocumentRenderer renderer = new ColumnDocumentRenderer(document, columns);
document.setRenderer(renderer);
for (int i = 0; i < 50; i++) {
document.add(new Paragraph("Hello World"));
}
while (renderer.getNextAreaNumber() % 3 != 0)
document.add(new AreaBreak());
document.add(new Paragraph("Third column"));
document.add(new AreaBreak());
for (int i = 0; i < 80; i++) {
document.add(new Paragraph("Hello World"));
}
while (renderer.getNextAreaNumber() % 3 != 0)
document.add(new AreaBreak());
document.add(new Paragraph("Third column"));
document.add(new AreaBreak());
for (int i = 0; i < 10; i++) {
document.add(new Paragraph("Hello World"));
}
while (renderer.getNextAreaNumber() % 3 != 0)
document.add(new AreaBreak());
document.add(new Paragraph("Third column"));
document.close();
}
最初の列はインデックス0を有し、次の領域番号は1であり、2番目の列は、インデックス1を有しており、次の領域の数は2であるのでに。
これは、このようなページの3番目の列を確認して3番目の列に移動できることを意味します。
while (renderer.getNextAreaNumber() % 3 != 0)
document.add(new AreaBreak());
私自身のレンダラーを作成します。 [documentation](http://developers.itextpdf.com/content/itext-7-building-blocks/chapter-2-working-rootelement)で行われているように、列を追跡します。具体的には、 'updateCurrentArea()'メソッドを呼び出し、 'currentAreaNumber'を公開します。 3番目の列に入るコンテンツを追加する前にその番号を確認し、必要に応じて多くの 'AreaBreak'オブジェクトを追加します。注:何らかの理由で、 'currentAreaNumber'変数は' private'です。私はそれを「保護する」ように誘惑される。 –
私はドキュメントへのリンクを非常に感謝します。私はitextサイトを通してさまざまなリンクをたどったが、itext7に固有の文書は見つけられなかった。再度、感謝します。 – OldAndTired
完全に作業しました – OldAndTired