如何使用itextsharp将长文本定位并包装到下一行?

use*_*325 2 java pdf-generation itextsharp

我使用itextsharp生成PDF文件,

我正在打印2个字符串leading1和leading2.

问题是,当领先1长度增加时,它影响领先2并且它被修剪.

但是如果在leading1中没有字符增加,我想在下一行打印leading1和leading2.

基本上,leading2被硬编码为=你的DIDIT.但是leading1是动态价值.

所以,我只想知道如何定位和包装长文本.

这是我的代码......

有人可以帮我这样做吗?

PdfContentByte cb = writer.getDirectContent();
        cb.saveState();
        cb.beginText();
        cb.setFontAndSize(baseFontMedium, 10f);

        // float x = 6.4392f * commonView.INCH;
        float x = 6.47f * commonView.INCH;
        float y = pageSize.getHeight() - (1.13f * commonView.INCH);

        cb.setCMYKColorFillF(0f, 0f, 0f, 0.77f); 
        cb.setTextMatrix(1, 0, 0, 1, x, y); 
        cb.showText(leading1);

        x += new Chunk(leading1, fontMedium10Pt).getWidthPoint();

        cb.setCMYKColorFillF(1f, 0f, 0f, 0f);
        cb.setTextMatrix(1, 0, 0, 1, x, y);
        cb.showText(leading2);

        cb.endText();
        cb.restoreState()
Run Code Online (Sandbox Code Playgroud)

Bru*_*gie 5

您已选择在最低级别使用PDF语法添加文本.这意味着您需要计算要添加到文档中的每一段文本的长度,然后通过以不同的showText()顺序添加文本来分发文本,确保正确调整坐标.

这很难.

但是,您还选择使用iText,这意味着您可以让iText为您完成此项工作.例如:如果要在特定矩形内添加一段文本,则可以定义一个ColumnText对象,定义一个Rectangle,并将文本添加为Paragraphgo()!

PdfContentByte cb = writer.getDirectContent();
ColumnText ct = new ColumnText(cb);
ct.setSimpleColumn(new Rectangle(36, 600, 200, 800));
ct.addElement(new Paragraph("I want to add this text in a rectangle defined by the coordinates llx = 36, lly = 600, urx = 200, ury = 800"));
int status = ct.go();
Run Code Online (Sandbox Code Playgroud)

现在,文本"I want to add this text in a rectangle defined by the coordinates llx = 36, lly = 600, urx = 200, ury = 800"将被包裹在由坐标llx = 36,lly = 600,urx = 200,ury = 800定义的矩形区域内.该status变量将指示文本是否完全呈现(或者如果它没有不完全适合.

进一步阅读:

如果这个例子对你有帮助,请帮助我理解我能做些什么来确保其他开发人员不会犯同样的错误,并解释是什么让你编写你编写的代码而不是ColumnText先尝试.您的信息将帮助我写一本更好的书.