iText中的行分隔符?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iText中的行分隔符?相关的知识,希望对你有一定的参考价值。

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

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

谢谢!

答案

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

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

结果看起来应该是(实线,没有方格)

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

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

作为参考,如果你想要执行这个技巧,在文本的顶部和下方放一条线来给出结果

-----------
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
另一答案
LineSeparator ls = new LineSeparator();
document.add(new Chunk(ls));

示例:iText in action

另一答案

我也赞成使用Line元素而不是表格...不要重复html格式错误!

final LineSeparator lineSeparator = new LineSeparator();
lineSeparator.drawLine(pdfCB, leftX, rightX, y);
另一答案

只需将行分隔符对象添加到pdf文档对象。那应该是它

LineSeparator objectName = new LineSeparator();              
document.add(objectName);
另一答案

table.setExtendLastRow(true);

会做的!

另一答案

Sean给出的解决方案在处理行分隔符下划线的文本时提供了更大的灵活性。我不知道LineSeparator是否可以做到这一点,它似乎只是一个行分隔符。

Paragraph ph = new Paragraph(new Phrase("My line separator", yourFont));
PdfPCell cell = new PdfPCell(ph);
cell.Border = Rectangle.BOTTOM_BORDER;
cell.BorderColor = new BaseColor(44, 67, 144);
cell.BorderWidth = 2f;

PdfPTable table = new PdfPTable(1);                
table.AddCell(cell);
table.HorizontalAlignment = Element.ALIGN_LEFT;
table.WidthPercentage = 100f;
doc.Add(table);

希望这可以提供帮助。应该打印这样的东西。

另一答案

一个简单的方法,如果你想要一个全新的线:

    document.add(Chunk.NEWLINE);
    LineSeparator ls = new LineSeparator();
    document.add(new Chunk(ls));
另一答案

我也遇到了类似的问题,因为我的公司也使用旧版iText,即1.4.2。这些是我建议用于创建水平规则的两种解决方案。第一个使用Graphic,第二个使用带底边的Table。两者都适合我。

解决方案1:

protected static final Graphic HR = new Graphic();
  static {
    HR.setHorizontalLine(1f, 100f, Color.BLACK);
  }

解决方案2:

    private static void addHorizontalLine(Document document, PdfWriter writer) throws DocumentException, IOException{
    PdfPTable myTable = new PdfPTable(1);
    myTable.setWidthPercentage(100.0f);
    PdfPCell cellOne = new PdfPCell();
    cellOne.setBorder(Rectangle.BOTTOM);
    document.add(new Paragraph(" "));
    document.add(myTable);
}

PS:我们无法更新JAR的原因是旧版本的iText可以免费用于商业用途并且支付更新的版本。

希望它有所帮助!

另一答案

我发现这非常类似于HTML <HR>标签:

import com.itextpdf.kernel.color.Color;
import com.itextpdf.kernel.pdf.canvas.draw.SolidLine;
import com.itextpdf.layout.element.LineSeparator;

...

final SolidLine lineDrawer = new SolidLine(1f);
lineDrawer.setColor(Color.GRAY);
document.add(new LineSeparator(lineDrawer));

(iText 7.0.0)

以上是关于iText中的行分隔符?的主要内容,如果未能解决你的问题,请参考以下文章

UIPickerView 中的行分隔符

Itext:用条形码分隔符分割pdf文档

iText7高级教程之html2pdf——2.使用CSS定义样式

iText7高级教程之html2pdf——2.使用CSS定义样式

iText7高级教程之html2pdf——2.使用CSS定义样式

编写一个程序, 将 a.txt 文件中的单词与 b.txt 文件中的 单词交替合并到 c.txt 文件中, a.txt 文件中的单词用回车符 分隔, b.txt 文件中用回车或空格进行分隔。(代码片段