如何使用 itextsharp 获取 pdf 图像方向
how to get pdf image orientation using itextsharp
我正在编辑 pdf。客户希望pdf里面的图片可以调整大小和旋转。
所以我所做的是提取 pdf 中的图像以便能够处理图像,然后将其再次插入到 pdf 中(替换旧的)
这是我获取提取图像代码的代码
但是当我提取图像时图像旋转了 180 度
我什至使用免费的 Spire.PDF 来提取图像,但是 spire.pdf 的提取图像被旋转了 90 度。那么我怎样才能得到pdf的图像方向。这样我就可以将图像调整到原来的方向。谢谢
有两个相关因素决定图像的有效旋转,绘制图像时的当前变换矩阵(它也固定图像的尺寸)和页面旋转。
您可以在您参考的代码中确定这些值,如下所示:
...
public static Dictionary<string, System.Drawing.Image> ExtractImages(string filename)
{
var images = new Dictionary<string, System.Drawing.Image>();
using (var reader = new PdfReader(filename))
{
var parser = new PdfReaderContentParser(reader);
ImageRenderListener listener = null;
for (var i = 1; i <= reader.NumberOfPages; i++)
{
// v-- Determine clockwise rotation of page
Console.WriteLine("Page {1} is rotated by {0}°.\n", reader.GetPageRotation(i), i);
// ^-- Determine clockwise rotation of page
parser.ProcessContent(i, (listener = new ImageRenderListener()));
var index = 1;
[...]
}
return images;
}
}
...
public void RenderImage(ImageRenderInfo renderInfo)
{
// v-- Determine transformation matrix of image
Matrix ctm = renderInfo.GetImageCTM();
Console.WriteLine("Found image with transformation matrix:\n{0}\n", ctm);
// ^-- Determine transformation matrix of image
PdfImageObject image = renderInfo.GetImage();
PdfName filter = (PdfName)image.Get(PdfName.FILTER);
[...]
}
...
您的案例输出:
Page 1 is rotated by 270°.
Found image with transformation matrix:
792,0001 0 0
0 612 0
0 0 1
Found 1 images on page 1.
因此,变换矩阵显然只是将图像缩放到适当的尺寸而不旋转它,但页面本身被定义为旋转 270° 显示。
这符合我的观察。特别是与你所说的相反:
but when i extract the image to image is rotated 180 degree
我从你的代码中得到一张图像,它必须顺时针旋转 270° 才能直立。
如果您确实将图像旋转了 180°,则应检查您使用的 iTextSharp 版本。您引用的网站上的存档包含相当旧的版本 5.3.5.0,同时可能已修复错误。
我正在编辑 pdf。客户希望pdf里面的图片可以调整大小和旋转。
所以我所做的是提取 pdf 中的图像以便能够处理图像,然后将其再次插入到 pdf 中(替换旧的)
这是我获取提取图像代码的代码
但是当我提取图像时图像旋转了 180 度
我什至使用免费的 Spire.PDF 来提取图像,但是 spire.pdf 的提取图像被旋转了 90 度。那么我怎样才能得到pdf的图像方向。这样我就可以将图像调整到原来的方向。谢谢
有两个相关因素决定图像的有效旋转,绘制图像时的当前变换矩阵(它也固定图像的尺寸)和页面旋转。
您可以在您参考的代码中确定这些值,如下所示:
...
public static Dictionary<string, System.Drawing.Image> ExtractImages(string filename)
{
var images = new Dictionary<string, System.Drawing.Image>();
using (var reader = new PdfReader(filename))
{
var parser = new PdfReaderContentParser(reader);
ImageRenderListener listener = null;
for (var i = 1; i <= reader.NumberOfPages; i++)
{
// v-- Determine clockwise rotation of page
Console.WriteLine("Page {1} is rotated by {0}°.\n", reader.GetPageRotation(i), i);
// ^-- Determine clockwise rotation of page
parser.ProcessContent(i, (listener = new ImageRenderListener()));
var index = 1;
[...]
}
return images;
}
}
...
public void RenderImage(ImageRenderInfo renderInfo)
{
// v-- Determine transformation matrix of image
Matrix ctm = renderInfo.GetImageCTM();
Console.WriteLine("Found image with transformation matrix:\n{0}\n", ctm);
// ^-- Determine transformation matrix of image
PdfImageObject image = renderInfo.GetImage();
PdfName filter = (PdfName)image.Get(PdfName.FILTER);
[...]
}
...
您的案例输出:
Page 1 is rotated by 270°.
Found image with transformation matrix:
792,0001 0 0
0 612 0
0 0 1
Found 1 images on page 1.
因此,变换矩阵显然只是将图像缩放到适当的尺寸而不旋转它,但页面本身被定义为旋转 270° 显示。
这符合我的观察。特别是与你所说的相反:
but when i extract the image to image is rotated 180 degree
我从你的代码中得到一张图像,它必须顺时针旋转 270° 才能直立。
如果您确实将图像旋转了 180°,则应检查您使用的 iTextSharp 版本。您引用的网站上的存档包含相当旧的版本 5.3.5.0,同时可能已修复错误。