如何适应矩形内的String?(How to fit a String inside a recta

2019-06-21 06:38发布

我想一些字符串,图片和表格添加到我的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();
}

Answer 1:

有三个选项:

  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包含矩形的坐标。



文章来源: How to fit a String inside a rectangle?
标签: itext