itext
テーブル:iText 5とiText 7
サーチ…
備考
iText 5のクラス名PdfPTable
とPdfPCell
が選択されました。これは、 Table
とCell
という名前のクラスがすでに最高のプログラミングレベルで作成されているためです。また、内部的にiTextで使用されるPdfTable
というクラスもありました。これらのクラスには多くの欠陥があり、 PdfPTable
とPdfPCell
支持して非難されPdfPCell
。彼らはずっと前に削除されています。
長年にわたり、 PdfPTable
とPdfPCell
もユーザーから批判を受けました。たとえば、ユーザーはテキストモードとコンポジットモードの違いを理解できませんでした。
テキストモードは、 PdfPCell
ようにPdfPCell
を作成するときに使用されます。
cell = new PdfPCell(new Phrase("Cell with rowspan 2"));
この場合、 PdfPCell
レベルで水平方向の整列のようなプロパティを定義します。
コンポジットモードは、 addElement()
メソッドを使用する瞬間に起動します:
cell = new PdfPCell();
cell.addElement(new Phrase("Cell 1.2"));
この場合、 PdfPCell
のレベルで定義されたいくつかのプロパティ(水平方向の配置など)は無視されます。水平方向の位置合わせは、セルに追加された要素のレベルで定義されます。たとえば、異なる段落の水平方向の配置が異なる必要があるセルを作成する場合は、コンポジットモードに切り替わります。
iText 5の例で作成されたテーブルのスクリーンショットを見ると、内容がCell 1.1 (テキストモードで追加されたセル )とCell 1.2 (複合モードで追加された)のセルの配置が全く異なることがわかります。
奇妙なアラインメントに対する批判に答えるために、我々は昇順および降順情報を使用する方法を導入した。コンテンツCell 2.1 (テキストモードで追加)とセル2.2 (複合モードで追加)のセルに対して、これらのメソッドを使用します。また、これらのセルに5のパディングを導入しました。
今は結果がはるかに優れています。
私たちがiText 7で修正したもの:
iText 7を最初から作成して以来、再利用できなかった名前のレガシークラスはありませんでした。新しいTable
と新しいCell
クラスを導入しました。
これ以上のテキストモードと複合モードはありません。 Cell
はパラメータなしで、または行スパンと列スパンを定義するパラメータで作成されます。すべてのコンテンツはadd()
メソッドを使用して同じ方法で追加されます。
また、顧客はマージンとパディングを区別する手段を提供するよう求めていました。 iText 7の例では、灰色の背景を追加してその違いを示しました。 Cell 2.1のコンテンツを持つセルでは、5ユーザー単位のマージンを定義します。デフォルトのパディングは2です。コンテンツCell 2.2を持つセルでは、5単位のパディングを定義します。デフォルトのマージンは0です。
スクリーンショットから分かるように、セルはきれいにレンダリングされます。私たちは昇順または降順を設定するメソッドを使用する必要はありませんでした。デフォルトの動作は、開発者が期待する動作に非常に近いものです。
iText 7のテーブルとセルについてもっと知りたいですか?
iText 7:Building Blocksチュートリアルの第5章であるAbstractElementオブジェクトの追加(パート2)を読んでください。 無料の電子ブックを手に入れよう!
HelloWorldTable.java(iText 5)
この例では、iText 5を使用して次の表を作成します。
私たちは、必要PdfPTable
とPdfPCell
これを達成するためのクラスを:
public void createPdf(String dest) throws IOException, DocumentException {
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(dest));
document.open();
PdfPTable table = new PdfPTable(3);
PdfPCell cell = new PdfPCell(new Phrase("Cell with colspan 3"));
cell.setColspan(3);
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell(cell);
cell = new PdfPCell(new Phrase("Cell with rowspan 2"));
cell.setRowspan(2);
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
table.addCell(cell);
table.addCell("Cell 1.1");
cell = new PdfPCell();
cell.addElement(new Phrase("Cell 1.2"));
table.addCell(cell);
cell = new PdfPCell(new Phrase("Cell 2.1"));
cell.setPadding(5);
cell.setUseAscender(true);
cell.setUseDescender(true);
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell(cell);
cell = new PdfPCell();
cell.setPadding(5);
cell.setUseAscender(true);
cell.setUseDescender(true);
Paragraph p = new Paragraph("Cell 2.2");
p.setAlignment(Element.ALIGN_CENTER);
cell.addElement(p);
table.addCell(cell);
document.add(table);
document.close();
}
HelloWorldTable.java(iText 7)
この例では、iText 7を使用して次の表を作成します。
これを実現するには、 Table
クラスとCell
クラスが必要です。
public void createPdf(String dest) throws IOException {
PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
try (Document document = new Document(pdf)) {
Table table = new Table(3);
Cell cell = new Cell(1, 3)
.setTextAlignment(TextAlignment.CENTER)
.add("Cell with colspan 3");
table.addCell(cell);
cell = new Cell(2, 1)
.add("Cell with rowspan 2")
.setVerticalAlignment(VerticalAlignment.MIDDLE);
table.addCell(cell);
table.addCell("Cell 1.1");
table.addCell(new Cell().add("Cell 1.2"));
table.addCell(new Cell()
.add("Cell 2.1")
.setBackgroundColor(Color.LIGHT_GRAY)
.setMargin(5));
table.addCell(new Cell()
.add("Cell 1.2")
.setBackgroundColor(Color.LIGHT_GRAY)
.setPadding(5));
document.add(table);
}
}
出典: developers.itextpdf.comおよびiText 7:Building Blocksチュートリアル