問題点:
- printDialog.PrintQueue.GetPrintCapabilities().PageMediaSizeCapability で列挙できる用紙サイズしか使用できません。
- この用紙サイズ一覧はプリンタドライバーによって異なります。
- ISOB4, JISB4 が列挙されない(使用できない)プリンターもあります。
回避案:
- 代わりに PDF を使用します。
- 世の中には PDFsharp という便利なライブラリがあり、
なんと XPS ファイルを PDF ファイルに変換する機能を備えています。
参考: https://github.com/HiraokaHyperTools/PDFsharp
本題の件、参考: 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 件のコメント:
コメントを投稿