在contentStream之前绘制表格时消失了 - 带有Boxable

时间:2017-09-07 09:18:56

标签: java pdfbox boxable

我是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();

表格消失,只显示文字。不知道如何解决这个问题。有人可以帮我这个。我现在已经有一段时间了解这个问题了。 提前谢谢

1 个答案:

答案 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);

代替。