从c#中的PDF文件中提取图像(QR码图像)

时间:2018-04-09 20:48:35

标签: c# pdf itext

我已从Extract image from PDF using itextsharp获取此代码 但它不适合我,我猜因为iTextSharp版本。

以下是代码,蚂蚁在ImageRenderInfo imgRI = ImageRenderInfo.CreateForXObject(new Matrix(float.Parse(width), float.Parse(height)), (PRIndirectReference)obj, tg);

显示错误

说:

  

Argument1:无法从iTextSharp.text.pdf.parser.Matrix转换为   iTextSharp.text.pdf.parser.GraphicsState

    string imgPath = "";
    private void ExtractImage(string pdfFile)
    {
        PdfReader pdfReader = new PdfReader(@"");
        for (int pageNumber = 1; pageNumber <= pdfReader.NumberOfPages; pageNumber++)
        {
            PdfReader pdf = new PdfReader(pdfFile);
            PdfDictionary pg = pdf.GetPageN(pageNumber);
            PdfDictionary res = (PdfDictionary)PdfReader.GetPdfObject(pg.Get(PdfName.RESOURCES));
            PdfDictionary xobj = (PdfDictionary)PdfReader.GetPdfObject(res.Get(PdfName.XOBJECT));
            foreach (PdfName name in xobj.Keys)
            {
                PdfObject obj = xobj.Get(name);
                if (obj.IsIndirect())
                {
                    PdfDictionary tg = (PdfDictionary)PdfReader.GetPdfObject(obj);
                    string width = tg.Get(PdfName.WIDTH).ToString();
                    string height = tg.Get(PdfName.HEIGHT).ToString();

                    ImageRenderInfo imgRI = ImageRenderInfo.CreateForXObject(new Matrix(float.Parse(width), float.Parse(height)), (PRIndirectReference)obj, tg);

                    RenderImage(imgRI);
                }
            }
        }
    }
    private void RenderImage(ImageRenderInfo renderInfo)
    {
        PdfImageObject image = renderInfo.GetImage();
        using (Dotnet dotnetImg = image.GetDrawingImage())
        {
            if (dotnetImg != null)
            {
                using (MemoryStream ms = new MemoryStream())
                {
                    dotnetImg.Save(ms, ImageFormat.Tiff);
                    Bitmap d = new Bitmap(dotnetImg);
                    d.Save(imgPath);
                }
            }
        }
    }

    private void Form1_Load(object sender, System.EventArgs e)
    {

    }
}

P.S:我是C#语言的初学者(语法)

谢谢,

0 个答案:

没有答案