teratail header banner
teratail header banner
質問するログイン新規登録

質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.30%
印刷

印刷とは、インキを用いて紙などの被印刷物に機械的に複製することを指します。現在は紙などの2次元の媒体だけでなく、3次元の曲面にも直接印刷する技術など様々な開発が進んでいます。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

1回答

153閲覧

RegionManagerでMainWindowに表示した子Windowで印刷するとグレースケールにできない

Alice1412

総合スコア3

印刷

印刷とは、インキを用いて紙などの被印刷物に機械的に複製することを指します。現在は紙などの2次元の媒体だけでなく、3次元の曲面にも直接印刷する技術など様々な開発が進んでいます。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

1グッド

0クリップ

投稿2025/06/11 04:32

1

0

実現したいこと

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

TN8001👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TN8001

2025/06/11 10:56 編集

手元にプリンタがないのでコメントだけ(Microsoft Print to PDFはグレースケール未対応っぽい) > PrintCapabilitiesでOutputColorCapabilityにGrayscaleが含まれていない結果が帰ってきた つまりMessageBoxが出てreturnという意味ですか? DefaultPrintQueueが、Grayscaleをサポートしていないのではありませんか? [ドキュメントの印刷の概要 - WPF | Microsoft Learn](https://learn.microsoft.com/ja-jp/dotnet/desktop/wpf/documents/printing-overview#printserver-and-printqueue) > RegionManagerを使用せずにMainWindowだけの最小構成では白黒で印刷できました MonochromeとGrayscaleは別だと思いますが、白黒・グレースケールどちらも(あるいはどちらか)印刷できたということでしょうか? RegionManagerあるなしで違いがあるとも思えないのですが、VisualBrushを使用してみたら変わるでしょうか? [WPFでプリントしたい](https://teratail.com/questions/48084) 最悪自前でグレースケール化する手もあるとは思います^^; [c# - Print visual as grayscale WPF - Stack Overflow](https://stackoverflow.com/questions/26625450/print-visual-as-grayscale-wpf) [Microsoft.Expression.Darwing/Effects dll削除による"Arc"、"MonochromeEffect"代替dllについて](https://teratail.com/questions/62da171idbsx1g)
Alice1412

2025/06/12 01:26

コメントありがとうございます。 白黒=グレースケールだと勘違いをしていました。 OutputColorをMonochromeに変更したところ無事に白黒で印刷できました。 RegionManagerのあるなしで挙動が変わったのはわかりませんが、やりたいことは解決しましたので貴方のコメントをベストアンサーに選びたいので同じ内容を回答欄に投稿いただけますでしょうか?
TN8001

2025/06/12 02:35

> OutputColorをMonochromeに変更したところ無事に白黒で印刷できました。 よかったですね^^ ggっただけなんでお手数ですが「自己解決」にしていただいて結構です。 [ヘルプ|質問をした後に自己解決してしまった](https://teratail.com/help#resolve-myself)
Alice1412

2025/06/12 04:05

畏まりました。 この度はご丁寧な対応をありがとうございました。
guest

回答1

0

自己解決

TN8001様のコメントより解決致しました。

白黒で印刷=Grayscaleと勘違いをしていました。

OutputColorをMonocromeにしたところ無事に白黒印刷ができました

投稿2025/06/12 04:13

Alice1412

総合スコア3

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問