我正在使用 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
,将文本添加为 Paragraph
和go()
!
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
变量将指示文本是否已完全呈现(或者是否完全适合)。
进一步阅读:
- How to fit a String inside a rectangle?
- How can I truncate text within a bounding box?
- Separating redundant code from pdf generator function
- ...
如果这个示例对您有帮助,请帮助我了解我可以做些什么来确保其他开发人员不会犯与您相同的错误,并解释是什么让您编写了自己编写的代码而不是尝试 ColumnText
第一的。您的信息会对我有帮助in writing a better book.
关于java - 如何使用 itextsharp 将长文本定位并换行到下一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27571119/