Itext 7.0.2:Image元素支持逆时针旋转,能否实现顺时针旋转?
实现iText Image顺时针旋转的方法
当然可以对同一张图片实现顺时针旋转!iText的Image类的旋转参数其实支持正负值区分方向:
- 正数代表逆时针旋转
- 负数代表顺时针旋转
你可以通过两种直观的方式设置旋转:
- 使用角度值的
setRotationDegrees()方法(无需弧度转换,更易理解) - 使用弧度值的
setRotation()方法
结合你的代码示例修改如下:
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); // 示例1:顺时针旋转90度(推荐用角度值,语义更清晰) img.setRotationDegrees(-90); // 示例2:顺时针旋转90度(用弧度值,Math.PI/2对应90度) // img.setRotation(-Math.PI/2); canvas.add(img);
额外技巧:自定义旋转锚点
默认旋转是基于图片左下角(也就是你设置的固定位置锚点),如果想让图片以自身中心顺时针旋转,可以手动计算中心坐标后指定锚点:
// 计算图片中心坐标(固定位置X + 图片宽度/2,固定位置Y + 图片高度/2) float centerX = 30.785828 + 525.58203 / 2; float centerY = 34.66619 + 737.0079 / 2; // 基于中心顺时针旋转90度 img.setRotationAngle(Math.toRadians(-90), centerX, centerY);
内容的提问来源于stack exchange,提问作者Ap Tsi
相关产品推荐
相关产品推荐

