我是PDFBox和Boxable的新手,我希望有人可以帮助我!这个问题是关于这里提出的问题(参考:https://github.com/dhorions/boxable/issues/89) 在这里,flurinBoonea提供了一个小样本代码,将Text,Image和Table全部放在同一页面中。 我的问题是,如果我想创建一个表(它具有基于内部内容的动态高度)然后我需要在表后面放一些文本。我怎么能这样做?!? 在某处,我读到了绘制表格的时候,我使用类似的东西来获取下一个元素的YPosition,
float yPosition = table.draw()
然后将此位置用于下一个元素,但每当我在下面的代码段之前使用table.draw时,
PDPageContentStream contentStream = new PDPageContentStream(doc, page);
contentStream.beginText();
contentStream.setFont(font, 18);
contentStream.moveTextPositionByAmount(0, yPosition - 20);
contentStream.drawString("This is a test message");
contentStream.endText();
contentStream.close();
表格消失,只显示文字。不知道如何解决这个问题。有人可以帮我这个。我现在已经有一段时间了解这个问题了。 提前谢谢
答案 0 :(得分:1)
您可以使用
为相关网页创建其他内容流PDPageContentStream contentStream = new PDPageContentStream(doc, page);
此构造函数记录为:
/**
* Create a new PDPage content stream. This constructor overwrites all existing content streams
* of this page.
*
* @param document The document the page is part of.
* @param sourcePage The page to write the contents to.
* @throws IOException If there is an error writing to the page contents.
*/
public PDPageContentStream(PDDocument document, PDPage sourcePage) throws IOException
因此,在创建此内容流时,您会丢弃该页面上的所有内容。
每当您想要添加到现有内容时,请使用其他构造函数,例如
PDPageContentStream contentStream = new PDPageContentStream(doc, page, AppendMode.APPEND, true, true);
记录为
/**
* Create a new PDPage content stream.
*
* @param document The document the page is part of.
* @param sourcePage The page to write the contents to.
* @param appendContent Indicates whether content will be overwritten, appended or prepended.
* @param compress Tell if the content stream should compress the page contents.
* @param resetContext Tell if the graphic context should be reset. This is only relevant when
* the appendContent parameter is set to {@link AppendMode#APPEND}. You should use this when
* appending to an existing stream, because the existing stream may have changed graphic
* properties (e.g. scaling, rotation).
* @throws IOException If there is an error writing to the page contents.
*/
public PDPageContentStream(PDDocument document, PDPage sourcePage, AppendMode appendContent,
boolean compress, boolean resetContext) throws IOException
顺便说一下:你提到你是 PDFBox和Boxable的新手,所以我假设你使用的是当前版本,特别是PDFBox 2.0.x.如果由于某种原因您选择使用旧版本(例如1.8.x),则需要
PDPageContentStream contentStream = new PDPageContentStream(doc, page, true, true, true);
代替。