我正在编辑pdf。客户希望pdf内的图像调整大小并旋转。
所以我所做的就是提取pdf中的图像以便能够操作图像然后再将其插入pdf(替换旧图像)
这里是我获得用于提取图像的代码的代码
但是当我将图像提取到图像时,旋转180度
我甚至使用免费的Spire.PDF来提取图像,但是spire.pdf的提取图像旋转了90度。那么如何才能获得pdf的图像方向。这样我就可以使图像达到原始方向。谢谢
答案 0 :(得分:2)
决定图像有效旋转的两个相关因素,即绘制图像时的当前变换矩阵(也固定图像的尺寸)和页面旋转。
您可以在所引用的代码中确定这些值,如下所示:
...
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°。
这符合我的观察。特别是与你所说的相反:
但是当我将图像提取到图像时,旋转180度
我从你的代码中得到一个图像,它必须顺时针旋转270°直立。
如果确实将图像旋转了180°,则应检查所使用的iTextSharp的版本。您引用的网站上的存档包含一个相当旧的版本,5.3.5.0,并且在此期间可能已修复了错误。