1

.NET アプリケーションを使用して、DVD などで配布するような他のファイルを参照する PDF の「目次」を作成しようとしています。

この目的のために、検索インデックスとカタログが必要なので、ドキュメント全体で全文検索が機能します。「古い」.pdx ファイル (ディレクトリ構造は常に同じ) をコピーし、C# から JavaScript を呼び出すことで、インデックスの構築を自動化できました。

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

formFields.ExecuteThisJavascript(js);

しかし、.pdx ファイルを .pdf ドキュメントに関連付けて、自動的に読み込まれるようにするにはどうすればよいでしょうか?

Acrobat では、これは「高度な」ドキュメント プロパティで設定されます。

Acrobat ドキュメントのプロパティ

ただし、ドキュメントのinfoまたはmetadataプロパティを介してこれにアクセスすることはできません。どうやらこれは別の場所に保存されているようですが、このデータにアクセスする方法を理解するには、PDF形式について十分に知りません。

PDF構造

どんな助けでも大歓迎です。Adobe SDK/JavaScript API またはその他のライブラリの両方を使用できます (たとえば、既に Aspose ライセンスを持っていることはわかっています)。

4

2 に答える 2

0

ここで自分の質問に答える... 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;
    }
于 2018-07-04T16:05:42.130 に答える