提问者:小点点

Itext 7-使用文本的垂直水印


我一直在尝试使用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();
}

任何帮助将不胜感激。


共1个答案

匿名用户

您的代码在很多地方都是错误的。

  • 您可以将PdfCanvas上的saveState()/restoreState()等低级操作与高级Document类'showText对齐()方法结合起来。
  • 您从1 pdfDoc. getNumberOfPages()开始计数,这很奇怪。您的代码示例不是SSCCE。除了您之外,没有人可以运行它,因为除了您之外,没有人知道诸如kgs1之类的变量是关于什么的。不提供SSCCE通常被解释为“我在问问题,但我对得到答案不感兴趣。”
  • 您正在定义一个以度数为单位的值,其中以弧度为单位的值是预期的,请参阅API文档:showText对齐(段落p,浮点x,浮点y,int pageNumber,文本对齐,垂直对齐,浮点对齐)

我已经学习了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度。