AdobeのコントロールでPDFファイルを印刷 2010/01/23

Pocket

Adobeのコントロールを張り付けて、印刷処理を実装します。

張り付けたコントロール上で印刷機能が実行できるので、あまり使う機会は無いと思いますが印刷処理の前後で業務処理を実装する場合に必要になるかも知れません。
私の場合、Adobeのコントロールから印刷を実行できないようにしようと試みましたが、うまく行きませんでした。
最終的に、Panelの上にAdobeのコントロールを張り付けてPanelをEnable=falseにしてしまいました。
スクロールなどの操作も一切できなくなり、かなり残念な感じになりました。

その他にもAdobe Readerのライセンスでは機能に制限があります。

ページ指定の印刷メソッドが使用できますが、PDFファイルのページ数を取得する機能が使用できません。
iTextなどを使用して自力でPDFファイルを生成してページ数が把握できるのであれば有効です。


それと、Adobeの印刷画面を表示せずに印刷するメソッドを使用すると下記のような画面が表示されます。

印刷時に表示されるメッセージ
印刷時に表示されるメッセージ

悪意のあるスクリプトから勝手に印刷されたりしないように警告するようです。
「次回から表示しない」をチェックすると表示されなくなります。

レジストリをいじると表示されなくなりますが、ややこしいので運用でカバーする必要があります。
さて、問題のテスト用のアプリケーションの作成手順は、以下の通りです。

1.「webBrowserコントロールを使用してPDFを表示」と同じ手順でFormにAdobeコントロールを張り付けてください。

2.印刷処理を実装するボタンのコントロールを張り付けてください。

テスト用のサンプル画面

テスト用のサンプル画面

3.それぞれのボタンに実装するコードは以下の通り。

        private void btnPrint_Click(object sender, EventArgs e)
        {
            // 印刷時ダイアログ表示あり
            axAcroPDF1.Print();
        }

        private void btnPrint2_Click(object sender, EventArgs e)
        {
            // 印刷時ダイアログ表示なし
            axAcroPDF1.printAll();
        }

        private void btnPrint3_Click(object sender, EventArgs e)
        {
            int pageForm = 0;
            int pageTo = 0;
            try
            {
                pageForm = Int32.Parse(txtPageFrom.Text);
                pageTo = Int32.Parse(txtPageTo.Text);
                // 開始、終了ページの大小比較チェックなど
                axAcroPDF1.printPages(pageForm, pageTo);
            }
            catch (Exception ex)
            {
                // 開始、終了ページの数値変換などの例外処理
            }
        }
 

Trackback URL

Leave a Reply