我正在Servletoutputstream上创建PDF。
在将水印导出为PDF之前,我需要直接将其添加到流中。
是否有任何解决方案可以在不保存PDF的情况下即时添加水印或从流中获取文档对象。
最佳答案
注入器的答案是正确的(除了他使用com.lowagie
类的事实,这告诉我他正在使用an obsolete version of iText),但他建议分两步创建最终的PDF。首先创建不带水印的PDF,然后用水印创建。
正如mkl在他的评论中指出的那样,如果您使用页面事件,则可以一次性创建PDF。我写了一个小的Watermarking示例。
这是页面事件类:
public class Watermark extends PdfPageEventHelper {
protected Phrase watermark = new Phrase("WATERMARK", new Font(FontFamily.HELVETICA, 60, Font.NORMAL, BaseColor.LIGHT_GRAY));
@Override
public void onEndPage(PdfWriter writer, Document document) {
PdfContentByte canvas = writer.getDirectContentUnder();
ColumnText.showTextAligned(canvas, Element.ALIGN_CENTER, watermark, 298, 421, 45);
}
}
将此事件添加到
PdfWriter
中,如下所示:PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(dest));
writer.setPageEvent(new Watermark());
从现在开始,每次页面完成时,都会将
Watermark
事件类中定义的文本添加到现有内容下。