itextpdf邮票无效

时间:2014-02-25 15:02:12

标签: java pdf itext

import java.io.FileOutputStream;

import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;

public class AddWatermarkImageToAnExistingPDFFile {
    public static void main(String[] args) {
        try {
            PdfReader reader = new PdfReader("7189D0930.pdf");
            int n = reader.getNumberOfPages();
            PdfStamper stamp = new PdfStamper(reader, new FileOutputStream("NewPDFWithWatermarkImage.pdf"));
            int i = 0;
            PdfContentByte under;
            Image img = Image.getInstance("logo.png");
            img.setAbsolutePosition(200, 400);
            while (i < n) {
              i++;
              under = stamp.getUnderContent(i);
              under.addImage(img);
            }
            stamp.close();
        }
        catch (Exception de) {
            de.printStackTrace();
        }
    }
}

我尝试过跟踪,但是我没有足够的知识来完全理解Itext类中发生的事情。我只需要能够为pdf添加水印。我正在使用itext,因为我将不得不为500-600添加水印并将其修改,以便它可以读取所有名称的记事本文件。简单地说,我运行它生成pdf的程序但没有证据表明它能够打开.png文件,但无论出于何种原因,最终的pdf都没有。

2 个答案:

答案 0 :(得分:0)

您正在现有内容下添加水印。如果现有内容不透明,那么您不会看到它是非常正常的(尽管它已经存在)。

您正在添加位置200,400处的水印。也许您在页面的可见区域外添加水印。例如:页面可以定义为矩形:[595,0,1190,842]。这是一张纵向的A4页面,但是如果你在200,400位置添加水印,则可以将其添加到可见区域的左侧。它在那里,但由于它在MediaBox之外,你不会看到它。

至于你关于&#34的评论,它没有工作&#34;,请阅读http://lowagie.com/doesntwork

使用这些词来表达问题并不是非常尊重。 在这种情况下,它可能 工作:当您添加水印时,您会看到文件大小增加。主要问题是您没有在正确的坐标处添加它。

另请阅读:

您了解您的问题可能会被重复关闭。

答案 1 :(得分:0)

您的代码本身就是在我的计算机上提供了预期的结果,这意味着问题可能出现在原始的pdf中。

如果内容不透明,您可以通过在* over *内容中添加带有alpha的徽标(通过带有alpha的徽标,我的意思是整个徽标是75%透明,从而可以看到下面的内容。