Я добавляю водяные знаки на существующий PDF, используя класс iText PdfStamper
. И я хочу, чтобы эти водяные знаки были включены или выключены, поэтому я использую класс 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 Reader (версия 10), я вижу, что «Начальное состояние: Print» свойство остается в «Отпечатки Когда Visible» в то время как он должен «Всегда печатать».
Я также попытался создать слои на новом документе PDF и там работает setPrint()
.
Что я делаю неправильно?
Этого решения достаточно для меня, спасибо. Во всяком случае, мне пришлось немного адаптировать ваш код для вращения: 'if (r == 0) content.addTemplate (страница, 1, 0, 0, 1, 0, 0); else if (r == 90) \t content.addTemplate (страница, 0, -1, 1, 0, 0, pageSizeS.getHeight()); else if (r == 180) content.addTemplate (страница, -1, 0, 0, -1, pageSizeS.getHeight(), pageSizeS.getWidth()); else if (r == 270) content.addTemplate (страница, 0, 1, -1, 0, pageSizeS.getWidth(), 0); ' –