2015年5月30日土曜日

WPF 印刷で、用紙サイズを混在したり、A4 縦以外にするには

可能といえば可能ですが、不可避な不具合があるので期待しない方が無難でしょう…

問題点:
  • printDialog.PrintQueue.GetPrintCapabilities().PageMediaSizeCapability で列挙できる用紙サイズしか使用できません。
  • この用紙サイズ一覧はプリンタドライバーによって異なります。
  • ISOB4, JISB4 が列挙されない(使用できない)プリンターもあります。

回避案:

本題の件、参考: How to print multiple pages each with a different page size?

流れ:
  • まず、XpsDocumentWriter.CreateVisualsCollator を取り出します。
  • printDialog.PrintTicket を取得しておきます。以下 printTicket
  • BeginBatchWrite 呼び出し。
  • foreach PAGES →
  • printTicket.PageMediaSize を設定。
    • printDialog.PrintQueue.GetPrintCapabilities().PageMediaSizeCapability で取得した一覧から選択します。
    • new PageMediaSize(...) してもまったく効果を発揮しません。
  • printTicket.PageOrientation を設定。
    • 縦 = PageOrientation.Portrait
    • 横 = PageOrientation.Landscape
  • Write(Visual visual, PrintTicket printTicket) 呼び出し。
    • 印刷したいものが visual になります。
  • ← foreach PAGES
  • EndBatchWrite 呼び出し。


実証サンプル WpfMultiPageSizesSample をアップしました。
該当するコードはこの辺です。

0 件のコメント:

コメントを投稿