如何改变单元格的宽度?
How to change the width of a cell?
我需要你的帮助来设置单元格底部边框的长度。目前,它显示单元格的底部边框太长,我需要缩短它。我试图改变 table 的宽度,但它不正确。
代码如下:
Paragraph tableParagraph = new Paragraph();
tableParagraph.setAlignment(Element.ALIGN_LEFT);
PdfPTable table55 = new PdfPTable(2);
table55 = new PdfPTable(new float[] { 6, 6 });
table55.setWidthPercentage(90f);
table55.getDefaultCell().setBorder(PdfPCell.NO_BORDER);
PdfPCell cel2a = new PdfPCell(new Paragraph("Total of Net Profit ", font));
PdfPCell cel2b = new PdfPCell(new Paragraph("100.000" + " USD ", font));
cel2a.setBorder(Rectangle.NO_BORDER);
cel2b.setBorder(Rectangle.BOTTOM);
cel2a.setLeading(1f, 1.5f);
cel2b.setLeading(1f, 1.5f);
table55.addCell(cel2a);
table55.addCell(cel2b);
定义单元格宽度的方法有多种。为了解释不同的选项,我们必须先谈谈定义table(所有列)的宽度,然后再谈谈定义单独列的宽度。
宽度table:
选项 1:您没有定义绝对宽度。
相反,您要求 iText 根据可用 space 计算宽度。可用的space是页面宽度减去左右边距的大小
如果您创建这样的文档:
Document document = new Document();
则页面宽度为 595 个用户单位(这是 A4 页面的宽度),边距宽度为 36 个用户单位(如果您未明确定义边距,则这些为默认值) .因此可用宽度为 523 个用户单位。
当您这样定义 table 时:
PdfPTable table = new PdfPTable(2);
那么当您将此 table 添加到页面时,table 将占据可用宽度的 80%。因此,如果可用宽度为 523,则 table 的宽度将为 418.4 个用户单位。
您可以通过更改宽度百分比来更改此设置。例如,如果您添加:
table.setWidthPercentage(100);
然后 100% 的可用宽度将被使用,您的 table 将是 523 个用户单位宽。
选项 2:您定义一个绝对宽度。
假设要求您创建一个宽度为 4 英寸的 table。默认情况下,1 英寸是 72 个用户单位,因此您需要 table 288 个用户单位。
可以这样实现:
PdfPTable table = new PdfPTable(2);
table.setTotalWidth(288);
table.setLockedWidth(true);
如果您忘记了 table.setLockedWidth(true);
行,那么 iText 将假定您希望 iText 根据(默认)宽度百分比和可用宽度来计算宽度。锁定宽度,切换 iText 以使用总宽度作为绝对宽度。
列宽:
案例 1:相对宽度
当您不定义任何宽度时,每列将具有相同的宽度。此宽度将通过将 table 的宽度除以列数来计算。例如。如果 table 的宽度为 288 个用户单位,并且 table 有两列,则每列将为 144 个用户单位。
假设您希望第二列的宽度是第一列的三倍,那么您可以像这样更改列的相对宽度:
PdfPTable table = new PdfPTable(2);
table.setWidths(new float[] { 1, 3 });
或者,如果您只想使用一行:
PdfPTable table = new PdfPTable(new float[] { 1, 3 });
如果table
的宽度是288,那么第一列的宽度现在是72,第二列的宽度是216。
如果你这样做,你会得到相同的结果:
PdfPTable table = new PdfPTable(new float[] { 25, 75 });
宽度是相对值。 { 1, 3 }
等同于 { 25, 75 }
.
你做了奇怪的事情:
PdfPTable table55 = new PdfPTable(2);
table55 = new PdfPTable(new float[] { 6, 6 });
在第一行中,您创建了一个 table,其中两列宽度相同 new PdfPTable(2)
,但您从未使用过 PdfPTable(2)
,因为在第二行中,您重新定义了 table55
变量为 new PdfPTable(new float[]{ 6, 6 } )
.
由于 { 6, 6 }
是相对值,这等同于 { 50, 50 }
或 { 1, 1 }
...您正在创建一个 table,其中两列的宽度相同.
情况 2:绝对宽度
假设您不想使用相对宽度(例如,因为计算 288 的 1/4 和 288 的 3/4 的数学太难了)并且您想创建一个 table width 两列,第一列是1英寸宽,第二列是3英寸宽,那么你可以再次使用table锁定宽度的原理。看看:
PdfPTable table = new PdfPTable(2);
table.setTotalWidth(new float[]{ 72, 216 });
table.setLockedWidth(true);
现在我们将数组传递给 setTotalWidth()
方法。宽度不再是相对的,我们通过锁定宽度告诉 iText 使用这些绝对宽度。
现在第一列(以及第一列中的所有单元格)的宽度为 72 个用户单位(1 英寸),第二列的宽度为 216 个用户单位(3 英寸)。
单元格宽度:
单元格的宽度与列的宽度一致。
当然,所有这些都已在在线文档中进行了详细解释。请参阅 ColumnWidths or the entire chapter that is dedicated to tables in the free ebook The Best iText Questions on Whosebug 等示例。人们想知道为什么没有人阅读该文档。如果没有人对答案感兴趣,继续回答问题是否有意义? (很抱歉这个哲学笔记,这是漫长的一天。)
我需要你的帮助来设置单元格底部边框的长度。目前,它显示单元格的底部边框太长,我需要缩短它。我试图改变 table 的宽度,但它不正确。
代码如下:
Paragraph tableParagraph = new Paragraph();
tableParagraph.setAlignment(Element.ALIGN_LEFT);
PdfPTable table55 = new PdfPTable(2);
table55 = new PdfPTable(new float[] { 6, 6 });
table55.setWidthPercentage(90f);
table55.getDefaultCell().setBorder(PdfPCell.NO_BORDER);
PdfPCell cel2a = new PdfPCell(new Paragraph("Total of Net Profit ", font));
PdfPCell cel2b = new PdfPCell(new Paragraph("100.000" + " USD ", font));
cel2a.setBorder(Rectangle.NO_BORDER);
cel2b.setBorder(Rectangle.BOTTOM);
cel2a.setLeading(1f, 1.5f);
cel2b.setLeading(1f, 1.5f);
table55.addCell(cel2a);
table55.addCell(cel2b);
定义单元格宽度的方法有多种。为了解释不同的选项,我们必须先谈谈定义table(所有列)的宽度,然后再谈谈定义单独列的宽度。
宽度table:
选项 1:您没有定义绝对宽度。
相反,您要求 iText 根据可用 space 计算宽度。可用的space是页面宽度减去左右边距的大小
如果您创建这样的文档:
Document document = new Document();
则页面宽度为 595 个用户单位(这是 A4 页面的宽度),边距宽度为 36 个用户单位(如果您未明确定义边距,则这些为默认值) .因此可用宽度为 523 个用户单位。
当您这样定义 table 时:
PdfPTable table = new PdfPTable(2);
那么当您将此 table 添加到页面时,table 将占据可用宽度的 80%。因此,如果可用宽度为 523,则 table 的宽度将为 418.4 个用户单位。
您可以通过更改宽度百分比来更改此设置。例如,如果您添加:
table.setWidthPercentage(100);
然后 100% 的可用宽度将被使用,您的 table 将是 523 个用户单位宽。
选项 2:您定义一个绝对宽度。
假设要求您创建一个宽度为 4 英寸的 table。默认情况下,1 英寸是 72 个用户单位,因此您需要 table 288 个用户单位。
可以这样实现:
PdfPTable table = new PdfPTable(2);
table.setTotalWidth(288);
table.setLockedWidth(true);
如果您忘记了 table.setLockedWidth(true);
行,那么 iText 将假定您希望 iText 根据(默认)宽度百分比和可用宽度来计算宽度。锁定宽度,切换 iText 以使用总宽度作为绝对宽度。
列宽:
案例 1:相对宽度
当您不定义任何宽度时,每列将具有相同的宽度。此宽度将通过将 table 的宽度除以列数来计算。例如。如果 table 的宽度为 288 个用户单位,并且 table 有两列,则每列将为 144 个用户单位。
假设您希望第二列的宽度是第一列的三倍,那么您可以像这样更改列的相对宽度:
PdfPTable table = new PdfPTable(2);
table.setWidths(new float[] { 1, 3 });
或者,如果您只想使用一行:
PdfPTable table = new PdfPTable(new float[] { 1, 3 });
如果table
的宽度是288,那么第一列的宽度现在是72,第二列的宽度是216。
如果你这样做,你会得到相同的结果:
PdfPTable table = new PdfPTable(new float[] { 25, 75 });
宽度是相对值。 { 1, 3 }
等同于 { 25, 75 }
.
你做了奇怪的事情:
PdfPTable table55 = new PdfPTable(2);
table55 = new PdfPTable(new float[] { 6, 6 });
在第一行中,您创建了一个 table,其中两列宽度相同 new PdfPTable(2)
,但您从未使用过 PdfPTable(2)
,因为在第二行中,您重新定义了 table55
变量为 new PdfPTable(new float[]{ 6, 6 } )
.
由于 { 6, 6 }
是相对值,这等同于 { 50, 50 }
或 { 1, 1 }
...您正在创建一个 table,其中两列的宽度相同.
情况 2:绝对宽度
假设您不想使用相对宽度(例如,因为计算 288 的 1/4 和 288 的 3/4 的数学太难了)并且您想创建一个 table width 两列,第一列是1英寸宽,第二列是3英寸宽,那么你可以再次使用table锁定宽度的原理。看看:
PdfPTable table = new PdfPTable(2);
table.setTotalWidth(new float[]{ 72, 216 });
table.setLockedWidth(true);
现在我们将数组传递给 setTotalWidth()
方法。宽度不再是相对的,我们通过锁定宽度告诉 iText 使用这些绝对宽度。
现在第一列(以及第一列中的所有单元格)的宽度为 72 个用户单位(1 英寸),第二列的宽度为 216 个用户单位(3 英寸)。
单元格宽度:
单元格的宽度与列的宽度一致。
当然,所有这些都已在在线文档中进行了详细解释。请参阅 ColumnWidths or the entire chapter that is dedicated to tables in the free ebook The Best iText Questions on Whosebug 等示例。人们想知道为什么没有人阅读该文档。如果没有人对答案感兴趣,继续回答问题是否有意义? (很抱歉这个哲学笔记,这是漫长的一天。)