我正在使用 Pdfbox 使用 Java 生成 PDF 文件。问题是当我在文档中添加长文本内容时,它无法正常显示。只显示了一部分。这也是在一行中。
我希望文本在多行中。
我的代码如下:
PDPageContentStream pdfContent=new PDPageContentStream(pdfDocument, pdfPage, true, true);
pdfContent.beginText();
pdfContent.setFont(pdfFont, 11);
pdfContent.moveTextPositionByAmount(30,750);
pdfContent.drawString("I am trying to create a PDF file with a lot of text contents in the document. I am using PDFBox");
pdfContent.endText();
我的输出:
原文由 Ronald James 发布,翻译遵循 CC BY-SA 4.0 许可协议
添加到 Mark 的答案中,您可能想知道在哪里拆分长字符串。您可以为此使用
PDFont
方法getStringWidth
。把所有东西放在一起你会得到这样的东西(根据 PDFBox 版本有细微差别):
PDFBox 1.8.x
( BreakLongString.java 测试
testBreakString
对于 PDFBox 1.8.x)PDFBox 2.0.x
( BreakLongString.java 测试
testBreakString
PDFBox 2.0.x)结果
这看起来符合预期。
当然,还有很多改进要做,但这应该说明如何去做。
添加无条件换行符
在评论中,aleskv 问道:
通过首先在 ‘\n’ 字符处拆分字符串然后遍历拆分结果,可以轻松地将解决方案扩展为在换行符处无条件中断。
例如,如果不是上面的长字符串
你想用嵌入的换行符处理这个更长的字符串
你可以简单地更换
在上面的解决方案中
(来自 BreakLongString.java 测试
testBreakStringNL
)结果: