web-dev-qa-db-ja.com

iTextの古いバージョンのLineSeparatorの代替?

ITextを使用して、行区切り記号(ドキュメントを横切る水平線)をドキュメントに挿入しようとしています。 com.lowagie.text.pdf.draw.LineSeparatorを使用するGoogle経由のリソースをいくつか見つけましたが、使用しているバージョンのiText(1.4.2)にはそのパッケージがないようです。

誰かが私のPDFにニースラインセパレーターを追加する別の方法を提案できますか?そして、.jarを更新するとは言わないでください-私は1.4.2に固定されています。

ありがとう!

15

以前のバージョンの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
15
Sean
LineSeparator ls = new LineSeparator();
document.add(new Chunk(ls));

例: iText in action

27
ftarucco

また、テーブルではなくLine要素を使用することに賛成です... HTML形式の間違いを繰り返さないでください!

final LineSeparator lineSeparator = new LineSeparator();
lineSeparator.drawLine(pdfCB, leftX, rightX, y);
8
Laurent

行区切りオブジェクトをPDFドキュメントオブジェクトに追加するだけです。それはそれであるはずです

LineSeparator objectName = new LineSeparator();              
document.add(objectName);
4
pritesh dhebar

私の会社も古いバージョンの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は商用利用が無料で、新しいバージョンは有料だからです。

お役に立てば幸いです。

3
Akshay Kumar

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);

これがお役に立てば幸いです。このようなものを印刷する必要があります。A line separator with text

3
hdoghmen

table.setExtendLastRow(true);

やります!

1
Boolasa

これは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)

0
David Lavender

まったく新しい行が必要な場合の簡単な方法:

    document.add(Chunk.NEWLINE);
    LineSeparator ls = new LineSeparator();
    document.add(new Chunk(ls));
0
luizMello