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

how to get pdf image orientation using itextsharp

我正在编辑 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的图像方向。这样我就可以将图像调整到原来的方向。谢谢

有两个相关因素决定图像的有效旋转,绘制图像时的当前变换矩阵(它也固定图像的尺寸)和页面旋转。

您可以在您参考的代码中确定这些值,如下所示:

...

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,同时可能已修复错误。