我一直在尝试使用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();
}
任何帮助将不胜感激。
您的代码在很多地方都是错误的。
PdfCanvas
上的saveState()
/restoreState()
等低级操作与高级Document
类'showText对齐()
方法结合起来。1 pdfDoc. getNumberOfPages()
开始计数,这很奇怪。您的代码示例不是SSCCE。除了您之外,没有人可以运行它,因为除了您之外,没有人知道诸如k
和gs1
之类的变量是关于什么的。不提供SSCCE通常被解释为“我在问问题,但我对得到答案不感兴趣。”我已经学习了iText 7 Jump-Start教程,并且在页面左侧添加了垂直水印:
这是我使用的代码:
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
度。