我使用iText PdfStamper
類在現有的PDF上添加水印。我希望這些水印可以打開或關閉,所以我使用的類別爲PdfLayer
。
但我也希望這些水印在打印文件時始終可見:我正在使用函數PdfLayer.setPrint()
。 這是最後一步,不幸的是無法按預期工作。如何使PdfLayer.SetPrint與PdfStamper一起使用?
這裏是我的代碼:
PdfReader reader = new PdfReader("C:/Temp/input.pdf");
PdfStamper stamp = new PdfStamper(reader, new FileOutputStream("C:/Temp/output.pdf"));
PdfWriter writer = stamp.getWriter();
PdfLayer layer = new PdfLayer("Watermarks", writer);
layer.setOn(true);
layer.setPrint("Watermarks", true);
BaseFont bf = BaseFont.createFont();
PdfContentByte cb = stamp.getOverContent(1);
cb.beginText();
cb.setFontAndSize(bf, 18);
cb.beginLayer(layer);
cb.showTextAligned(Element.ALIGN_LEFT, "Watermark line 1", 50, 55, 0);
cb.showTextAligned(Element.ALIGN_LEFT, "Watermark line 2", 50, 40, 0);
cb.endLayer();
cb.endText();
stamp.close();
reader.close();
當我檢查從Adobe閱讀器(版本10)層的屬性,我看到了「初始狀態:打印」屬性停留在「打印時可見」,而它應該是「始終打印」。
我也嘗試在一個新的PDF文檔上創建圖層,並且有setPrint()
的作品。
我在做什麼錯?
這個解決方案對我來說已經足夠了,謝謝。無論如何,我必須適應你的代碼旋轉:if(r == 0)content.addTemplate(page,1,0,0,1,0,0); else if(r == 90)\t content.addTemplate(page,0,-1,1,0,pageSizeS.getHeight()); else if(r == 180)content.addTemplate(page,-1,0,0,-1,pageSizeS.getHeight(),pageSizeS.getWidth()); else if(r == 270)content.addTemplate(page,0,1,-1,0,pageSizeS.getWidth(),0);' – 2014-10-30 08:23:28