通过itext pdf库进行图像旋转

时间:2015-05-28 05:50:48

标签: java pdf-generation itext

我无法通过在java程序中使用itext pdf库从中心或任何固定点旋转图像。当我旋转图像时,它的x和y坐标会发生变化。在这方面请帮助我。

   Image pdfImage=Image.getInstance("assets/product.png");
    pdfImage.setAlignment(Element.ALIGN_CENTER);
    pdfImage.setRotationDegrees(30);
    document.add(pdfImage);
   pdfImage.setRotationDegrees(140);
    document.add(pdfImage);

在上面的代码中,我无法判断旋转点。

提前致谢

1 个答案:

答案 0 :(得分:2)

使用setRotationDegrees()方法设置旋转时,使用图像的左下角作为旋转点旋转图像。如果您想要另一个旋转点,则需要使用低级功能来更改CTM。有关详细信息,请参阅PdfContentByte class中的不同addImage()方法:

  • addImage(Image image, AffineTransform transform)添加了Image,其中包含使用com.itextpdf.awt.geom.AffineTransform类定义的给定转化。
  • addImage(Image image, float a, float b, float c, float d, float e, float f)使用由Imageabc,{{定义的CTM添加d 1}}和e是3乘3矩阵的元素。例如。 fe定义了翻译。

有关坐标系和转换矩阵的更多详细信息,请阅读The ABC of PDF with iText。这本书尚未完成,但它是免费的,你需要的部分已经存在。

如果您想自己定义旋转,您需要了解PDF中的两个非常重要的概念:

  • 坐标系的原点由MediaBox定义。如果媒体框的定义类似于此f(这是一个A4页面)并且没有裁剪框,​​则坐标系的原点将是页面的左下角。右上角将具有坐标(x = 595; y = 842)。
  • 在PDF中,您不会旋转对象。而是旋转坐标系。将对象添加到旋转坐标系时,看起来好像是旋转了对象。

所有这一切都在ISO-32000-1和我开始写的ABC书中解释。