Java iText 旧版本中 LineSeparator 的替代方案?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/3719673/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Alternative for LineSeparator in iText old versions?
提问by Fran Fitzpatrick
I'm trying to insert a line separator (you know, that horizontal line that runs across documents) into my document with iText. I've found some resources via Google that use com.lowagie.text.pdf.draw.LineSeparator but the version of iText that I'm using (1.4.2) doesn't seem to have that package.
我正在尝试使用 iText 在我的文档中插入一个行分隔符(你知道,横穿文档的水平线)。我通过谷歌找到了一些使用 com.lowagie.text.pdf.draw.LineSeparator 的资源,但我使用的 iText 版本(1.4.2)似乎没有那个包。
Can anyone suggest another way to add a nice line seperator for my pdf? And please don't say update the .jar-- I'm locked in to 1.4.2.
任何人都可以建议另一种为我的pdf添加漂亮的行分隔符的方法吗?并且请不要说更新 .jar——我被锁定在 1.4.2。
Thanks!
谢谢!
采纳答案by Sean
There is a bit of a messy way around this in the earlier versions of iText. If you store the element above the horizontal line in a PdfPCell, you can then set the border of that to show only the bottom. (That cell can also be blank if needed)
在早期版本的 iText 中,有一些混乱的方法来解决这个问题。如果将元素存储在 PdfPCell 中的水平线上方,则可以将其边框设置为仅显示底部。(如果需要,该单元格也可以为空)
PdfPCell myCell = new PdfPCell(new Paragraph("Hello World") );
myCell.setBorder(Rectangle.BOTTOM);
The result should look like (solid line, not checkered)
结果应该看起来像(实线,不是方格)
Hello World
-----------
This should give you what you desire. Not the optimal solution but it is a way to work around the limitations of the old jar.
这应该给你你想要的。不是最佳解决方案,但它是一种解决旧 jar 限制的方法。
For your reference, if you want to perform this trick to put a line on top and below your text to give a result of
供您参考,如果您想执行此技巧,在文本的顶部和下方放置一条线以给出结果
-----------
Hello World
-----------
The argument to setBorder() is an int which you can use bitwise operation on to manipulate the values. So the above example can would be accomplished with
setBorder() 的参数是一个 int,您可以使用按位运算来操作值。所以上面的例子可以用
myCell.setBorder(Rectangle.BOTTOM | Rectangle.TOP);
edit: Example
编辑:示例
//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
This should create you a table which looks something like the following (assuming you correct my typos)
这应该会为您创建一个类似于以下内容的表格(假设您更正了我的拼写错误)
Hello World
------------------------------------
Bottom Left | Bottom Right
回答by ftarucco
LineSeparator ls = new LineSeparator();
document.add(new Chunk(ls));
Example: iText in action
示例:操作中的iText
回答by Boolasa
table.setExtendLastRow(true);
table.setExtendLastRow(true);
will do it!
会做的!
回答by Laurent
I'm also in favor of using Line elements rather than tables... do not repeat HTML formatting mistakes !
我也赞成使用 Line 元素而不是表格...不要重复 HTML 格式错误!
final LineSeparator lineSeparator = new LineSeparator();
lineSeparator.drawLine(pdfCB, leftX, rightX, y);
回答by pritesh dhebar
Just Add a line separator object to pdf document object. That should be it
只需将行分隔符对象添加到 pdf 文档对象。应该是这样
LineSeparator objectName = new LineSeparator();
document.add(objectName);
回答by hdoghmen
The solution given by Sean offer more flexibility when dealing with a text underlined by the line separator. I don't know if LineSeparator can do that, it seems to be meant to be just a line separator.
在处理由行分隔符加下划线的文本时,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);
Hope this can help.
Should print something like this .
希望这能有所帮助。应该打印这样的东西。
回答by luizMello
A simple way, if you want a whole new line:
一个简单的方法,如果你想要一个全新的行:
document.add(Chunk.NEWLINE);
LineSeparator ls = new LineSeparator();
document.add(new Chunk(ls));
回答by Akshay Kumar
I also faced the similar problem as my company was also using older version of iText i.e. 1.4.2. These are the two solutions that I propose for creating horizontal rule. First one uses Graphic and second uses Table with bottom border. Both works fine for me.
我也遇到了类似的问题,因为我的公司也在使用旧版本的 iText,即 1.4.2。这是我为创建水平规则而提出的两种解决方案。第一个使用图形,第二个使用带有底部边框的表格。两者对我来说都很好。
Solution 1 :
解决方案1:
protected static final Graphic HR = new Graphic();
static {
HR.setHorizontalLine(1f, 100f, Color.BLACK);
}
Solution 2 :
解决方案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 : The reason we can not update JAR is that older versions of iText are free for commercial use and newer versions are paid.
PS:我们不能更新JAR的原因是旧版本的iText可免费用于商业用途,而新版本则需要付费。
Hope that it helps!
希望它有帮助!
回答by David Lavender
I found this most closely resembles an HTML <HR>
tag:
我发现这最类似于 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 7.0.0)