java - 不知道如何使用 iText (Java) 在 pdf 文件中创建居中的 "image + text"水印

标签 java jakarta-ee itext watermark

我正在使用 iText 库,并且我正在尝试在页面底部添加水印。水印很简单,它必须居中,左侧有图像,右侧有文本。

此时,我已经有了 png 格式的图像和文本。我可以计算要放置图像的位置(居中),计算页面大小和图像大小,但现在我想包含文本 AS 文本(更好的易读性等)。

我可以将图像和文本嵌入到某个组件中,然后像我现在所做的那样计算位置吗?其他解决方案或想法?

这是我的实际代码:

try {
        PdfReader reader = new PdfReader("example.pdf");
        int numPages = reader.getNumberOfPages();
        PdfStamper stamp = new PdfStamper(reader, new FileOutputStream("pdfWithWatermark.pdf"));

        int i = 0;
        Image watermark = Image.getInstance("watermark.png");
        PdfContentByte addMark;

        while (i < numPages) {
            i++;
            float x = reader.getPageSizeWithRotation(i).getWidth() - watermark.getWidth();
            watermark.setAbsolutePosition(x/2, 15);
            addMark = stamp.getUnderContent(i);
            addMark.addImage(watermark);
        }
        stamp.close();

    }
    catch (Exception i1) {
        logger.info("Exception adding watermark.");
        i1.printStackTrace();
    }

提前谢谢您!

最佳答案

你最好检查一下:

import com.lowagie.text.*;
import java.io.*;
import com.lowagie.text.pdf.*;
import java.util.*;

class  pdfWatermark
{
  public static void main(String args[])
  {  
    try 
    {
      PdfReader reader = new PdfReader("text.pdf");
      int n = reader.getNumberOfPages();

      // Create a stamper that will copy the document to a new file
      PdfStamper stamp = new PdfStamper(reader, 
        new FileOutputStream("text1.pdf"));
      int i = 1;
      PdfContentByte under;
      PdfContentByte over;

      Image img = Image.getInstance("watermark.jpg");
      BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, 
        BaseFont.WINANSI, BaseFont.EMBEDDED);

      img.setAbsolutePosition(200, 400);

      while (i < n) 
      {
        // Watermark under the existing page
        under = stamp.getUnderContent(i);
        under.addImage(img);

        // Text over the existing page
        over = stamp.getOverContent(i);
        over.beginText();
        over.setFontAndSize(bf, 18);
        over.showText("page " + i);
        over.endText();

        i++;
      }

      stamp.close();

    }
    catch (Exception de) 
    {}
  }
}

( source )

关于java - 不知道如何使用 iText (Java) 在 pdf 文件中创建居中的 "image + text"水印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7646205/

相关文章:

java - 访问实例字段比声明局部变量花费更长的时间?

powershell - iTextSharp 在 PowerShell 中合并 PDF 文件

c# - 从 GridView 输出数据到 PDF 有编码问题

jakarta-ee - ColdFusion 9 多服务器设置 : setting application name prevents session replication

jakarta-ee - Dropwizard 是否支持 Servlet 3 异步 Servlet?

java - 使用 PDF 表单作为 Java UI

java - 在下载管理器中,如何从通知栏获取其 "cancel"状态?

java - 使用 JAXB 和 Stax 对 XML 文档进行验证

java - 两个 jar 之间的 Spring Boot 和 @ComponentScan

java - Wildfly activemq 集成 - 消息子系统