99m*_*aas 2 java pdf-generation itext pdfptable
我需要你帮助设置单元格底部边框的长度.目前,它显示单元格的底部边界太长,我需要缩短它.我试图改变表的宽度,但它没有正确.
以下是代码:
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);
Run Code Online (Sandbox Code Playgroud)
有不同的方法来定义单元格的宽度.为了解释不同的选项,我们首先讨论定义表的宽度(所有列),然后讨论定义单独列的宽度.
表的宽度:
选项1:您没有定义绝对宽度.
相反,您要求iText根据可用空间计算宽度.可用空间是页面的宽度减去左边距和右边距的大小.
如果您创建这样的文档:
Document document = new Document();
Run Code Online (Sandbox Code Playgroud)
然后页面的宽度是595个用户单位(这是A4页面的宽度),边距的宽度是36个用户单位(如果没有明确定义边距,这些是默认值).因此可用宽度为523个用户单位.
当您像这样定义表时:
PdfPTable table = new PdfPTable(2);
Run Code Online (Sandbox Code Playgroud)
然后,当您将此表添加到页面时,表将占用可用宽度的80%.因此,如果可用宽度为523,则表格的宽度将为418.4用户单位.
您可以通过更改宽度百分比来更改此值.例如,如果你添加:
table.setWidthPercentage(100);
Run Code Online (Sandbox Code Playgroud)
然后将使用100%的可用宽度,您的表将是523个用户单位宽.
选项2:定义绝对宽度.
假设您要求创建宽度为4英寸的表格.默认情况下,1英寸是72个用户单位,因此您需要一个包含288个用户单位的表格.
这可以这样实现:
PdfPTable table = new PdfPTable(2);
table.setTotalWidth(288);
table.setLockedWidth(true);
Run Code Online (Sandbox Code Playgroud)
如果您忘记了该行,table.setLockedWidth(true);那么iText将假设您希望iText根据(默认)宽度百分比和可用宽度计算宽度.锁定宽度,切换iText以使用总宽度作为绝对宽度.
列宽:
案例1:相对宽度
如果未定义任何宽度,则每列的宽度都相同.该宽度将通过将表格的宽度除以列数来计算.例如,如果表的宽度是288个用户单位,并且如果表有两列,则每列将是144个用户单位.
假设您希望第二列的宽度是第一列的三倍,那么您可以更改列的相对宽度,如下所示:
PdfPTable table = new PdfPTable(2);
table.setWidths(new float[] { 1, 3 });
Run Code Online (Sandbox Code Playgroud)
或者,如果您只想使用一行:
PdfPTable table = new PdfPTable(new float[] { 1, 3 });
Run Code Online (Sandbox Code Playgroud)
如果宽度table为288,则第一列的宽度现在为72,第二列的宽度为216.
如果你这样做,你会得到相同的结果:
PdfPTable table = new PdfPTable(new float[] { 25, 75 });
Run Code Online (Sandbox Code Playgroud)
宽度是相对值.{ 1, 3 }相当于{ 25, 75 }.
你做了一件奇怪的事:
PdfPTable table55 = new PdfPTable(2);
table55 = new PdfPTable(new float[] { 6, 6 });
Run Code Online (Sandbox Code Playgroud)
在第一行中,您创建一个具有两列相同宽度的表new PdfPTable(2),但您永远不会使用它PdfPTable(2),因为在第二行中,您将table55变量重新定义为new PdfPTable(new float[]{ 6, 6 } ).
与{ 6, 6 }相对值一样,这相当于{ 50, 50 }或{ 1, 1 }...您正在创建一个具有两个宽度相同的列的表.
案例2:绝对宽度
假设您不想使用相对宽度(例如因为计算288的1/4和288的3/4的数学太难)并且您想创建一个表格宽度为两列,其中第一列是1英寸宽,第二个宽3英寸,那么你可以再次使用桌子锁定宽度的原理.看一眼:
PdfPTable table = new PdfPTable(2);
table.setTotalWidth(new float[]{ 72, 216 });
table.setLockedWidth(true);
Run Code Online (Sandbox Code Playgroud)
现在我们将一个数组传递给该setTotalWidth()方法.宽度不再相对,我们通过锁定宽度告诉iText使用这些绝对宽度.
现在第一列(以及第一列中的所有单元格)将是72个用户单位(1英寸)宽,第二列将是216个用户单位(3英寸)宽.
细胞宽度:
单元格的宽度遵循列的宽度.
当然,所有这些都在网上提供的文档中有详细解释.例如,请参阅ColumnWidths等示例或专用于免费电子书中StackOverflow上最佳iText问题的表的整章.人们想知道为什么没有人读过那些文件.如果没有人对答案感兴趣,继续回答问题是否有意义?(对不起这个哲学笔记,这是漫长的一天.)
| 归档时间: |
|
| 查看次数: |
12424 次 |
| 最近记录: |