我正在使用 Java 将输出写入PDDocument
,然后将该文档附加到现有文档,然后再将其提供给客户。
大部分都运行良好。我在写入时只有一个小问题试图处理内容溢出PDDocument
。
我想跟踪文本插入到文档中的位置,以便当“光标”超过某个点时,我将创建一个新页面,将其添加到文档中,创建一个新的内容流,并照常继续。
这是一些代码,显示了我想要做的事情:
// big try block
PDDocument doc = new PDDocument();
PDPage page = new PDPage();
doc.addPage(page);
PDPageContentStream content = new PDPageContentStream(doc, page);
int fontSize = 12;
content.beginText();
content.setFont(...);
content.moveTextPositionByAmount(margin, pageHeight-margin);
for ( each element in a collection of values ) {
content.moveTextPositionByAmount(0, -fontSize); // only moves down in document
// at this point, check if past the end of page, if so add a new page
if (content.getTextYPosition(...) < margin) { // wishful thinking, doesn't exist
content.endText();
content.close();
page = new PDPage();
doc.addPage(page);
content = new PDPageContentStream(doc, page);
content.beginText();
content.setFont(...);
content.moveTextPositionByAmount(margin, pageHeight-(margin+fontSize));
}
content.drawString(...);
}
content.endText();
content.close();
重要的是content.getTextYPosition()
。它实际上并不存在,但我确信PDPageContentStream
必须跟踪类似的值。有什么办法可以访问这个值吗?
Thanks.
创建一个heightCounter
跟踪文本位置移动距离的变量。它的初始值可以是你的起始 Y 位置。
PDRectangle mediabox = page.findMediaBox();
float margin = 72;
float width = mediabox.getWidth() - 2 * margin;
float startX = mediabox.getLowerLeftX() + margin;
float startY = mediabox.getUpperRightY() - margin;
float heightCounter = startY;
每次移动文本位置时,请从您的文本位置中减去该位置heightCounter
. When heightCounter
小于您要移动文本位置的位置,然后创建一个新页面。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)