现在使用aspose pdf for java22.8版本
问题:
我们看ASPOSE 都是基于"左下角" 或者"右上角"去做计算,去插入"章"的图片,但是扫描件图片,生成的PDF,由于图片扫描的问题,会转置90度调整PDF,导致"盖章"的图片位置不对。例如:A4纸张,扫描图片时放横了,然后生成PDF后,用PDF页面,又转90度(把它转正),请问有没有好的方式方法来解决这个问题?
DEMO如下:
// 加载PDF文档
Document pdfDocument = new Document(inputStream);
// 获取第一页 (索引从1开始)
Page page = pdfDocument.getPages().get_Item(1);
page.getResources().getImages().add(imageInputStream);
double imageWidth = 86;
double imageHeight = 50;
// 设置图片在左下角的位置(距离左边缘和下边缘的偏移量)
double leftMargin = 5; // 距离左边缘点
double bottomMargin = 5; // 距离下边缘点
// 计算图片显示区域的矩形边界
double lowerLeftX = leftMargin;
double lowerLeftY = bottomMargin;
double upperRightX = leftMargin + imageWidth;
double upperRightY = bottomMargin + imageHeight;
// 使用图形操作符放置图片
page.getContents().add(new GSave()); // 保存当前图形状态
// 创建变换矩阵将图片映射到指定矩形区域
Rectangle rectangle = new Rectangle(lowerLeftX, lowerLeftY, upperRightX, upperRightY);
Matrix matrix = new Matrix(new double[] {
rectangle.getURX() - rectangle.getLLX(), // X方向缩放 = 矩形宽度
0, // 无倾斜
0, // 无倾斜
rectangle.getURY() - rectangle.getLLY(), // Y方向缩放 = 矩形高度
rectangle.getLLX(), // X方向平移 = 左边缘位置
rectangle.getLLY() // Y方向平移 = 下边缘位置
});
// 应用矩阵变换并绘制图片
page.getContents().add(new ConcatenateMatrix(matrix));
XImage ximage = page.getResources().getImages().get_Item(
page.getResources().getImages().size()
);
page.getContents().add(new Do(ximage.getName()));
page.getContents().add(new GRestore()); // 恢复图形状态
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
pdfDocument.save(outputStream, SaveFormat.Pdf);
outputStream.close();
imageInputStream.close();