如何跟踪PDPageContentStream的文本输出的位置?

我使用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必须跟踪类似的值。 有没有办法访问这个值?

谢谢。

创建一个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减去该位置。 当heightCounter小于您移动文本位置的位置时,则创建一个新页面。