C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: 印刷時のページ設定


(過去ログ 111 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■66128 / inTopicNo.1)  印刷時のページ設定
  
□投稿者/ のぶ (12回)-(2013/04/02(Tue) 17:17:07)

分類:[C#] 

いつもお世話になっています。

C#において、印刷するアプリケーションを作成しています。
現在つまづいている箇所は「A4縦用紙にデバッグ時は手差しから、本番時はトレイから印刷する」という事です。

以下のように記述して、実際のプリンターで印刷しても既定のトレイ(?)から印刷されてしまいます。
そして、手差しが設定できていないので、A4縦の設定も出来ていないのでは?と思っています。
PageSetupDialogを使って設定すれば可能ですが、A4縦と固定された印刷フォーマットを作成しますので、
PageSetupDialogを使わずに行いたいと考えています。
以上、よろしくお願い致します。

コード抜粋

  class ReportSendContent : PrintDocument
  {
    public ReportSendContent()
    {
      this.PrintPage += new PrintPageEventHandler(ReportSendContent_PrintPage);
      //this.PrinterSettings.DefaultPageSettings.PaperSource.RawKind = (int)PaperSourceKind.Manual; //設定できない
    }

    void ReportSendContent_PrintPage(object sender, PrintPageEventArgs e)
    {
      foreach (PaperSize pSize in this.PrinterSettings.PaperSizes) //用紙サイズをA4
      {
        if (pSize.Kind == PaperKind.A4)
        {
          this.pSize = pSize;
          e.PageSettings.PaperSize = pSize;
        }
      }

      foreach (PaperSource item in e.PageSettings.PrinterSettings.PaperSources) //手差しにしたい
      {
        if (item.Kind == PaperSourceKind.Manual)
          e.PageSettings.PaperSource = item;
      }
      e.PageSettings.Landscape = false; //用紙向きを縦
      
      /*
       * 描画処理等
       */
    }
  }

引用返信 編集キー/
■66131 / inTopicNo.2)  Re[1]: 印刷時のページ設定
□投稿者/ shu (257回)-(2013/04/02(Tue) 17:48:42)
No66128 (のぶ さん) に返信
> this.PrintPage += new PrintPageEventHandler(ReportSendContent_PrintPage);
> //this.PrinterSettings.DefaultPageSettings.PaperSource.RawKind = (int)PaperSourceKind.Manual; //設定できない
RawKindはPaperSourceに設定されている内容であり変更は出来ません。
例えばトレイ1が実際にはカセットなのに手差しにして下さいと指定しても無理

PaperSource自体を該当するものに変更する必要があります。

http://msdn.microsoft.com/ja-jp/library/system.drawing.printing.pagesettings.papersource(v=vs.80).aspx
引用返信 編集キー/
■66132 / inTopicNo.3)  Re[2]: 印刷時のページ設定
□投稿者/ のぶ (13回)-(2013/04/02(Tue) 18:13:05)
ご回答ありがとございます。

No66131 (shu さん) に返信
> ■No66128 (のぶ さん) に返信
>> this.PrintPage += new PrintPageEventHandler(ReportSendContent_PrintPage);
>> //this.PrinterSettings.DefaultPageSettings.PaperSource.RawKind = (int)PaperSourceKind.Manual; //設定できない
> RawKindはPaperSourceに設定されている内容であり変更は出来ません。
> 例えばトレイ1が実際にはカセットなのに手差しにして下さいと指定しても無理
変更できなかったので完全に間違っているとは思っていましたが、
理由が分かりすっきりしました。ありがとうございます。


>
> PaperSource自体を該当するものに変更する必要があります。
>
> http://msdn.microsoft.com/ja-jp/library/system.drawing.printing.pagesettings.papersource(v=vs.80).aspx
doc = new ReportSendContent();
foreach (PaperSource item in doc.PrinterSettings.PaperSources)
{
if (item.Kind == PaperSourceKind.Manual)
doc.DefaultPageSettings.PaperSource = item;
}
上記の様にしたら手差しから正しく印刷できました。
しかし、他の疑問も浮かんでしまいました。

1.PrintDocumentから設定できるPaperSourceとPrintPageEventArgsから設定できるものの違いは?
2.PrintPageEventArgsから設定できないのになぜあるの?というか、そもそもここで設定しようとした私がおかしい?
3.継承しているのでコンストラクタで記述した方がスマート?
お時間ありましたらよろしくお願いします。
引用返信 編集キー/
■66134 / inTopicNo.4)  Re[3]: 印刷時のページ設定
□投稿者/ 魔界の仮面弁士 (189回)-(2013/04/02(Tue) 18:52:46)
No66132 (のぶ さん) に返信
> 1.PrintDocumentから設定できるPaperSourceとPrintPageEventArgsから設定できるものの違いは?
複数ページで構成されるドキュメントに対して、
ページごとに用紙設定を変えたい場合がありますよね。

そのような場合に、QueryPageSettings / PrintPage イベントから
PageSettings を変更できるということです。この場合、現在のページのみが
変更され、ドキュメントの既定のページ設定には影響を与えません。


> 2.PrintPageEventArgsから設定できないのになぜあるの?というか、そもそもここで設定しようとした私がおかしい?
PrintPage イベントで使われる PageSettings プロパティは、
現在のページのプリンタ設定を「取得」するためのものです。

ページごとに異なるページ設定を使用してドキュメントを印刷するには、
QueryPageSettings イベントで QueryPageSettingsEventArgs.PageSettings を
処理します。


> 3.継承しているのでコンストラクタで記述した方がスマート?
御随意に。
引用返信 編集キー/
■66138 / inTopicNo.5)  Re[4]: 印刷時のページ設定
□投稿者/ のぶ (14回)-(2013/04/03(Wed) 09:54:08)
No66134 (魔界の仮面弁士 さん) に返信

ご回答ありがとうございます。
PrintDocumentに対してはそのドキュメントの既定の設定。
個々のページ設定はQueryPageSettingで行う。
PrintPageで参照できるPageSettingは現在の設定を取得するもの。
これが理解できていなかったようです。
# MSDNを読み返したらちゃんと書かれてますね・・・



お教え頂いた情報をもとに色々調べてみたらこのページ( http://dobon.net/vb/bbs/log3-46/27436.html )の
Re[11]の魔界の仮面弁士さんの回答が素晴らしく分かりやすかったです。

> PrintPage イベントは、「各ページの印刷時」に発生するイベントです。
> ここには「n ページ目の印刷内容」を記述します。

> QueryPageSettings イベントは、PrintPage イベントの直前に発生します。
> Query とは質問とか問い合わせといった意味であり、ここには
> 「n ページ目の用紙・印刷設定」を記述します。
>
>
> 複数ページの印刷を行う場合、ページ数分のイベントが発生します。
> 現在何ページ目を印刷しているのかは、自身で管理しておいてください。
忘れないようにしたいと思います。
ありがとうございました。

理解できたと思うのでこれで解決としたいと思います。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -