使用PdfStamper添加AffineTransform

时间:2015-12-06 12:47:53

标签: image-processing itext affinetransform pdfstamper

我正在使用PdfStamper getOverContent(),因此我可以使用AffineTransform of Identity类型将图像添加到输出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())它不会显示。

有人可以帮我解决这个问题吗?我打算使用更复杂的转换,但Identity应该先工作......

编辑(从无效答案中复制)

我删除了对setAbsolutePosition的调用,并使用了setToIdentity()作为唯一的转换而图像未显示...然后添加了setToTranslation(X,Y),其中X和Y与成功案例中使用的值相同我不将转换作为第二个参数,但它仍然不显示图像。是否有一个例子将AffineTransform作为PdfContentByte addImage()调用的参数使用AffineTransform作为参数?我已经买了你的书,但不能鳍。

1 个答案:

答案 0 :(得分:2)

我已经检查了您的问题,我很确定您的图片已添加。但是:您无法看到它,因为图像的尺寸是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方向的高度。