Itext 7.0.2 图像顺时针旋转

问题描述 投票:0回答:4

图像元素(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 度的图像所发生的情况。 enter image description here

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

java image itext itext7
4个回答
1
投票

关于:

img.setRotationAngle(Math.toRadians(270));

为什么要通过为仅用一个函数即可完成的事情创建两个函数来使事情变得复杂?

(后面这句话是受今天早上大印度开发者峰会上 Venkat Subramaniam 主题演讲的影响。主题演讲的标题是:“不要远离复杂性,奔跑吧!”)

更新:

在您最初发表评论后(我也尝试使用270。由于我不明白的原因,图像已顺时针旋转,但它位于pdf页面的底部下方。),我制作了此图像:

enter image description here

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

这可能取决于您首先如何定位图像。您目前使用什么?您使用的是

setFixedPosition()
还是
setRelativePosition()
方法?或者您只是将图像添加到文档中而不定义位置?


1
投票

在页面中设置不同旋转的图像,显示的结果相同。

这是一个例子,您可以据此设置

x
,
y
.

itextpdf 版本 7.0.2

    public Image imageWithPosition(int pageNum, PdfPage pdfPage, ImageData imageData) {
        val pageHeight = pdfPage.getPageSizeWithRotation().getHeight();
        val pageWidth = pdfPage.getPageSizeWithRotation().getWidth();
        Image image = new Image(imageData).scaleAbsolute(pageWidth, pageHeight);
        float x = 0f;
        float y = 0f;
        val rotation = pdfPage.getRotation();
        // rotation 180, 270 need to handle specially
        if (rotation == 180) {
            y = pageHeight;
        } else if (rotation == 270) {
            y = pageWidth;
        }
        // set fixed position
        image.setFixedPosition(pageNum, x, y);
        // toRadians 
        image.setRotationAngle(Math.toRadians(pdfPage.getRotation()));
        return image;
    }

0
投票

我发现问题是由于:

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);

结果如下: enter image description here


0
投票

我也有这方面的问题。对我来说,似乎图像上使用的属性 image.setProperty(Property.ROTATION_POINT_X, value) 在图像之外不起作用,就像在前段落中一样。

© www.soinside.com 2019 - 2024. All rights reserved.