PDF包文件中嵌入文件的顺序?

时间:2017-02-06 18:01:23

标签: c# pdf itext

我使用类似于以下代码成功提取PDF包文件的内容:

internal void ExtractAttachments(string file_name, string folderName) {
    PdfDictionary documentNames = null;
    PdfDictionary embeddedFiles = null;
    PdfDictionary fileArray = null;
    PdfDictionary file = null;
    PRStream stream = null;

    using (PdfReader reader = new PdfReader(file_name)) {
        PdfDictionary catalog = reader.Catalog;

        documentNames = (PdfDictionary)PdfReader.GetPdfObject(catalog.Get(PdfName.NAMES));

        if (documentNames != null) {
            embeddedFiles = (PdfDictionary)PdfReader.GetPdfObject(documentNames.Get(PdfName.EMBEDDEDFILES));
            if (embeddedFiles != null) {
                PdfArray filespecs = embeddedFiles.GetAsArray(PdfName.NAMES);

                for (int i = 0; i < filespecs.Size; i++) {
                    i++;
                    fileArray = filespecs.GetAsDict(i);
                    file = fileArray.GetAsDict(PdfName.EF);

                    foreach (PdfName key in file.Keys) {
                        stream = (PRStream)PdfReader.GetPdfObject(file.GetAsIndirectObject(key));
                        string attachedFileName = fileArray.GetAsString(key).ToString();
                        byte[] attachedFileBytes = PdfReader.GetStreamBytes(stream);

                        System.IO.File.WriteAllBytes(Path.Combine(folderName, attachedFileName), attachedFileBytes);
                    }
                }
            }
        }
    }
}

但是,我注意到这些组件文件的提取顺序与使用Adobe Reader XI在原始PDF中显示的顺序不同。这些组件文件的显示顺序显然在&#34;索引&#34;属性,您可以通过选择在“文件”模式下查看项目组合文件(而不是“布局”模式),在“读者”用户界面中显示该属性,右键单击任何组件文件并选择“查看”。 &GT; &#39;指数&#39;从上下文菜单中。

我的问题:我怎样才能找到这个&#39;索引&#39;从PDF包文件中提取文件之前的属性?

1 个答案:

答案 0 :(得分:0)

&#34;索引&#34;属性可能是也可能不是投资组合排序的实际元数据。可以在任意数量的集合字段(包括隐藏字段)上对投资组合进行排序。要查找实际的排序顺序,您需要获得&#34;排序&#34; &#34; Collection&#34; &#34;目录&#34;中的字典。完成后,您可以根据&#34; CI&#34;对文件进行排序。 (收集信息)每个附件中的字典。

我按你的方式抛出一些代码,但我不会使用iText ...... Sharp或其他。