首页 新闻 会员 周边

[ITextSharp 问题]用itextsharp 5.0.6 不知道如何获取PDF页面的内容,当PDF类型为Distiller时

0
[待解决问题]

大家好:

Itextsharp为开源的软件,代码下载地址为:http://sourceforge.net/projects/itextsharp/files/itextsharp/iTextSharp-5.0.6/itextsharp-5.0.6.zip/download

如何获取1571PDF的内容通过itextsharp5.0.6来解析,此PDF类型为distiller.

PDF全名:1571es.pdf

下载地址:http://www.fda.gov/downloads/AboutFDA/ReportsManualsForms/Forms/UCM083533.pdf

我跟踪itextsharp源代码发现此PDF内容是流的形式,代码如下:"

if (contents.IsStream()) {

return GetStreamBytes((PRStream)contents, file); 

}",

我调用这个方法只给我返回78个字节的内容,PDF共两页,两页返回的的内容都一样。但是另外一个PDF:356HesCA2LOD8P.pdf,下载地址:http://www.fda.gov/downloads/AboutFDA/ReportsManualsForms/Forms/UCM082348.pdf, 此PDF的类型同样是distiller,但是此PDF的内容为Array,调用的代码如下:"

else if (contents.IsArray()) {

 

PdfArray array = (PdfArray)contents;

 

bout = new MemoryStream();

 

for (int k = 0; k < array.Size; ++k) {

 

PdfObject item = GetPdfObjectRelease(array[k]);

 

if (item == null || !item.IsStream())

 

continue;

 

byte[] b = GetStreamBytes((PRStream)item, file);

 

bout.Write(b, 0, b.Length);

 

if (k != array.Size - 1)

 

bout.WriteByte((byte)'\n');

 

}

 

return bout.ToArray();

 

}",我调用此方法能返回PDF的页面内容。

希望在此方面的达人能提供给我解决方案,我不胜感激,此问题已经困扰我1周时间了。

问题补充:

此问题我已经解决了,花了7天的时间,但是我还不知道什么时候该使用此方法,纠结啊!

AlexJun的主页 AlexJun | 初学一级 | 园豆:200
提问于:2011-05-30 17:22
< >
分享
所有回答(1)
0

朋友,你可以分享一下你的方法吗?我现在就碰到你这个问题,谢谢!

DRenTeng | 园豆:118 (初学一级) | 2012-11-14 23:14

我应该是改了itextsharp的原代码,我之前的版本是5.0.6的,改的文件对应的目录应该是(iTextSharp\text\pdf\PdfReader.cs),对应这两个方法好像都需要改(public byte[] GetPageContent(int pageNum, RandomAccessFileOrArray file) 和 public static byte[] GetPageContent(PdfDictionary page)):

具体的代码我不确定是否是下面的了,你可以验证下:

if (pdfObjectRelease.IsArray())
        {
            PdfArray array = (PdfArray) pdfObjectRelease;
            MemoryStream stream = new MemoryStream();
            for (int i = 0; i < array.Size; i++)
            {
                PdfObject item = GetPdfObjectRelease(array[i]);
                if ((item != null) && item.IsStream())
                {
                    if (file == null)
                    {
                        file = ((PRStream) item).Reader.SafeFile;
                        file.ReOpen();
                    }
                    byte[] streamBytes = GetStreamBytes((PRStream) item, file);
                    stream.Write(streamBytes, 0, streamBytes.Length);
                    if (i != (array.Size - 1)) { stream.WriteByte((byte)'\n');
                    }
                }
            }
            return stream.ToArray();
        }
        buffer2 = new byte[0];

支持(0) 反对(0) AlexJun | 园豆:200 (初学一级) | 2012-11-16 23:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册