実現したいこと
PrismのRegionManagerでMainWindow に表示した子Windowで画面印刷をしたときに白黒で印刷をしたい
発生している問題・分からないこと
PrintTicket でOutPutColorにGrayscaleを指定しているのにカラーで印刷される
該当のソースコード
C#
1private void Button_Click_2(object sender, RoutedEventArgs e) 2{ 3 // MainGridを印刷のためにコンテンツから外してFixedPageに配置 4 this.Content = null; 5 var page = new FixedPage(); 6 7 // 印刷にあたり調整(用紙からはみ出る場合等) 8 var tfg = new TransformGroup(); 9 tfg.Children.Add(new ScaleTransform(1.0, 1.0)); // 縮小 拡大 1.0=100% 10 tfg.Children.Add(new TranslateTransform(30, 20)); // 位置 11 MainGrid.RenderTransform = tfg; 12 13 page.Children.Add(MainGrid); 14 15 LocalPrintServer printServer = new LocalPrintServer(); 16 PrintQueue printQueue = printServer.DefaultPrintQueue; 17 18 // 印刷設定を取得して、必要に応じて変更する 19 PrintTicket printTicket = printQueue.DefaultPrintTicket; 20 printTicket.PageOrientation = PageOrientation.Landscape; 21 printTicket.PageMediaSize = new PageMediaSize(PageMediaSizeName.ISOA4); 22 printTicket.OutputColor = OutputColor.Grayscale; 23 printQueue.UserPrintTicket = printTicket; // 印刷キューに設定 24 page.PrintTicket = printTicket; 25 XpsDocumentWriter xpsWriter = PrintQueue.CreateXpsDocumentWriter(printQueue); 26 27 PrintDialog printDialog = new PrintDialog 28 { 29 PrintQueue = printQueue, 30 PrintTicket = printTicket 31 }; 32 33 34 PrintCapabilities capabilities = printQueue.GetPrintCapabilities(printTicket); 35 if (!capabilities.OutputColorCapability.Contains(OutputColor.Grayscale)) 36 { 37 MessageBox.Show("このプリンターはグレースケール印刷をサポートしていません。"); 38 return; 39 } 40 41 if(printDialog.ShowDialog() == true) 42 { 43 printDialog.PrintVisual(page, "Print Test"); // pageを印刷 44 45 } 46 page.Children.Remove(MainGrid); 47 48 // 元の大きさへ 49 var tfg2 = new TransformGroup(); 50 tfg2.Children.Add(new ScaleTransform(1.00, 1.0)); 51 tfg2.Children.Add(new TranslateTransform(0, 0)); 52 MainGrid.RenderTransform = tfg2; 53 54 this.Content = MainGrid; // 元のコンテンツに戻す 55}
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
印刷処理をXpsDocumentWriteに変更してみたり、
PrintQueueをプリンター名を指定して新しく設定してみましたがうまくいきませんでした。
PrintCapabilitiesでOutputColorCapabilityにGrayscaleが含まれていない結果が帰ってきたのですがそこから先どうすればいいかわかりません
RegionManagerを使用せずにMainWindowだけの最小構成では白黒で印刷できました
ご教授お願い致します。
補足
Visual Studio 2022
WPF
Prism

回答1件
あなたの回答
tips
プレビュー