8

私が書いている 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 アプリケーションと同様に、次に印刷するときに選択した以前の設定を記憶することだけです。どうしてこれがそんなに難しいのでしょうか?

誰でも提供できるヘルプは大歓迎です。その間、私はことわざの車輪を再発明する道を進んでいます。すぐに簡単な答えが得られることを願っています。

ありがとう!

4

1 に答える 1

10

WPF にはPrintTicketPrintQueueクラスがあります (およびPrintDialog対応するプロパティがあり、保存した設定で初期化できます)。

簡単にするために、最初の設定を用紙設定、2 番目の設定をプリンター設定 (選択したプリンター) と見なすことができます。

于 2013-07-28T20:21:40.700 に答える