使用PdfStamper添加具有仿射变换的图像



我正在使用PdfStamper getOverContent(),这样我就可以使用Identity类型的AffineTransform将图像添加到输出PDF文件中。

    PdfContentByte content = stamper.getOverContent(1);
    data.image.setAbsolutePosition(desc.X,desc.Y);
    content.addImage(data.image,desc.transform);
    //content.addImage(data.image);

如果我使用没有转换的注释行,它可以完美地将图像添加到生成的PDF中,但使用AffineTransform(setToIdentity())它不会显示。

有人能帮我吗?我打算使用更复杂的转换,但身份应该首先工作。。。


EDIT(从无效答案复制)

我删除了对setAbsolutePosition的调用,并使用setToIdentity()作为唯一的转换,图像没有显示。。。然后添加setToTranslation(X,Y),其中X和Y与成功案例中使用的值相同,在成功案例中,我没有将变换作为第二个参数,但它仍然没有显示图像。有没有一个例子将AffineTransform作为PdfContentByte addImage()调用的参数,并将AffinetTransform作为参数?我买了你的书,但一本也买不起。

我已经检查了您的问题,我非常确信您的图像已经添加。但是:你看不到它,因为图像的尺寸是1个用户单位乘1个用户单元。

我举了一个例子来告诉你如何解决这个问题:AddImageAffineTransform

public void manipulatePdf(String src, String dest) throws IOException, DocumentException {
    PdfReader reader = new PdfReader(src);
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
    Image image = Image.getInstance(IMG);
    AffineTransform at = AffineTransform.getTranslateInstance(36, 300);
    at.concatenate(AffineTransform.getScaleInstance(image.getScaledWidth(), image.getScaledHeight()));
    PdfContentByte canvas = stamper.getOverContent(1);
    canvas.addImage(image, at);
    stamper.close();
    reader.close();
}

在这个例子中,我从一个翻译开始:从左边界开始36个用户单位,从底部开始300个用户单位。如果我用这个变换添加图像,我会在这些坐标添加图像,但它太小了,肉眼看不见。

为了确保图像可见,我连接了一个缩放变换,将图像缩放到X方向的宽度和Y方向的高度。

最新更新