2

我在读取 PDF 文件并将页面拆分为单独的 PDF 文档的 C# 应用程序中使用 iTextSharp。它运作良好,但在投资组合的情况下除外。现在我试图弄清楚如何阅读包含两个嵌入式 PDF 文档的 PDF 组合(或集合,因为它们似乎在 iText 中被称为)。我想简单地打开投资组合,枚举嵌入文件,然后将它们保存为单独的简单 PDF 文件。

关于如何以编程方式创建PDF 作品集的一个很好的例子,在这里: Kubrick Collection Example

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

4

1 回答 1

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 集合示例中的输出文件传递给PdfReader构造函数 ( )。readerPath

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

于 2012-08-17T20:55:06.817 回答