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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.66128 の関連記事表示

<< 0 >>
■66128  印刷時のページ設定
□投稿者/ のぶ -(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; //用紙向きを縦

    /*
    * 描画処理等
    */
    }
    }
親記事 /過去ログ111より / 関連記事表示
削除チェック/

■66131  Re[1]: 印刷時のページ設定
□投稿者/ shu -(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
記事No.66128 のレス /過去ログ111より / 関連記事表示
削除チェック/

■66132  Re[2]: 印刷時のページ設定
□投稿者/ のぶ -(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.継承しているのでコンストラクタで記述した方がスマート?
    お時間ありましたらよろしくお願いします。
記事No.66128 のレス /過去ログ111より / 関連記事表示
削除チェック/

■66134  Re[3]: 印刷時のページ設定
□投稿者/ 魔界の仮面弁士 -(2013/04/02(Tue) 18:52:46)
    No66132 (のぶ さん) に返信
    > 1.PrintDocumentから設定できるPaperSourceとPrintPageEventArgsから設定できるものの違いは?
    複数ページで構成されるドキュメントに対して、
    ページごとに用紙設定を変えたい場合がありますよね。

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


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

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


    > 3.継承しているのでコンストラクタで記述した方がスマート?
    御随意に。
記事No.66128 のレス /過去ログ111より / 関連記事表示
削除チェック/

■66138  Re[4]: 印刷時のページ設定
□投稿者/ のぶ -(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 ページ目の用紙・印刷設定」を記述します。
    >
    >
    > 複数ページの印刷を行う場合、ページ数分のイベントが発生します。
    > 現在何ページ目を印刷しているのかは、自身で管理しておいてください。
    忘れないようにしたいと思います。
    ありがとうございました。

    理解できたと思うのでこれで解決としたいと思います。
記事No.66128 のレス / END /過去ログ111より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -