iText旧版本中LineSeparator的替代方案?

2022-09-03 08:29:18

我正在尝试使用 iText 在我的文档中插入一个换行符(你知道,那条横跨文档的水平线)。我通过Google找到了一些使用com.lowagie.text.pdf draw.LineSeparator的资源,但是我正在使用的iText版本(1.4.2)似乎没有该软件包。

任何人都可以建议另一种方法来为我的pdf添加一个漂亮的行分隔符吗?请不要说更新.jar - 我被锁定在1.4.2。

谢谢!


答案 1
LineSeparator ls = new LineSeparator();
document.add(new Chunk(ls));

示例:运行中的 iText


答案 2

在早期版本的iText中,有一些混乱的方式。如果将元素存储在 PdfPCell 中水平线上方,则可以将其边框设置为仅显示底部。(如果需要,该单元格也可以为空白)

PdfPCell myCell = new PdfPCell(new Paragraph("Hello World") );
myCell.setBorder(Rectangle.BOTTOM);

结果应如下所示(实线,不方格)

Hello World
-----------

这应该给你你想要的。这不是最佳解决方案,但它是解决旧罐子局限性的一种方法。

供您参考,如果您想执行此技巧,请在文本的顶部和下方放置一行,以给出以下结果

-----------
Hello World
-----------

setBorder() 的参数是一个 int,您可以使用按位运算来操作值。因此,上面的例子可以用

myCell.setBorder(Rectangle.BOTTOM | Rectangle.TOP);

编辑:示例

//Create the table which will be 2 Columns wide and make it 100% of the page
PdfPTable myTable = new PdfPtable(2);
myTable.setWidthPercentage(100.0f);

//create a 3 cells and add them to the table
PdfPCell cellOne = new PdfPCell(new Paragraph("Hello World"));
PdfPCell cellTwo = new PdfPCell(new Paragraph("Bottom Left"));
PdfPcell cellThree = new PdfPCell(new Paragraph("Bottom Right"));

cellOne.setColspan(2);
cellOne.setBorder(Rectangle.BOTTOM);
cellOne.setHorizontalAlignment(Element.ALIGN_LEFT);

cellTwo.setBorder(Rectangle.NO_BORDER);
cellTwo.setHorizontalAlignment(Element.ALIGN_LEFT);
cellThree.setBorder(Rectangle.LEFT);
cellThree.setHorizontalAlignment(Element.ALIGN_RIGHT);

//Add the three cells to the table
myTable.addCell(cellOne);
myTable.addCell(cellTwo);
myTable.addCell(cellThree);

//Do something to add the table to your root document

这应该会创建一个如下所示的表(假设您更正了我的拼写错误)

Hello World
------------------------------------
Bottom Left      |      Bottom Right

推荐