0

iText5ライブラリを使用してPDFドキュメントを生成しています(以前に彼を見たことがある人のために、まだそうです) 。Bruno Lowagie に敬意を表します。本当に素晴らしい API であることがわかりました。

ただし、私の仕事の一部は、いくつかのフレーズをフォーマットすることです。ネストされた を使用しPdfPTableてデータをフォーマットしましたが、奇妙な間隔の問題が発生しています。これが私が直面している問題の例です:

ここに画像の説明を入力

ご覧のとおり、フレーズが 2 つしかない行は、行間に大きなギャップがある傾向があります。なぜこれが起こっているのか理解できます。上の行はテーブルを引き伸ばしています。テーブルを必要なだけ大きくし、大きくしない方法はありますか?

コード

価格コレクションの生成

私はこのスニペットで価格を作成しています:

 Paragraph pricePara = new Paragraph();
 pricePara.add(price);
 pricePara.add(generateBreakLine());
 pricePara.add(time);
 pricePara.add(generateBreakLine());
 allPrices.add(pricePara);

wheregenerateBreakLine()は空のParagraphオブジェクトを返します。

それらをセルに追加する

次のスニペットを使用してセルに追加します。

 // 5 is just the amount of prices we can fit on one line.
 PdfPTable pricesCellValue = new PdfPTable(elements.size() > 5 ? 5 : elements.size());
    // Make it appear that the prices are just horizontal, as opposed to in a table.
    pricesCellValue.getDefaultCell().setBorder(PdfPCell.NO_BORDER);

    // Cycle through each price. Add to cell. Add cell to the table.
    for (com.lowagie.text.Element elem : elements) {
        PdfPCell cell = new PdfPCell((Paragraph) elem);
        cell.setBorder(PdfPCell.NO_BORDER);
        cell.setPadding(2);
        pricesCellValue.addCell(cell);
    }
    return pricesCellValue; 

上記のスニペットは、テーブルの周りのすべてのスペースを埋めるのではなく、テーブルが必要なだけの幅であることを確認できる場所だと思います。どうすればそれを行うことができますか?

4

1 に答える 1

1

解決済み

それを修正する簡単な方法を見つけました。価格の数に基づいて列の数を変更する代わりに、列番号が常に 5 であることを確認してから、空のセルを追加します。

  if(elements.size() < 5)
    {
        int diff = 5 - elements.size();

        for(int x = 0; x < diff; x++)
        {
            pricesCellValue.addCell(new Paragraph(" "));
        }
    }
于 2013-08-19T10:11:33.580 に答える