1

WPFアプリケーションでページを印刷しようとしています。PrintVisual()メソッドの使いやすさのおかげで、キャンバスとして作成することにしました。

問題は、プリンター名を動的に設定できないことです。[印刷ダイアログ]ボックスを使用することもできません。スタッフは印刷ボタンをクリックできる必要があり、割り当てられたプリンターに自動的に印刷されます(構成ファイルから読み取ることで割り当てられます)。 、Windowsのデフォルトプリンタに基づくものではありません)。これは、印刷ページのイベントハンドラー(PrintDocumentの一部です。たとえばpd.PrintPage += new PrintPageEventHandler(pageLayoutForPrint)))、プリンター名を(文字列として)設定することもできるため)を使用して可能ですが、怠惰になり、組み込みのメソッドを利用しようとしています。

私は印刷にとても慣れていませんが、ここに私の2つの質問があります

  1. PrintVisualメソッドを使用する場合、printerNameを設定できますか?

  2. printerNameを設定できない場合、キャンバスを印刷する最良の方法は何ですか?効果的に座標をマッピングして印刷し、それをプリンターに渡す理論です。たとえば、テキストボックスだけでドキュメントを印刷するには、次の擬似コードを使用できます。

    int left = textbox.Left;
    int top = textbox.Top;
    e.Graphics.DrawString(Textbox.Text, printFont, Brushes.Black, left, top, new StringFormat());

4

3 に答える 3

5

答えはここに埋め込まれています

WPFMVVMバックグラウンド印刷データバインディングの問題

そして短い答え:

1)System.Printingをインポートします(参照を追加する必要がある場合があります
2)このコードはそれを行います(すでに作成されたキャンバスがあると仮定します)!

        PrintDialog dialog = new PrintDialog();
        PrintQueue queue = new LocalPrintServer().GetPrintQueue(printerName);
        dialog.PrintQueue = queue;
        dialog.PrintVisual(canvas, "");
于 2012-05-13T11:20:53.463 に答える
0

PrintVisual()でPrintDialogを使用します。印刷ダイアログを表示する必要はありません。

于 2012-05-12T18:50:38.410 に答える
0

この単純なコードで簡単に行うことができます。申し訳ございませんが、ご質問が重複しています。

private void Button_Click(object sender, RoutedEventArgs e)
{
    PrintDialog _PrintDialog = new PrintDialog();

    _PrintDialog.PrintQueue = new PrintQueue(new PrintServer(), "Printer Name");

    _PrintDialog.PrintVisual(CanvasOrAnyVisualName, "Printing Job Name");
}
于 2019-02-11T06:13:49.333 に答える