大家好:
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周时间了。
朋友,你可以分享一下你的方法吗?我现在就碰到你这个问题,谢谢!
我应该是改了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];