C# 如何使用c获取PDF图像元素#

C# 如何使用c获取PDF图像元素#,c#,pdf,itextsharp,C#,Pdf,Itextsharp,我想知道如何使用c#获取PDF文件中的图像元素。我知道如何将元素添加到PDF文件中,我只需要知道如何访问图像元素 我也在使用iTextSharp。我相信你可以用iTextSharp做到这一点 我把这个代码存储在我的机器上,但从未使用过。我从一个论坛上下载的,还没有经过测试,但我相信你可以让它正常工作 using iTextSharp.text; using iTextSharp.text.pdf; #region ExtractImagesFromPDF public stat

我想知道如何使用c#获取PDF文件中的图像元素。我知道如何将元素添加到PDF文件中,我只需要知道如何访问图像元素


我也在使用iTextSharp。

我相信你可以用iTextSharp做到这一点

我把这个代码存储在我的机器上,但从未使用过。我从一个论坛上下载的,还没有经过测试,但我相信你可以让它正常工作

using iTextSharp.text;
using iTextSharp.text.pdf;

#region ExtractImagesFromPDF
        public static void ExtractImagesFromPDF(string sourcePdf, string outputPath)
        {
            // NOTE:  This will only get the first image it finds per page.
            PdfReader pdf = new PdfReader(sourcePdf);
            RandomAccessFileOrArray raf = new iTextSharp.text.pdf.RandomAccessFileOrArray(sourcePdf);

            try
            {
                for (int pageNumber = 1; pageNumber <= pdf.NumberOfPages; pageNumber++)
                {
                    PdfDictionary pg = pdf.GetPageN(pageNumber);
                    PdfDictionary res =
                      (PdfDictionary)PdfReader.GetPdfObject(pg.Get(PdfName.RESOURCES));
                    PdfDictionary xobj =
                      (PdfDictionary)PdfReader.GetPdfObject(res.Get(PdfName.XOBJECT));
                    if (xobj != null)
                    {
                        foreach (PdfName name in xobj.Keys)
                        {
                            PdfObject obj = xobj.Get(name);
                            if (obj.IsIndirect())
                            {
                                PdfDictionary tg = (PdfDictionary)PdfReader.GetPdfObject(obj);
                                PdfName type =
                                  (PdfName)PdfReader.GetPdfObject(tg.Get(PdfName.SUBTYPE));
                                if (PdfName.IMAGE.Equals(type))
                                {

                                    int XrefIndex = Convert.ToInt32(((PRIndirectReference)obj).Number.ToString(System.Globalization.CultureInfo.InvariantCulture));
                                    PdfObject pdfObj = pdf.GetPdfObject(XrefIndex);
                                    PdfStream pdfStrem = (PdfStream)pdfObj;
                                    byte[] bytes = PdfReader.GetStreamBytesRaw((PRStream)pdfStrem);
                                    if ((bytes != null))
                                    {
                                        using (System.IO.MemoryStream memStream = new System.IO.MemoryStream(bytes))
                                        {
                                            memStream.Position = 0;
                                            System.Drawing.Image img = System.Drawing.Image.FromStream(memStream);
                                            // must save the file while stream is open.
                                            if (!Directory.Exists(outputPath))
                                                Directory.CreateDirectory(outputPath);

                                            string path = Path.Combine(outputPath, String.Format(@"{0}.jpg", pageNumber));
                                            System.Drawing.Imaging.EncoderParameters parms = new System.Drawing.Imaging.EncoderParameters(1);
                                            parms.Param[0] = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Compression, 0);
// GetImageEncoder is found below this method
                                            System.Drawing.Imaging.ImageCodecInfo jpegEncoder = GetImageEncoder("JPEG");
                                            img.Save(path, jpegEncoder, parms);
                                            break;

                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }

            catch
            {
                throw;
            }
            finally
            {
                pdf.Close();
            }


        }
        #endregion

       #region GetImageEncoder
        public static System.Drawing.Imaging.ImageCodecInfo GetImageEncoder(string imageType)
        {
            imageType = imageType.ToUpperInvariant();



            foreach (ImageCodecInfo info in ImageCodecInfo.GetImageEncoders())
            {
                if (info.FormatDescription == imageType)
                {
                    return info;
                }
            }

            return null;
        }
        #endregion
使用iTextSharp.text;
使用iTextSharp.text.pdf;
#区域提取图像从PDF
公共静态void ExtractImagesFromPDF(字符串源PDF,字符串输出路径)
{
//注意:这将仅获取每页找到的第一个图像。
PdfReader pdf=新PdfReader(sourcePdf);
RandomAccessFileOrArray raf=new iTextSharp.text.pdf.RandomAccessFileOrArray(sourcePdf);
尝试
{

对于(int pageNumber=1;pageNumber请记住,图像可能不是作为图像存在的,而是作为一组您需要组合在一起的斑点(即原始数据、颜色空间数据、ICC配置文件或颜色空间)。原始图像也可以在显示中进行操作(即缩放、旋转、反转、遮罩、剪裁)