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都没有。
答案 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%透明,从而可以看到下面的内容。