私の知る限り、PDFファイル自体でこの種の情報を指定することはできません。印刷アプリケーションにはいくつかのオプションがあります。
オプション1:P/Invokeと商用ライブラリAmyuniPDFCreator ActiveXを使用する (通常の免責事項が適用されます):
カスタム構成でサイレント印刷するには、Win32APIを使用してみてください。DEVMODE構造体を作成し、それを印刷中に使用する必要があります。
MSDNのこの記事が役立つ場合があります:
DocumentProperties()関数を使用してプリンター設定を変更する方法
Amyuni PDF Creator ActiveXでは、 Document.Printメソッドを呼び出す前に、DEVMODE構造をドキュメントオブジェクトに設定できます。
byte[] devmode = GetMyDevModeAsByteArray();
pdfCreator1.Document.AttributeByName(”PrinterDevMode”).Value = devmode;
私はこれをテストしていないと言わなければなりません。「PrinterDevMode」属性で使用されるDEVMODE構造は、印刷設定ダイアログを表示することによりActiveXコントロール自体によって生成されることを意図していますが、他の方法で取得された場合は機能すると考えて安全だと思います。すべての場合に構造を最終的に定義するのはプリンタドライバです。時間があれば、後でこれをテストするかもしれません。
Amyuni PDF Creatorには、PDFファイルの各ページに指定されたページサイズに応じて用紙トレイを選択するオプションもあります。したがって、これが実際に達成しようとしていることである場合は、「FormToBinMap」ドキュメント属性を使用して、各ページサイズに使用するトレイを構成できます。この場合、DEVMODE構造をカスタマイズする必要はありません。
オプション2: WPFの使用:
WPFを使用していて、ターゲットプリンターがXPSドライバーを提供している場合は、 PrintTicket.InputBinを使用してこれを実行できる可能性があります。
MSDNから:
PrintTicket.InputBinプロパティ:
使用する入力ビン(用紙トレイ)を示す値を取得または設定します。
Amyuni PDF Creator .NetまたはActiveXを使用して、PDFファイルをXPSに変換できます。
または、GPLライセンスがニーズに合っている場合は、ghostscriptを使用してファイルをラスターイメージに変換し、それをXPSファイルでラップすることができます。
オプション3:
ターゲットプリンターがPostScriptプリンターの場合、ファイルを1ページのファイルに分割し、ghostscriptを使用して各ファイルをPostScript形式に変換し、印刷する前に各ページのトレイを指定できますが、私が知る限り、これは最後です一部はデバイス固有です(私は間違っている可能性があります)。