【问题标题】:How to read a PDF Portfolio using iTextSharp如何使用 iTextSharp 阅读 PDF 作品集
【发布时间】:2012-08-17 16:16:31
【问题描述】:

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

这里有一个很好的例子来说明如何以编程方式创建 PDF 作品集: Kubrick Collection Example

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

【问题讨论】:

    标签: c# pdf itextsharp


    【解决方案1】:

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

    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 版本落后大约三周)。

    【讨论】:

    • 你是最棒的!这非常有效,非常感谢。我感觉它与目录下的字典有关,但我不可能弄清楚所有细节。将其添加到在线 C# 示例中会很棒。
    • 上面的代码有一行“byte[] attachment = PdfReader.GetStreamBytes(stream);”,它将附件内容加载到一个字节数组中。如果附件是 PDF 文件,我可以将附件的 PdfReader 打开为“PdfReader reader = new PdfReader(attachment)”。这样做的一个问题是,我们将整个附件文件加载到内存(字节数组)中。是否可以在不将整个附件文件加载到内存的情况下访问附件的 PdfReader?
    猜你喜欢
    • 1970-01-01
    • 2021-07-28
    • 1970-01-01
    • 2015-02-28
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多