Adobe PDFプリンタ(Acrobatをインストールすると作成されるプリンタ)をC#アプリケーションから一時的に制御する方法はないでしょうか?

PDFファイルの出力フォルダを変更したり、保存ダイアログを表示しないようにしたいです。
参考になるコード、本、Webページを教えてください。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2007/08/23 12:44:51
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:ManalTencho No.1

回答回数129ベストアンサー獲得回数9

ポイント10pt

こちらをどうぞ。

http://www.codeproject.com/useritems/Easy_PDF_Programming.asp

ごく概略的には、

・GetDefaultPrinterName() で、現在のデフォルトプリンタ名を取得した上で、プリンタ名を退避しておく

・SetDefaultPrinterName() で、デフォルトプリンタ名を Adobe PDF プリンタにセットする

・PrintDocument などを用い、ドキュメントをプリントする

・退避しておいた元のデフォルトプリンタ名を用い、SetDefaultPrinterName() で元の状態に戻す

といったところになります。

id:maq

意図が違います。

Adobe PDFプリンタの設定状態を変えてやりたいのです。

残念ながらプリンタ切替の質問ではありません。

2007/08/21 20:45:33
id:wasisan No.2

回答回数86ベストアンサー獲得回数7

ポイント60pt

今度はコメントだと読みづらくなるので,申し訳ないのですが正当な回答とさせて頂きます.

まず,コメントの回答もまた的外れでした(この質問を読んでいなかったので).

行いたいことは,PDFファイルの操作(Acrobatオブジェクトとの通信)ではなく,Acrobatを用いたPDFファイルの生成なので,

  • Acrobat Distillerでpsファイルをpdfへ変換する.
  • PDFWriterでWindows GDIによる印刷画像をpdfへ変換する(この質問はこれ).

の2つのどちらかを選ぶということになります.


  • Distillerを使う場合:
    • 1) psファイルを何らかの方法(html2psとか)で生成する,
    • 2) Distillerを外部から起動・操作する.

となります.こちらは操作の自由度が高いので割合単純だと思います.

Acrobat Distiller API Reference:

http://partners.adobe.com/public/developer/en/acrobat/sdk/pdf/pd...

を読めばOK.

これによると,Distillerをシェルで起動するか,または,オートメーション

(OLE)で操作するということです.p.21辺りからOLEインタフェースの説明がある.


  • PDFWriterを使う場合:

http://support.adobe.com/devsup/devsup.nsf/docs/50876.htm

として,印刷ドライバ扱いするので非常に制御しづらいと思います.

設定ファイルやレジストリで制御できるのかもしれません.

下の情報は古いものなので今でも通用するかどうか分かりませんが.

PDFml-J:01307] PDFWriter のファイル名入力ダイアログ非表示について

http://hpcgi1.nifty.com/MADIA/VBBBS/wwwlng.cgi?print+200312/0312...

id:maq

コメントの内容的外れではありません。

もともとの意図はその通りで、とりあえずの実装上で質問内容が変化してきたという経緯です。

やはり、回答の通りなのでしょうね~Distillerを使うためにはpsファイルを作る方法が問題。PDFWriterは面倒。

なので、Adobe PDFプリンタで何とかと思っているわけですが…。

とにかく回答ありがとうございます。

2007/08/22 08:56:33
  • id:wasisan
    (すみません.あちらの質問が終了になっていたので,こちらにも書いておきます)

    前の質問の回答が的外れだった(申し訳ございませんでした)ので,ここのコメントで補足です
    (とは言っても,私もあまり良くわかっていないながらなのですが).

    行いたいことは結局,Adobe Acrobat SDKを使って
    (IACにより)Adobe AcrobatのCOM(OLE)オブジェクトと通信したいということみたいですね.

    基本的には下のオフィシャルサイトにある文書「InterApplication Communication」を読めばよさそうなのですが,かなり重い内容ですね.
    http://www.adobe.com/devnet/acrobat/
    http://support.adobe.com/devsup/devsup.nsf/docs/53588.htm

    他ざっと調べたものを挙げておきます(扱っているサイトはまだとても少ない!)

    この雑誌には割と詳しく書かれていそう:
    http://www.pdfjournal.com/pdfjj/backnumbers/pdfjjsamplevol1.html

    類似質問(VBでPDFファイルを編集する -OKWave):
    http://okwave.jp/qa194124.html
    PlanetPDFの情報:
    http://www.planetpdf.com/search_results.asp?words=IAC&SearchString=storepdftoolsforumgeneral

    C#からCOMオブジェクトを呼び出すだけなので,処理はVBと同じになるはずです.

    このブログ(AcrobnatのOLE機能(IAC)、又はPDFについて調査。)が良さそう:
    http://pdf-file.jugem.jp/

    日本語訳にもなっている「PDF Hacks」も参考になる:
    http://safari.oreilly.com/0596006551/pdfhks-CHP-7-SECT-7

  • id:wasisan
    > なので、Adobe PDFプリンタで何とかと思っているわけですが…。

    http://support.adobe.co.jp/faq/faq/qadoc.sv?221435+002
    http://blog.antenna.co.jp/PDFTool/archives/2005/11/pdf6.html
    によると,PDFWriterはversion 5.0までの機能だったみたいですね.

    http://help.adobe.com/ja_JP/Acrobat/8.0/Standard/help.html?content=WS58a04a822e3e50102bd615109794195ff-7f2f.html
    には,
    > 元の文書は PostScript に変換され、それが自動的に Distiller に渡されて PDF に変換されます。
    > Distiller を手動で起動する必要はありません。
    > Distiller の現在の設定および PDF 設定がファイルの変換に使用されます。
    > 標準的でないページサイズを使用する場合は、カスタムページサイズを作成します。

    とあるので,PDFプリンタは,
    「画像を.psに変換⇒.psをDistllerで.pdfに変換」を自動化しているみたいですね.
    なので,たぶん,PDFプリンタを起動する前に,DistillerのパラメタをOLEで設定してやれば良さそうなのですが….

    Acrobat Distiller Parameters:
    http://partners.adobe.com/public/developer/en/acrobat/sdk/pdf/pdf_creation_apis_and_specs/DistillerParameters.pdf
    がパラメタの設定で参考になりそうです.


    PDFプリンタを使わないという手もあるかもしれません.
    PDFプリンタが行うことを自動じゃなくて手動でやればいいだけので,
    psプリンタドライバで印刷してpsファイルを生成し,Distillerで変換とすればよい気がしてきました.

    PS プリンタドライバのインストールと活用方法
    http://www.klavis.info/psprn.html
  • id:maq
    設定の異なるAdobe PDFプリンタをもう1台追加構成するという何とも情けない方法で回避して実現しましたorz。
    次回があればぜひ、Acrobat SDKを使ってみたいと思います:)。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません