4

这个pdf在我的 Firefox 上显示得非常好,但是在我使用5.4.4C#编写的程序中,我使用了 的方法,我得到了一个抓取的图像。itextsharpGetDrawingImagePdfImageObject

我通过以下方式使用了 itextsharp:

PdfReader reader = new PdfReader(filename);
PdfReaderContentParser parser = new PdfReaderContentParser(reader);
ImageRenderListener listener = new ImageRenderListener();
parser.ProcessContent(pageNumber, listener);

哪里ImageRenderListener是 a IRenderListener,它RenderImage通过以下方式实现该方法:

    public void RenderImage(ImageRenderInfo renderInfo)
    {
        PdfImageObject image = renderInfo.GetImage();

        PdfObject obj = image.Get(PdfName.FILTER);

        PdfName filter = null;

        if (obj is PdfName)
        {
            filter = (PdfName)obj;
        }
        else if (obj is PdfArray)
        {
            foreach(var o in (PdfArray)obj)
            {
                if (o is PdfName)
                {
                    filter = o as PdfName;
                    break;
                }
            }
        }

        if (filter != null)
        {
            System.Drawing.Image drawingImage = image.GetDrawingImage();
...
...
...
        }

绘图图像存储在侦听器中,然后绘制到屏幕等......

我试图理解这一点,我知道过滤器是 a/CCITTFaxDecodestreamContentType不知何故是 a png,有人可以在这件事上启发我吗?

4

1 回答 1

3

以下视频解释了此问题的原因:将您的 PDF 文件分开。如果您不想观看完整的视频,请快进到第 24 分钟,然后在第 27 分钟之前观看所有内容。请注意第 27 分钟的结论:通常,PDF 中没有图像。(这有点夸张,但如果你理解了 3 分钟的解释,你就会明白 Mark Stephens 的意思。)

如果您想详细了解为什么 CCITTFaxDecode 更改为 PNG,请阅读我的书的第 10 章。

于 2013-10-07T07:45:07.100 回答