使用 iText7 形成此布局的最佳方法是什么?
What is the best way to form this layout using iText7?
我正在尝试以 PDF 格式创建此布局
页面布局在顶部为单个 table,宽度为 100%(标记为红色 - table 1)
并排tables(每个棕色框是table table 2到table 7)
棕色 tables 具有固定大小和固定位置
我能够使用以下方法成功创建标题和 table1:
table.useAllAvailableWidth();
我的问题是 table 的其余部分(在图像中标记为棕色)
我尝试将它们并排放置:
table2.setHorizontalAlignment(HorizontalAlignment.RIGHT);
table2.setMaxWidth(UnitValue.createPercentValue(50f));
table3.setHorizontalAlignment(HorizontalAlignment.LEFT);
table3.setMaxWidth(UnitValue.createPercentValue(50f));
但它们不会在同一条线上对齐,而是一个在另一个下方
我的问题是实现此 pdf 布局的正确方法是什么?
由于 表格具有固定大小和固定位置,您可以简单地使用 iText 7 功能来设置固定位置、宽度和高度,特别是表格:
/**
* Sets values for a absolute repositioning of the Element.
* The coordinates specified correspond to the
* bottom-left corner of the element and it grows upwards.
* Also has as a side effect that the Element's {@link Property#POSITION} is changed to
* {@link LayoutPosition#FIXED fixed}.
*
* @param left horizontal position of the bottom-left corner on the page
* @param bottom vertical position of the bottom-left corner on the page
* @param width a floating point value measured in points.
* @return this Element.
*/
public T setFixedPosition(float left, float bottom, float width)
/**
* Sets the height property a block element as a point-value.
*
* @param height a floating point value for the new height
* @return the block element itself.
*/
public T setHeight(float height)
您大致得到这样的草图布局:
try ( PdfDocument pdfDocument = new PdfDocument(new PdfWriter(...));
Document document = new Document(pdfDocument)) {
PageSize pageSize = pdfDocument.getDefaultPageSize();
Table table = new Table(1);
table.addCell("table 1 - 1");
table.addCell("table 1 - 2");
table.setFixedPosition(pageSize.getLeft() + 30, pageSize.getTop() - 75, pageSize.getWidth() - 60);
table.setHeight(45);
document.add(table);
table = new Table(UnitValue.createPercentArray(new float[] {40, 60}));
table.addCell("table 2 - 1");
table.addCell("table 2 - 2");
table.setFixedPosition(pageSize.getLeft() + 30, pageSize.getTop() - 265, (pageSize.getWidth() - 70) / 2);
table.setHeight(185);
document.add(table);
table = new Table(UnitValue.createPercentArray(new float[] {20, 50, 30}));
table.addCell("table 4 - 1");
table.addCell("table 4 - 2");
table.addCell("table 4 - 3");
table.setFixedPosition(pageSize.getLeft() + 30, pageSize.getTop() - 720, (pageSize.getWidth() - 70) / 2);
table.setHeight(450);
document.add(table);
table = new Table(1);
table.addCell("table 6");
table.setFixedPosition(pageSize.getLeft() + 30, pageSize.getTop() - 810, (pageSize.getWidth() - 70) / 2);
table.setHeight(85);
document.add(table);
table = new Table(UnitValue.createPercentArray(new float[] {20, 40, 20, 20}));
table.addCell("table 3 - 1");
table.addCell("table 3 - 2");
table.addCell("table 3 - 3");
table.addCell("table 3 - 4");
table.setFixedPosition(pageSize.getRight() - (pageSize.getWidth() - 10) / 2, pageSize.getTop() - 345, (pageSize.getWidth() - 70) / 2);
table.setHeight(265);
document.add(table);
table = new Table(1);
table.addCell("table 5 - 1");
table.addCell("table 5 - 2");
table.setFixedPosition(pageSize.getRight() - (pageSize.getWidth() - 10) / 2, pageSize.getTop() - 640, (pageSize.getWidth() - 70) / 2);
table.setHeight(290);
document.add(table);
table = new Table(UnitValue.createPercentArray(new float[] {20, 50, 30}));
table.addCell("table 7 - 1");
table.addCell("table 7 - 2");
table.addCell("table 7 - 3");
table.setFixedPosition(pageSize.getRight() - (pageSize.getWidth() - 10) / 2, pageSize.getTop() - 810, (pageSize.getWidth() - 70) / 2);
table.setHeight(165);
document.add(table);
}
(FixedPositionLayouts 测试 testFixedTablePositions
)
结果:
(由于您没有给出准确的坐标,以上只能是一个近似值,您需要相应调整数值。)
我正在尝试以 PDF 格式创建此布局
页面布局在顶部为单个 table,宽度为 100%(标记为红色 - table 1)
并排tables(每个棕色框是table table 2到table 7)
棕色 tables 具有固定大小和固定位置 我能够使用以下方法成功创建标题和 table1:
table.useAllAvailableWidth();
我的问题是 table 的其余部分(在图像中标记为棕色)
我尝试将它们并排放置:
table2.setHorizontalAlignment(HorizontalAlignment.RIGHT);
table2.setMaxWidth(UnitValue.createPercentValue(50f));
table3.setHorizontalAlignment(HorizontalAlignment.LEFT);
table3.setMaxWidth(UnitValue.createPercentValue(50f));
但它们不会在同一条线上对齐,而是一个在另一个下方
我的问题是实现此 pdf 布局的正确方法是什么?
由于 表格具有固定大小和固定位置,您可以简单地使用 iText 7 功能来设置固定位置、宽度和高度,特别是表格:
/**
* Sets values for a absolute repositioning of the Element.
* The coordinates specified correspond to the
* bottom-left corner of the element and it grows upwards.
* Also has as a side effect that the Element's {@link Property#POSITION} is changed to
* {@link LayoutPosition#FIXED fixed}.
*
* @param left horizontal position of the bottom-left corner on the page
* @param bottom vertical position of the bottom-left corner on the page
* @param width a floating point value measured in points.
* @return this Element.
*/
public T setFixedPosition(float left, float bottom, float width)
/**
* Sets the height property a block element as a point-value.
*
* @param height a floating point value for the new height
* @return the block element itself.
*/
public T setHeight(float height)
您大致得到这样的草图布局:
try ( PdfDocument pdfDocument = new PdfDocument(new PdfWriter(...));
Document document = new Document(pdfDocument)) {
PageSize pageSize = pdfDocument.getDefaultPageSize();
Table table = new Table(1);
table.addCell("table 1 - 1");
table.addCell("table 1 - 2");
table.setFixedPosition(pageSize.getLeft() + 30, pageSize.getTop() - 75, pageSize.getWidth() - 60);
table.setHeight(45);
document.add(table);
table = new Table(UnitValue.createPercentArray(new float[] {40, 60}));
table.addCell("table 2 - 1");
table.addCell("table 2 - 2");
table.setFixedPosition(pageSize.getLeft() + 30, pageSize.getTop() - 265, (pageSize.getWidth() - 70) / 2);
table.setHeight(185);
document.add(table);
table = new Table(UnitValue.createPercentArray(new float[] {20, 50, 30}));
table.addCell("table 4 - 1");
table.addCell("table 4 - 2");
table.addCell("table 4 - 3");
table.setFixedPosition(pageSize.getLeft() + 30, pageSize.getTop() - 720, (pageSize.getWidth() - 70) / 2);
table.setHeight(450);
document.add(table);
table = new Table(1);
table.addCell("table 6");
table.setFixedPosition(pageSize.getLeft() + 30, pageSize.getTop() - 810, (pageSize.getWidth() - 70) / 2);
table.setHeight(85);
document.add(table);
table = new Table(UnitValue.createPercentArray(new float[] {20, 40, 20, 20}));
table.addCell("table 3 - 1");
table.addCell("table 3 - 2");
table.addCell("table 3 - 3");
table.addCell("table 3 - 4");
table.setFixedPosition(pageSize.getRight() - (pageSize.getWidth() - 10) / 2, pageSize.getTop() - 345, (pageSize.getWidth() - 70) / 2);
table.setHeight(265);
document.add(table);
table = new Table(1);
table.addCell("table 5 - 1");
table.addCell("table 5 - 2");
table.setFixedPosition(pageSize.getRight() - (pageSize.getWidth() - 10) / 2, pageSize.getTop() - 640, (pageSize.getWidth() - 70) / 2);
table.setHeight(290);
document.add(table);
table = new Table(UnitValue.createPercentArray(new float[] {20, 50, 30}));
table.addCell("table 7 - 1");
table.addCell("table 7 - 2");
table.addCell("table 7 - 3");
table.setFixedPosition(pageSize.getRight() - (pageSize.getWidth() - 10) / 2, pageSize.getTop() - 810, (pageSize.getWidth() - 70) / 2);
table.setHeight(165);
document.add(table);
}
(FixedPositionLayouts 测试 testFixedTablePositions
)
结果:
(由于您没有给出准确的坐标,以上只能是一个近似值,您需要相应调整数值。)