itextpdf戳记不起作用 import java.io.FileOutputStream; 导入com.itextpdf.text.Image; 导入com.itextpdf.text.pdf.PdfContentByte; 导入com.itextpdf.text.pdf.PdfReader; 导入com.itextpdf.text.pdf.PdfStamper; public类将水印图像添加到下一个现有PDF文件{ 公共静态void main(字符串[]args){ 试一试{ PdfReader reader=新的PdfReader(“7189D0930.pdf”); int n=reader.getNumberOfPages(); PdfStamper stamp=新PdfStamper(读卡器,新文件输出流(“NewPDFWithWatermarkImage.pdf”); int i=0; 下的PdfContentByte; Image img=Image.getInstance(“logo.png”); img.设置绝对位置(200400); 而(i

itextpdf戳记不起作用 import java.io.FileOutputStream; 导入com.itextpdf.text.Image; 导入com.itextpdf.text.pdf.PdfContentByte; 导入com.itextpdf.text.pdf.PdfReader; 导入com.itextpdf.text.pdf.PdfStamper; public类将水印图像添加到下一个现有PDF文件{ 公共静态void main(字符串[]args){ 试一试{ PdfReader reader=新的PdfReader(“7189D0930.pdf”); int n=reader.getNumberOfPages(); PdfStamper stamp=新PdfStamper(读卡器,新文件输出流(“NewPDFWithWatermarkImage.pdf”); int i=0; 下的PdfContentByte; Image img=Image.getInstance(“logo.png”); img.设置绝对位置(200400); 而(i,java,pdf,itext,Java,Pdf,Itext,我尝试过跟踪,但我没有足够的知识来完全理解Itext类中发生的事情。我只需要能够水印的pdf。我正在使用itext,因为我将不得不在500-600之间添加水印,并将对其进行修改,以便它可以在记事本文件中读取所有名称。简单地说,我运行程序,它生成pdf,但没有证据表明它可以打开.png文件,但由于任何原因,最终的pdf上没有 您正在现有内容下添加水印。如果现有内容是不透明的,你看不到它是很正常的(尽管它在那里) 您正在位置200400处添加水印。可能您正在页面可见区域之外添加水印。例如:页面可以定

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

您正在现有内容下添加水印。如果现有内容是不透明的,你看不到它是很正常的(尽管它在那里)


您正在位置200400处添加水印。可能您正在页面可见区域之外添加水印。例如:页面可以定义为矩形:[595,01190842]。这是一张A4纸的肖像画,但如果你在位置200400处添加水印,你就是在可见区域的左侧添加水印。它就在那里,但由于它在媒体盒外面,你看不到它

至于你对“它不起作用”的评论,请阅读

用这些词来表达一个问题是不礼貌的。 在这种情况下,它可能会起作用:添加水印时,文件大小会增加。主要问题是没有在正确的坐标处添加它

另请阅读:


您会明白,您的问题可能会以重复的形式结束。

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


如果内容不透明,您可以通过在*over*内容中添加带有alpha的徽标(使用带有alpha的徽标,我的意思是整个徽标是75%透明的,因此可以看到下面的内容)来找到一个有效的解决方案。

您知道我指的是一个具有二进制操作的特定命令。它做它想做或不想做的事。如果我明白为什么会搞砸,我就不会在这里了。原始pdf的内容是图像还是文本?我对一些白色区域“覆盖”屏幕的图像有问题watermark@PATRY看起来是导入到pdf中的cad。我可以突出显示那里的文本。我还注意到,如果我进一步缩小一秒钟,我可以在空白背景下看到水印。如果你把徽标放在内容过多而不是内容不足的地方,你能看到它吗?如果是这样,我在下面描述了一个解决方案。
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();
        }
    }
}