如何使用iTextSharp阅读PDF包

时间:2012-08-17 16:16:31

标签: c# pdf itextsharp

我在一个C#应用程序中使用iTextSharp,该应用程序读取PDF文件并将页面分成单独的PDF文档。除投资组合外,它运作良好。现在,我正在试图弄清楚如何阅读包含两个嵌入式PDF文档的PDF组合(或者像在iText中调用的Collection)。我想简单地打开产品组合,枚举嵌入的文件,然后将它们保存为单独的简单PDF文件。

有一个很好的例子,说明如何以编程方式创建 PDF文件夹,在这里: Kubrick Collection Example

但我没有看到任何阅读投资组合的例子。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:3)

您引用的示例将嵌入文件添加为文档级附件。所以你可以像这样提取文件:

PdfReader reader = new PdfReader(readerPath);
PdfDictionary root = reader.Catalog;
PdfDictionary documentnames = root.GetAsDict(PdfName.NAMES);
PdfDictionary embeddedfiles = 
    documentnames.GetAsDict(PdfName.EMBEDDEDFILES);
PdfArray filespecs = embeddedfiles.GetAsArray(PdfName.NAMES);
for (int i = 0; i < filespecs.Size; ) {
  filespecs.GetAsString(i++);
  PdfDictionary filespec = filespecs.GetAsDict(i++);
  PdfDictionary refs = filespec.GetAsDict(PdfName.EF);
  foreach (PdfName key in refs.Keys) {
    PRStream stream = (PRStream) PdfReader.GetPdfObject(
      refs.GetAsIndirectObject(key)
    );

    using (FileStream fs = new FileStream(
      filespec.GetAsString(key).ToString(), FileMode.OpenOrCreate
    )){
      byte[] attachment = PdfReader.GetStreamBytes(stream);
      fs.Write(attachment, 0, attachment.Length);
    }
  }
} 

如果要对此进行测试,请将您引用的 Kubrick Collection示例中的输出文件传递给PdfReader构造函数(readerPath)。

希望我有时间从5.2.0.0版本更新C#示例(iTextSharp版本现在比Java版本晚了大约三周)。