質問するログイン新規登録
C#

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

Q&A

解決済

1回答

3163閲覧

PrintDocumentクラスを使っての両面印刷ができない

miiisya

総合スコア35

C#

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

0グッド

0クリップ

投稿2022/03/11 05:08

編集2022/03/11 05:46

0

0

C#でイメージの両面印刷を実行したいです。
PrintDocument クラスのプロパティに両面での印刷を指定しているのですが、実行すると片面のみしか印刷ができておりません。
プリンタ自体は両面に対応しているものなので、両面印刷は不可ではないと思うのですが...
やりよう知っている方いましたら教えていただきたいです。

C#

1 /// <summary> 2 /// 印刷ボタン押下イベント 3 /// </summary> 4 private void PrintButton_Click(object sender, EventArgs e) 5 { 6 //プリンタ名設定 7 var printerName = "プリンタ名"; 8 9 //PrintDocumentオブジェクトの作成 10 System.Drawing.Printing.PrintDocument pd = new System.Drawing.Printing.PrintDocument(); 11 12 pd.PrinterSettings.PrinterName = printerName; 13 //PrintPageイベントハンドラの追加 14 pd.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(pd_PrintPage); 15 //両面印刷機能の有無 16 //両面に設定 17 if (pd.PrinterSettings.CanDuplex) 18 { 19 pd.PrinterSettings.Duplex = Duplex.Horizontal; 20 } 21 22 //印刷開始 23 pd.Print(); 24 } 25 26 //PrintPageイベントハンドラ 27 private void pd_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) 28 { 29     { 30      //画像を読み込む 31      Image img = Image.FromFile("test.bmp"); 32      //画像を描画する 33      e.Graphics.DrawImage(img, e.MarginBounds); 34      //後始末をする 35       img.Dispose(); 36     } 37 }

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

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

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

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

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

YAmaGNZ

2022/03/11 05:37

複数ページ印字しているのでしょうか? 現在提示されているソースではそれが読み取れません。 最低でもe.HasMorePagesをどうしているのか記載してください。
miiisya

2022/03/11 05:47

掲載したコードが間違っていました。 HasMorePagesについては現在判定しておりません。 それによってページが1枚と認識されているせいで、両面印刷ができていないのでしょうか?
YT0014

2022/03/11 22:40 編集

guest

回答1

0

ベストアンサー

PrintDocument.PrintPage イベント現在のページの描画が必要な時に発生するイベントです。
1回のイベントに対して1ページ分の描画を行います。
なので紙からはみだそうが1回のイベントでの描画で複数ページとしては扱われません。

C#

1private void pd_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) 2{ 3 //1ページ分を描画 4 5 if(次のページがある?) 6 e.HasMorePages = true; 7 else 8 e.HasMorePages = false; 9}

こういう風にHasMorePagesをtrueにしてイベントハンドラを抜けるとすぐに2ページ目を印字するためにPrintPageが発生します。
その時に2ページ目の描画を行うようにしましょう。


回答を書いているうちに修正されたので
PrintPageEventArgs.HasMorePages プロパティの規定値はfalseとなっています。
なので指定しないと1ページとして扱われます。

投稿2022/03/11 05:55

編集2022/03/11 05:58
YAmaGNZ

総合スコア10679

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

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

miiisya

2022/03/11 06:00

ご回答いただきありがとうございます。 HasMorePagesの判定を追加してみましたが、そうすると、1ページ目が両面に印刷されてしまいました。
YAmaGNZ

2022/03/11 06:01

2回目のイベントでは当然2ページ目に印刷するものを描画しなくてはいけません。
miiisya

2022/03/11 06:06

納得いたしました。 1回目と2回目で同じものを描画してしまっておりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問