我正在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事件类中定义的文本添加到现有内容下。

09-30 16:53