如何将搜索目录文件(.pdx)与PDF文档相关联

时间:2018-07-01 22:55:17

标签: pdf itext acrobat aspose acrobat-sdk

使用.NET应用程序,我试图创建一个引用其他文件的PDF“目录”,例如一个文件会分发到DVD等上。

为此,我需要一个搜索索引和目录,因此全文搜索将适用于所有文档。 通过复制“旧” .pdx文件(目录结构始终相同),然后从C#调用JavaScript,我已经能够自动化索引的构建:

var js = $@"catalog.getIndex(""{pdxFilePath}"").build('alert(""Hello"")', true)";

formFields.ExecuteThisJavascript(js);

但是如何将.pdx文件与.pdf文档相关联,这样它会自动加载?

在Acrobat中,这是在“高级”文档属性中设置的:

Acrobat document properties

但是,不能通过文档的infometadata属性来访问它。 显然,它存储在其他地方,但是我对PDF格式的了解不足,无法弄清楚如何访问此数据:

PDF structure

任何帮助将不胜感激。我可以同时使用Adobe SDK / JavaScript API或其他一些库(例如,我知道我们已经拥有Aspose许可证)。

2 个答案:

答案 0 :(得分:0)

/搜索条目未在PDF规范中记录,可能是Adobe扩展。
您可以使用任何支持低级COS对象(字典,字符串,数字,流等)的库,但是由于未记录该条目,因此只能从示例PDF文件推断其结构。

答案 1 :(得分:-1)

在这里回答我自己的问题...我能够使用PdfSharp解决此问题。

以下代码与PdfSharp 1.50.4845-RC2a兼容。

pdxFile应该是包含文件扩展名的.pdx文件的名称(例如“ catalog.pdx”)。我仅使用与PDF文档位于同一文件夹中的.pdx文件进行了此测试,但我认为通常相对路径应该可以工作。

由于我对PDF格式缺乏更深入的了解,因此不能保证这是一个完美的解决方案,但这似乎至少可以奏效。

    private void SetSearchCatalog(PdfDocument doc, string pdxFile)
    {
        var indexDict = new PdfDictionary(doc);
        indexDict.Elements["/F"] = new PdfString(pdxFile, PdfStringEncoding.RawEncoding);
        indexDict.Elements["/Type"] = new PdfName("/Filespec");

        var indexArrayItemDict = new PdfDictionary(doc);
        indexArrayItemDict.Elements["/Index"] = indexDict;
        indexArrayItemDict.Elements["/Name"] = new PdfName("/PDX");

        var indexArray = new PdfArray(doc, indexArrayItemDict);

        var searchDict = new PdfDictionary(doc);
        searchDict.Elements["/Indexes"] = indexArray;

        doc.Internals.Catalog.Elements["/Search"] = searchDict;
    }