如何使用itextsharp获取pdf图像方向

时间:2016-09-08 11:21:56

标签: c# image itext

我正在编辑pdf。客户希望pdf内的图像调整大小并旋转。

所以我所做的就是提取pdf中的图像以便能够操作图像然后再将其插入pdf(替换旧图像)

这里是我获得用于提取图像的代码的代码

https://psycodedeveloper.wordpress.com/2013/01/10/how-to-extract-images-from-pdf-files-using-c-and-itextsharp/

但是当我将图像提取到图像时,旋转180度

我甚至使用免费的Spire.PDF来提取图像,但是spire.pdf的提取图像旋转了90度。那么如何才能获得pdf的图像方向。这样我就可以使图像达到原始方向。谢谢

1 个答案:

答案 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,并且在此期间可能已修复了错误。