我可以插入这样的简单文本:
document = new PDDocument();
page = new PDPage(PDPage.PAGE_SIZE_A4);
document.addPage(page);
PDPageContentStream content = new PDPageContentStream(document, page);
content.beginText();
content.moveTextPositionByAmount (10 , 10);
content.drawString ("test text");
content.endText();
content.close();
但是如何使用 width 属性创建类似于 HTML 的段落呢?
<p style="width:200px;">test text</p>
Warning:此答案适用于旧版本的 PDFBox,并依赖于已弃用的功能。请参阅下面的评论了解更多详细信息。
根据这个答案 https://stackoverflow.com/a/7598157/520779不可能在某些文本中插入换行符并让 PDF 正确显示它(无论使用 PDFBox 还是其他东西),所以我相信自动换行某些文本以适应某些宽度也可能是它无法自动执行的操作。 (此外,有很多方法可以对文本进行换行 - 仅整个单词、将其分成较小的部分等)
这个答案 https://stackoverflow.com/a/6531362/520779另一个问题(关于将字符串居中)给出了一些关于如何自己执行此操作的指示。假设你写了一个函数possibleWrapPoints(String):int[]
要列出文本中可能发生自动换行的所有点(不包括“零”,包括“文本长度”),一种可能的解决方案可能是:
PDFont font = PDType1Font.HELVETICA_BOLD; // Or whatever font you want.
int fontSize = 16; // Or whatever font size you want.
int paragraphWidth = 200;
String text = "test text";
int start = 0;
int end = 0;
int height = 10;
for ( int i : possibleWrapPoints(text) ) {
float width = font.getStringWidth(text.substring(start,i)) / 1000 * fontSize;
if ( start < end && width > paragraphWidth ) {
// Draw partial text and increase height
content.moveTextPositionByAmount(10 , height);
content.drawString(text.substring(start,end));
height += font.getFontDescriptor().getFontBoundingBox().getHeight() / 1000 * fontSize;
start = end;
}
end = i;
}
// Last piece of text
content.moveTextPositionByAmount(10 , height);
content.drawString(text.substring(start));
一个例子possibleWrapPoints
,允许在不属于单词的任何点进行换行(参考 https://stackoverflow.com/a/2206432/520779), 可能:
int[] possibleWrapPoints(String text) {
String[] split = text.split("(?<=\\W)");
int[] ret = new int[split.length];
ret[0] = split[0].length();
for ( int i = 1 ; i < split.length ; i++ )
ret[i] = ret[i-1] + split[i].length();
return ret;
}
Update:一些附加信息:
PDF 文件格式被设计为在不同情况下看起来相同,您所请求的功能在 PDF 编辑器/创建器中有意义,但在 PDF 文件中则不然per se。因此,大多数“低级”工具倾向于专注于处理文件格式本身,而忽略类似的内容。
更高级别的工具 OTOH 通常具有进行此转换的方法。一个例子是Platypus http://www.reportlab.com/apis/reportlab/dev/platypus.html#(不过对于 Python 来说)do有创建段落的简单方法,并且依赖于较低级别报告实验室 http://www.reportlab.com/函数来进行实际的 PDF 渲染。我不知道 PDFBox 有类似的工具,但是这个帖子 https://blogs.oracle.com/chrisf/entry/converting_html_to_pdf_using给出了一些关于如何使用免费工具在 Java 环境中将 HTML 内容转换为 PDF 的提示。我自己还没有尝试过,但我在这里发布是因为它可能有用(以防我上面的手工尝试还不够)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)