11

を使用して C# Winform に PDF ビューアーを埋め込みましたAxAcroPDFLib。ただし、ツールバーの注釈ボタン (コメント...) は無効になっています。検索したところ、デフォルトで無効になっていることがわかりましたが、Javascript を使用して有効にすると報告されているものもあります。

Collab.showAnnotToolsWhenNoCollab = True

ここでこれを行う方法はありますか?

編集: WebBrowser コントロールでブラウザ プラグインを使用することは可能ですか? もしそうなら、どうすればこれを行うことができますか?

4

1 に答える 1

6

更新 - 最初のセクションは、Acrobat Reader のみに関連しています。フルバージョンの Acrobat を使用する場合の情報については、2 番目のセクションを参照してください。

アクロバットリーダー

これはおそらくあなたが探している答えではないことを述べて、これらすべての前置きをしますが、これは単なるコメントではなく、より多くの説明が必要だと感じました.

同様の自問自答の質問が SO ( here ) で尋ねられました。ここで、OP は、この動作は設計によるものであり、それについては何もできないという結論に達しました。私はほとんど同意します。

Reader 自体が注釈を追加できることはご存じだと思いますが、Reader プラグイン (AcroPDFLib) を使用してこれを実現する唯一の簡単な方法は、読み込まれるドキュメントを「Reader Enabled」にすることです。 Reader と同じです。プラグインにロードさせたいドキュメントを制御できる場合は、これが解決策になる可能性があります。

回避策として設定する可能性についての質問に対してCollab.showAnnotToolsWhenNoCollab = True、私の検索では、これが Reader ではなく、Acrobat のフル バージョンを使用している場合に実行可能な回避策であることが示されました。より具体的には、アドビ フォーラム (ここ) で、アドビのスタッフがこのプロパティの使用について直接コメントしました。

いいえ、【Adobe Readerでのコメントの許可について】ではありません。これは、Acrobat Standard または Professional のブラウザでコメントを有効にすることに関するものです。Reader でコメントを有効にする場合は、Acrobat professional または Adob​​e Livecycle Reader Extension Server を使用して PDF 自体を「Reader 有効」にする必要があります。

確かに、このコメントは Acrobat 9 に関するものであり、Acrobat XI でも有効であるようです。

最後にもう 1 つ。あなたのアプリケーションの範囲がわからないので、これはまったく無関係かもしれませんが、これが商用アプリケーションである場合、機能的な回避策が見つかったとしても、アドビのガイドラインに違反する可能性があるため、使用するのをためらうでしょう.リーダー使用許諾契約 (こちら); 具体的には、セクション 4.3.3、無効になっている機能。短いバージョンは、ほとんどの企業と同様に、保護を回避することを望んでいない.

Acrobat のフルバージョン

次のコードは、PDF ビューアーを作成し (フォームのウィンドウを描画に使用)、PDF を開き、開いている PDF でcollab.showAnnotToolsWhenNoCollab = true注釈を許可するように設定します。これには、Acrobat タイプ ライブラリへの参照が必要です。

void CreatePdfViewerAndOpenFile(string pdfFile)
{
    short AV_DOC_VIEW = 2;
    short PDUseBookmarks = 3;
    short AVZoomFitWidth = 2;

    Type AcroExch_AVDoc = Type.GetTypeFromProgID("AcroExch.AVDoc");
    _acroExchAVDoc = (Acrobat.CAcroAVDoc)Activator.CreateInstance(AcroExch_AVDoc);
    bool ok = _acroExchAVDoc.OpenInWindowEx(pdfFile, this.Handle.ToInt32(), AV_DOC_VIEW, -1, 0, PDUseBookmarks, AVZoomFitWidth, 0, 0, 0);

    if (ok)
    {
        CAcroPDDoc pdDoc = (CAcroPDDoc)_acroExchAVDoc.GetPDDoc();
        object jsObj = pdDoc.GetJSObject();
        Type jsObjType = jsObj.GetType();
        object collab = jsObjType.InvokeMember("collab",
            BindingFlags.GetProperty | BindingFlags.Public | BindingFlags.Instance,
            null, jsObj, null);

        jsObjType.InvokeMember("showAnnotToolsWhenNoCollab",
            BindingFlags.SetProperty | BindingFlags.Public | BindingFlags.Instance,
            null, collab, new object[] { true });
    }
}

PDF を表示したい場所からこのメソッドを呼び出します。完了したら、必ずメソッドを呼び出してください。そうしないとClose、PDF ファイルがバックグラウンドの Acrobat プロセスで開いたままになります。

_acroExchAVDoc.Close(-1);

フォームのサイズ変更処理など、多くの「通常の」機能がこの例から除外されていることに注意してください。この例ではサイズ変更が処理されないため、メソッドを呼び出す前にフォームを最大化して、ビューアーが十分に大きくなるようにする必要があります。この方法でビューアーを使用する方法の詳細については、Acrobat SDK (こちら) をダウンロードし、ActiveViewVB サンプル プロジェクトを参照してください。これは、この例のいくつかを構築するために使用したものです。参考までに、Acrobat XI SDK を使用しました。

于 2015-05-11T04:01:15.090 に答える