我一直在尝试使用Itext 7在pdf中添加水印。水印必须在每页的左侧,并且应该是垂直的。下图所示:
它应该位于页面左侧,而不是居中。
我尝试了以下代码,但是我尝试尝试的任何角度都不适合我-
File mergedDoc = new File(mergedFileName + ".pdf");
PdfDocument pdfDoc = new PdfDocument(new PdfWriter(mergedDoc));
Document document = new Document(pdfDoc);
PdfFont font = PdfFontFactory.createFont(FontProgramFactory.createFont(FontConstants.HELVETICA));
Paragraph verticalWatermark = new Paragraph("My vertical watermark").setFont(font).setFontSize(30);
for (int i = 1 + pdfDoc.getNumberOfPages(); i <= k; i++) {
PdfPage page = pdfDoc.getPage(i);
page.setIgnorePageRotationForContent(false);
over = new PdfCanvas(pdfDoc.getPage(i));
over.saveState();
over.setExtGState(gs1);
document.showTextAligned(verticalWatermark, 30f, 25f, i, TextAlignment.LEFT, VerticalAlignment.BOTTOM, 90);
over.restoreState();
pdfDoc.close();
document.close();
}
任何帮助将不胜感激。
答案 0 :(得分:0)
您的代码在很多地方都是错误的。
saveState()
上的restoreState()
/ PdfCanvas
这样的低级操作与高级Document
类的showTextAligned()
方法结合起来。 / li>
1 + pdfDoc.getNumberOfPages()
开始计数,这很奇怪。您的代码示例不是SSCCE。没有人可以运行它,因为没有人可以知道诸如k
和gs1
之类的变量。不提供SSCCE通常被解释为“我在问一个问题,但是我对获得答案不感兴趣。” 我已经完成了iText 7快速入门教程,并在页面左侧添加了垂直水印:
这是我使用的代码:
PdfReader reader = new PdfReader(src);
PdfWriter writer = new PdfWriter(dest);
PdfDocument pdf = new PdfDocument(reader, writer);
Document document = new Document(pdf);
Paragraph p = new Paragraph("My vertical watermark");
for (int i = 1; i <= pdf.getNumberOfPages(); i++) {
document.showTextAligned(
p, 36, 72, i, TextAlignment.LEFT, VerticalAlignment.BOTTOM,
(float)Math.PI / 2);
}
document.close();
如您所见:不需要PdfCanvas
,它是Math.PI / 2
弧度而不是90
度。