ITextを使用して、行区切り記号(ドキュメントを横切る水平線)をドキュメントに挿入しようとしています。 com.lowagie.text.pdf.draw.LineSeparatorを使用するGoogle経由のリソースをいくつか見つけましたが、使用しているバージョンの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));
また、テーブルではなくLine要素を使用することに賛成です... HTML形式の間違いを繰り返さないでください!
final LineSeparator lineSeparator = new LineSeparator();
lineSeparator.drawLine(pdfCB, leftX, rightX, y);
行区切りオブジェクトをPDFドキュメントオブジェクトに追加するだけです。それはそれであるはずです
LineSeparator objectName = new LineSeparator();
document.add(objectName);
私の会社も古いバージョンのiText、つまり1.4.2を使用していたので、同様の問題に直面しました。これらは、水平方向のルールを作成するために提案する2つのソリューションです。 1つ目はグラフィックを使用し、2つ目は下の境界線のあるテーブルを使用します。どちらも私にとっては問題なく動作します。
解決策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は商用利用が無料で、新しいバージョンは有料だからです。
お役に立てば幸いです。
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);
これがお役に立てば幸いです。このようなものを印刷する必要があります。
table.setExtendLastRow(true);
やります!
これは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)
まったく新しい行が必要な場合の簡単な方法:
document.add(Chunk.NEWLINE);
LineSeparator ls = new LineSeparator();
document.add(new Chunk(ls));