Java Itext 7.0.2图像的顺时针旋转

Java Itext 7.0.2图像的顺时针旋转,java,image,itext,itext7,Java,Image,Itext,Itext7,Image元素(com.itextpdf.layout.element.Image)支持逆时针旋转。 是否可以对同一图像进行顺时针旋转 PdfPage page = iTextPdfDoc.getLastPage(); PdfCanvas pdfCanvas = new PdfCanvas(page.newContentStreamAfter(), page.getResources(), iTextPdfDoc); Canvas canvas = new Canvas(pdfCanvas, i

Image元素(com.itextpdf.layout.element.Image)支持逆时针旋转。 是否可以对同一图像进行顺时针旋转

PdfPage page = iTextPdfDoc.getLastPage();
PdfCanvas pdfCanvas = new PdfCanvas(page.newContentStreamAfter(), page.getResources(), iTextPdfDoc);
Canvas canvas = new Canvas(pdfCanvas, iTextPdfDoc, page.getPageSize());
Image img = new Image(ImageDataFactory.create(path));
img.scaleAbsolute(525.58203, 737.0079)
img.setFixedPosition(30.785828, 34.66619)

// The following block of code does not affect the center point of rotation.
// I tried a lot of different values for rotation point. No change!
{
  img.setProperty(Property.ROTATION_POINT_X, 30.785828);
  img.setProperty(Property.ROTATION_POINT_Y, 34.66619);
}

img.setProperty(Property.ROTATION_ANGLE, Math.toRadians(90)); //img.setRotationAngle(Math.toRadians(90));
canvas.add(img);
更新:

这是图像逆时针旋转90度时发生的情况。

这是使用逆时针-90或270度的图像所发生的情况。

关于:

img.setRotationAngle(Math.toRadians(270));
为什么你要为一个只需要一个函数就可以完成的事情创建两个函数,从而使事情变得复杂

(后一句话受到了文卡特·苏布拉曼尼亚姆(Venkat Subramaniam)今早在印度开发商峰会上的主题演讲的影响。主题演讲的标题是:“不要远离复杂性,快跑!”

更新:


在您最初的评论之后(我也尝试了270。出于我不理解的原因,图像已顺时针旋转,但它位于pdf页面底部),我制作了以下图像:


在你的第二条评论中,你写道:你是对的!这意味着我必须再次设置位置,以便将图像显示到pdf页面中。如何移动图像,使其移动到页面底部上方


这可能取决于您首先如何定位图像。您目前正在使用什么?您使用的是
setFixedPosition()
还是
setRelativePosition()
方法?或者您只是将图像添加到文档中而没有定义位置?

我发现问题是由于:

img.scaleAbsolute(525.58203, 737.0079)
该线缩放要安装到容器中的图像

width = 525.58203 and height = 737.0079.
下面的代码块就是我需要的

PdfPage page = iTextPdfDoc.getLastPage();
PdfCanvas pdfCanvas = new PdfCanvas(page.newContentStreamAfter(), 
page.getResources(), iTextPdfDoc);
Canvas canvas = new Canvas(pdfCanvas, iTextPdfDoc, page.getPageSize());
Image img = new Image(ImageDataFactory.create(path));

float width = img.getXObject().getWidth();
float widthContainer = 525.58203;
float heightContainer = 737.0079;
float horizontalScaling = widthContainer / width;

img.scaleAbsolute(widthContainer, heightContainer);

img.setProperty(Property.ROTATION_ANGLE, Math.toRadians(270));
img.setFixedPosition(imageLlx, imageLly + width * horizontalScaling);

canvas.add(img);
结果如下:

我也试过270。出于我不理解的原因,图像已顺时针旋转,但它位于pdf页面底部。如果图像位于页面底部,则顺时针旋转90%将图像定位在页面底部是有意义的。你为什么认为那是错的?你是对的!这意味着我必须再次设置位置,以便将图像显示到pdf页面中。如何移动图像,使其移动到页面底部上方?我使用的是setFixedPosition()。它应该类似于setFixedPosition(x,y)。x和以前一样。y应该是图像对象的宽度。是的,如果从头开始创建PDF,则页面底部的默认y坐标为0,y轴向上。那么
Math.toRadians(-90)
呢?