2016-05-16 7 views
1

iTextを使用してテーブルを含むPDFを作成しています。テーブルヘッダーは90度回転したテキストを持っています。これはCellEvent(以下のコード)を使って追加しています。これは、表が複数のページにまたがる場合を除いて、回転したセルのヘッダー・テキストがページの上部から流れ出る場合を除いて、優れています。iText:CellEvent中にセルの高さを設定する

設定しようとしましたcell.setFixedHeight(100)しかし、セルには影響しないようです。私もthis solutionを試しましたが、結果の画像をテキストで表示するためにセルを取得できません。

@Override 
public void cellLayout(PdfPCell cell, Rectangle position, PdfContentByte[] canvases) { 

    PdfContentByte canvas = canvases[PdfPTable.TEXTCANVAS]; 

    try { 
        canvas.setFontAndSize(BaseFont.createFont(BaseFont.HELVETICA_BOLD, BaseFont.WINANSI, false), this.fontSize); 
    } catch (DocumentException | IOException e) { 
     e.printStackTrace(); 
    } 

    if (this.alignment == PdfPCell.ALIGN_CENTER) { 
     this.left = ((position.getRight() - position.getLeft())/2); 
    } 
    else if (this.alignment == PdfPCell.ALIGN_MIDDLE) { 
     this.top = ((position.getTop() - position.getBottom())/2); 
    } 
    canvas.showTextAligned(this.alignment, this.text, position.getLeft() + this.left, position.getTop() - this.top, this.rotation); 
} 

ここでは、セルヘッダーのオーバーフローの様子を示します。この例では、月と年(2016年3月)が表示されます。

enter image description here

Iは、使用される実際のヘッダーテキストに依存する任意の高さにセルを有するたい。どのようにこれを解決するための任意のアイデアですか?

答えて

2

の後にセルイベントがトリガーされます。セルが描画されます。 iTextがRectangleオブジェクトをpositioncellLayoutメソッドに渡しているので、あなたは既にそれを疑っているかもしれません。 A PdfPCellオブジェクトが渡されますが、読み取り専用の目的でのみ使用されます。 positionは修正されているため、setFixedHeight()は使用できません。

スクリーンショットを見ると、私は困惑しています。なぜ、セルイベントを使用して90度回転したコンテンツを追加していますか?

PdfPCell cell = new PdfPCell(new Phrase("May 16, 2016")); 
cell.setRotation(90); 

今、コンテンツが回転され、コンテンツに適用されるセルの大きさ:あなたの問題を解決するには、setRotation()メソッドを使用することです。 RotatedCell例を見てみてください:水平方向と垂直方向の概念はに回転させることrotated_cell.pdf

​​

注:

public void createPdf(String dest) throws IOException, DocumentException { 
    Document document = new Document(); 
    PdfWriter.getInstance(document, new FileOutputStream(dest)); 
    document.open(); 
    PdfPTable table = new PdfPTable(8); 
    for (int i = 0; i < 8; i++) { 
     PdfPCell cell = 
      new PdfPCell(new Phrase(String.format("May %s, 2016", i + 15))); 
     cell.setRotation(90); 
     cell.setVerticalAlignment(Element.ALIGN_MIDDLE); 
     table.addCell(cell); 
    } 
    for(int i = 0; i < 16; i++){ 
     table.addCell("hi"); 
    } 
    document.add(table); 
    document.close(); 
} 

が、結果はこのようになります。回転されたコンテンツを水平に中央揃えにするには、コンテンツの垂直方向の整列を中心に合わせ、整列したコンテンツを回転させる必要があります。

+0

これは90度ずつの回転で完璧に機能しますが、私はこの回答を受け入れます。私はCellEventを使用していましたが、これはテキストの角度が必要なためですが、90度の回転がすべての要件で機能するかどうかはわかります。ありがとう! – JohnP

関連する問題