tags:

views:

133

answers:

1

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.

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.

Thanks!

A: 

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)

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.

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

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
Sean
It looks like that is almost EXACTLY what I need, but will the border fill the entire page, or only go to the end of whatever is in the paragraph? -- I basically need a line that goes from one side of the page to the other.
Fran Fitzpatrick
Gave you an example on how to pull this off in the Edit above. I just wrote this here, so don't yell when you find syntax errors. The key part is to look at the myTable.setWidthPercentage(). This is in relation to the parent element. Assuming you add this to a Document object, you have a table stretching 100% of the document.
Sean
That was exactly what I was looking for! Thank you, gameaddict. :-)
Fran Fitzpatrick