【发布时间】:2022-01-21 09:53:26
【问题描述】:
我需要从 PDF 中提取图像。 我知道有些图片旋转了 90 度(我用在线工具检查过)。
我正在使用此代码:
PdfRenderListener:
public class PdfRenderListener : IExtRenderListener
{
// other methods ...
public void RenderImage(ImageRenderInfo renderInfo)
{
try
{
var mtx = renderInfo.GetImageCTM();
var image = renderInfo.GetImage();
var fillColor = renderInfo.GetCurrentFillColor();
var color = Color.FromArgb(fillColor?.RGB ?? Color.Empty.ToArgb());
var fileType = image.GetFileType();
var extension = "." + fileType;
var bytes = image.GetImageAsBytes();
var height = mtx[Matrix.I22];
var width = mtx[Matrix.I11];
// rotated image
if (height == 0 && width == 0)
{
var h = Math.Abs(mtx[Matrix.I12]);
var w = Math.Abs(mtx[Matrix.I21]);
}
// save image
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
}
当我使用此代码保存图像时,旋转后的图像会失真。
我已阅读此帖子 iText 7 ImageRenderInfo Matrix contains negative height on Even number Pages 和 mkl 答案。
在当前的转换矩阵(mtx)中,我有这些值:
| 0 | 841.9 | 0 |
| -595.1 | 0 | 0 |
| 595.1 | 0 | 1 |
我知道图像旋转了 90 度。如何转换图像以获得正常图像?
【问题讨论】:
-
本质上,变换矩阵将图像旋转 90°,将旋转后的图像拉伸到 595.1×841.9 单位,并将拉伸后的图像移动到第一象限。要获得类似的图像,您必须使用一些位图图像处理 API 应用相同的步骤。因此,您可能应该将问题的焦点转移到如何执行这些位图图像处理步骤。
-
您好,您是否有示例 PDF 来重现您所面临的行为?您是否尝试过 iText pdf2Data (pdf2data.online)?正如@mkl 提到的,如果您想使用低级 iText 核心功能,您需要自己进行图像旋转,您可以在这里找到一些食谱:stackoverflow.com/questions/8639567/java-rotating-images