ITEXTSHARP学习整理

  学习的版本iTextSharp.5.5.5。

关于获取PDF中的图片资源

  

        /// <summary>
        /// 将PDF中的图片资源转换成二进制
        /// </summary>
        /// <param name="filePath"></param>
        /// <returns></returns>
        public List<byte[]> ConvertImageData(string filePath)
        {
            List<byte[]> lst = new List<byte[]>();
            using (PdfReader pdf = new PdfReader(filePath))
            {
                for (int i = 1; i <= pdf.NumberOfPages; i++)
                {
                   byte[] result = null;
                PdfDictionary page = pdf.GetPageN(pageNum);
                PdfObject obj = FindImageInPDFDictionary(page);
                if (obj != null)
                {
                 PdfImageObject imageObj = null;
                  int XrefIndex = Convert.ToInt32(((PRIndirectReference)obj).Number.ToString(System.Globalization.CultureInfo.InvariantCulture));
                   PdfObject pdfObj = pdf.GetPdfObject(XrefIndex);
                   PRStream pdfStrem = (PRStream)pdfObj;
                   imageObj = new PdfImageObject(pdfStrem);
                   result = imageObj.GetImageAsBytes();
                }
                  lst.Add(result);
                }
            }
            return lst;

        }

 

       /// <summary>
       /// 提取图片元素
       /// </summary>
       /// <param name="pg"></param>
       /// <returns></returns>
        private static PdfObject FindImageInPDFDictionary(PdfDictionary pg)
        { 
            PdfDictionary res = pg.GetAsDict(PdfName.RESOURCES);
            PdfDictionary xobj = res.GetAsDict(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))
                        {
                            return obj;
                        }// image inside a form
                        else if (PdfName.FORM.Equals(type) || PdfName.GROUP.Equals(type))
                        {
                            return FindImageInPDFDictionary(tg);
                        }

                    }
                }
            }
            return null;
        }

  

  

转载于:https://www.cnblogs.com/zhubin1314521/p/4512471.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值