java - 如何使用 itextsharp 将长文本定位并换行到下一行?

标签 java pdf-generation itext

我正在使用 itextsharp 生成 PDF 文件,

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

问题是当前导1长度增加时,它会影响前导2并被修剪。

但是如果前导1中的字符数增加,我想在下一行打印前导1和前导2。

基本上,leading2 被硬编码为 = YOU 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()

最佳答案

您已选择在最低级别使用 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();

现在文本"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第一的。您的信息会对我有帮助in writing a better book.

关于java - 如何使用 itextsharp 将长文本定位并换行到下一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27571119/

相关文章:

Java-如何通过包含换行符的属性值进行选择

ruby - Prawn PDF表格混合格式

Python ReportLab——表格对于页面来说太宽

java - 使用单元格引用检查空白单元格

java - 每个内部类都需要一个封闭实例是真的吗?

fonts - 如果我们在 itext 中使用 ttf 文件,是否需要拥有字体许可证?

java - 使用 iText 创建有角度的列标题

java - 带有 iText 的 pdfCalligraph 插件支持古吉拉特语

java - 带有线程池的嵌套循环

c# - iTextSharp。如何从 AcroFields 获取特定类型?像 PushButtonField、RadioCheckField 等