私が書いている C# WPF アプリケーションに印刷サポートを追加しようとしていますが、これで髪を引き裂いています。WPF アプリケーションのウィンドウから単一の画像を印刷しようとしています。画像は配送ラベルで、プリンターは 4 インチ x 6 インチの配送ラベル ストックを搭載したサーマル プリンターです。印刷するコードは次のとおりです。
PrintDialog pd = new PrintDialog();
if (pd.ShowDialog() == true)
{
Image tmpImage = new Image();
tmpImage.Stretch = Stretch.Uniform;
tmpImage.Width = pd.PrintableAreaWidth;
tmpImage.Source = this.img_label.Source;
tmpImage.Measure(new Size(pd.PrintableAreaWidth, pd.PrintableAreaHeight));
tmpImage.Arrange(new Rect(new Point(0, 0), tmpImage.DesiredSize));
pd.PrintVisual(tmpImage, "Shipping Label");
}
このコードは、印刷ダイアログを表示するという点で機能します。プリンターを選択し、正しいラベル ストックを使用するように構成して、ラベルを印刷できます。ただし、他の投稿が示しているように、選択した設定は保存されません。そのため、途中でアプリケーションを閉じずに同じ画像を再度印刷することを選択すると、デフォルトのプリンターに戻り、正しいプリンターを選択した場合でも、そのプリンターがデフォルト設定にデフォルト設定されます。これには、間違ったサイズのラベル ストックの使用が含まれます。 . そのため、印刷するたびに、プリンターを選択し、正しい用紙を使用するように構成する必要があります。これは、実際の使用では受け入れられません。
オンラインで多くのことを検索した後、これに関する多数の投稿を見つけましたが、それらはすべて、PrintDialog.PrinterSettings
オブジェクトを保存し、それを使用して次のPrintDialog
インスタンスを初期化することについて語っています。ただし、WPF では、クラスのPrinterSettings
メンバーはありません。PrintDialog
これは Win Forms オブジェクトです。Win フォームと WPF の PrintDialog オブジェクトが異なる理由はわかりませんが、それはおそらく答えられない質問です。本当の問題は、私が今何をしているかです。必要に応じて、車輪全体を再発明し、独自のプリンター セレクターとプリンター構成ページを作成し、オブジェクトを使用して画像を印刷し、完全PrintDocument
にバイパスすることができます。PrintDialog
完全に必要でない限り、私はむしろこれをしたくありません。の表示PrintDialog
いいです、それは人々が慣れ親しんでいるものであり、組み込みのプリンターを構成するすべての機能が既にあります。しかしPrintDialog
、適切なプリンターを選択して適切なプリンター設定を使用するために、WPF で初期化するにはどうすればよいですか? Windows フォームを使用していれば、これが組み込まれます。WPF に相当するものは何ですか?
二次的な質問は、WPF に相当するものがない場合、これを処理するための推奨される方法は何ですか? ユーザーがアプリケーション内でプリンターを構成できるようにする必要はありません。私が望んでいるのは、これまでに作成された他のすべての PC アプリケーションと同様に、次に印刷するときに選択した以前の設定を記憶することだけです。どうしてこれがそんなに難しいのでしょうか?
誰でも提供できるヘルプは大歓迎です。その間、私はことわざの車輪を再発明する道を進んでいます。すぐに簡単な答えが得られることを願っています。
ありがとう!