4

いくつかの文字列、画像、およびテーブルを PDF ファイルに追加しようとしています (複数のページが必要です) が、使用しようとするとColumnText(文字列を絶対位置に配置したいのでこれを使用します)、問題が発生します。列の高さが文字列のコンテンツを追加するのに十分でない場合、コンテンツは不完全です。コンテンツが失われないようにするにはどうすればよいですか?

関連するコードは次のとおりです。

try {
    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("output.pdf"));
    document.open();
    PdfContentByte cb = writer.getDirectContent();
    String imageUrl = "/Users/nofear/workspace/deneme23/pics/a4-ust.png";
    String imageUrlAlt = "pics/a4-alt.png";
    Image imageust = null;
    Image imageAlt = null;
    try {
        imageust = Image.getInstance(imageUrl);
        imageAlt = Image.getInstance(imageUrlAlt);
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    System.out.println("HEIGHT"
        + (document.getPageSize().getHeight() - imageust.getHeight()));
    imageust.setAbsolutePosition(0f,
        document.getPageSize().getHeight() - imageust.getHeight()-10);
    imageAlt.setAbsolutePosition( 0f, 10f);
    document.add(imageust);
    document.add(imageAlt);
    // now draw a line below the headline
    cb.setLineWidth(1f); 
    cb.moveTo(0, 200);
    cb.lineTo(200, 200);
    cb.stroke();
    // first define a standard font for our text
    Font helvetica8BoldBlue = FontFactory.getFont(FontFactory.HELVETICA,16);
    // create a column object
    ColumnText ct = new ColumnText(cb);
    // define the text to print in the column
    Phrase myText = new Phrase("Very Very Long String!!!" , helvetica8BoldBlue);
    ct.setSimpleColumn(myText, 60, 750,
        /* width*/document.getPageSize().getWidth() - 40, 100,
        20, Element.ALIGN_LEFT);
    ct.go();
} catch (Exception e) {
} finally {
    document.close();
}
4

1 に答える 1

3

3つのオプションがあります。

  1. コンテンツが中に収まるように、より大きな長方形を提供するか、
  2. または、コンテンツを減らします(たとえば、フォントを小さくし、テキストを少なくします)。
  3. 長方形のサイズ、フォントサイズなどを維持しますが、次のページに収まらないコンテンツを追加します。

コンテンツが収まらないかどうかをどうやって知るのですか?

最初にシミュレーションモードでコンテンツを追加し、すべてのコンテンツが「消費された」かどうかをテストできます。

int status = ct.go(true);
boolean fits = !ColumnText.hasMoreText(status);

の値に基づいてfits、長方形またはコンテンツのサイズを変更することを決定できます。これを行う方法を示す例があります:http://itextpdf.com/examples/iia.php?id = 163

コンテンツを別のページに配布できる場合は、シミュレーションモードは必要ありません。挿入するだけで、document.newPage();

ColumnText ct = new ColumnText(cb);
ct.setSimpleColumn(rect);
int status = ct.go();
while (ColumnText.hasMoreText(status)) {
    document.newPage();
    ct.setSimpleColumn(rect);
    status = ct.go();
}

この例rectでは、長方形の座標が含まれています。

于 2012-11-24T09:20:05.653 に答える