AdobeのControlを使用してPDFを表示

Pocket

Adobe社が提供しているActive Xコントロールを使用してPDFファイルを表示します。

FormコントロールにAcrobat Readerを張り付けて使用しているイメージになります。

アプリケーションの実装手順は以下のようになります。

1.新しいプロジェクトを作成する。
Windowアプリケーションを選択します。

2.ツールボックスで「アイテムの選択」を行い、COMコンポーネントの一覧から「Adobe PDF Reader」を追加します。

3.新しく追加されたAdobeのコントロールをフォームへ張り付けます。

4.プログラムで実行時にPDFファイルのパスを渡してやります。

ソースは以下のようになります。

    public partial class PdfView2 : Form
    {
        public PdfView2(String fileName)
        {
            InitializeComponent();
            axAcroPDF1.LoadFile(fileName);          // コントロールにPDFファイルのパスを設定
            axAcroPDF1.setShowToolbar(false);       // スクロールバーを表示しない
            axAcroPDF1.setLayoutMode("OneColumn");  // レイアウトの指定
            axAcroPDF1.setPageMode("none");         // ページの表示モードの指定
            axAcroPDF1.setView("FitH");             // ページの表示サイズの指定
        }
        /*
         * 指定されたページへ移動
         */
        private void btnPageJunp_Click(object sender, EventArgs e)
        {
            try {
                int pageNum = Convert.ToInt32(txtPage.Text);
                axAcroPDF1.setCurrentPage(pageNum);
            }
            catch (Exception ex)
            {
                // エラー処理を記述する。
            }
        }

        /*
         * 表示倍率の変更
         */
        private void cmbZoom_SelectedIndexChanged(object sender, EventArgs e)
        {
            axAcroPDF1.setZoom(Convert.ToSingle(cmbZoom.Text));
        }
    }

このコントロールを使用すると、AcroPDFのメソッドを使用して、表示倍率の切り替えや印刷などができるようになります。

しかし、Adobe Readerをインストールして使用できる機能は一部のみです。

詳細については、Acrobar SDKのDocumentation内のヘルプを確認してください。

「Introduction to SDK > Developing for Adobe Reader > Interapplication Communication」あたりに記述があります。

便利に使える、コントロールですが、すこし問題があるようです。

今回のサンプルでは、PDFを表示する機能が共通化されることを考えてDLLとして作成し、ファイル指定するEXEから起動しているのですが、PDFを表示してすぐにEXEを終了するとアプリケーションエラーとなりました。

PDFを表示する共通機能を終了して、しばらく待ってからEXEを終了すると正常に終了しました。

このコントロールを使用したアプリケーションを実行するとバックグラウンドでAdobe のコントロールに関するプロセスが起動します。

アプリケーションを終了した時点で、Adobe のプロセスもきれいに終わればいいのですが、このプロセスの終了するタイミングに問題があるようです。

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA