DOBON.NET DOBON.NETプログラミング掲示板過去ログ

VisualStudioで印刷レイアウトの設定

環境/言語:[OS : Windows 7 / 言語 : C# / .NET Framework : 4]
分類:[.NET]

【解決したい問題】

いつもお世話になっております。
まったくの初心者でありまして、不手際ご了承ください。

本題なのですが、

VisualStudio2013 C#でWindowsフォームのアプリケーションを作成しています。
SQLServerに取得されたデータを呼び出して

印刷ボタンを押す→自分でレイアウトしたレポートに貼り付けて
文書のようにして(帳票のようにはなってほしくないと思っています)
PDF形式で出力(印刷)されるようにしたいと思っています。

private void btninsatsu_Click(object sender, EventArgs e)
{
//PrintDocumentオブジェクトの作成
System.Drawing.Printing.PrintDocument pd =
new System.Drawing.Printing.PrintDocument();
//PrintPageイベントハンドラの追加
pd.PrintPage +=
new System.Drawing.Printing.PrintPageEventHandler(pd_PrintPage);

//PrintDialogクラスの作成
PrintDialog pdlg = new PrintDialog();
//PrintDocumentを指定
pdlg.Document = pd;
//印刷の選択ダイアログを表示する
if (pdlg.ShowDialog() == DialogResult.OK)
{
//OKがクリックされた時は印刷する
pd.Print();
}

ここまででPDF出力は確認できたのですが、
肝心の内容をセットする方法が分かりません。

 //プリントページの設定?
private void pd_PrintPage(object sender,
System.Drawing.Printing.PrintPageEventArgs e)
{
≪この中にSQL文を入力してデータを呼び出すのでしょう?≫
 
}

それともページの大きさからフォント、レイアウトまで設定し、引き出したデータを嵌め込むには違う手立てがあるのでしょうか?

サンプル画像の空いている部分にSQLから呼び出したものを入れたいと思っています。
下手な説明で申し訳ありませんが
何かご教授いただければ幸いです。


よろしくお願いいたします。
2014/08/20(Wed) 17:02:02 編集(投稿者)
2014/08/20(Wed) 17:01:48 編集(投稿者)

サンプル画像を添付し忘れていました。
以下になります。
よろしくお願いいたします。
添付ファイル: 1408520896.png (11 KB)
■No32557に返信(かさぶたさんの記事)
> 文書のようにして(帳票のようにはなってほしくないと思っています)
ここの意味が良く分からなかったのですが、
Microsoft Report の PDF 出力機能では駄目でしょうか。

http://hanatyan.sakura.ne.jp/vbnetbbs/wforum.cgi?mode=allread&no=9546
http://bbs.wankuma.com/index.cgi?mode=al2&namber=48260&KLOG=81
http://needtec.exblog.jp/21672589/



> PDF形式で出力(印刷)されるようにしたいと思っています。

PrintDocument をお使いということは、PDFファイルとして保存されるタイプの
仮想プリンタードライバーを併用されているのでしょうか?


> 肝心の内容をセットする方法が分かりません。
「内容をセット」とのことですが、PrintDocument クラスには、
データバインドなどの機能は用意されていません。

e.Graphics.DrawString などを使うなどして、出力したい内容を
すべて自前で描画処理としてコーディングする必要があります。
改ページ処理、折り返し処理、禁則処理、フォント、文字色、座標指定等々。


> ≪この中にSQL文を入力してデータを呼び出すのでしょう?≫
データの取得は、PrintPage イベントの中で行っても良いですし、
Printメソッドを呼ぶ前に、あらかじめ DataSet 等に読み込んでおき、
その内容を描画しても良いかと思います。
ご返信ありがとうございます。
VisualStudioもC#も初心者の私にはありがたい情報をいただけました。

> http://hanatyan.sakura.ne.jp/vbnetbbs/wforum.cgi?mode=allread&no=9546
> http://bbs.wankuma.com/index.cgi?mode=al2&namber=48260&KLOG=81
> http://needtec.exblog.jp/21672589/


上記のサイトを参考にさせていただきます。
ありがとうございます。
>
>>PDF形式で出力(印刷)されるようにしたいと思っています。
>
> PrintDocument をお使いということは、PDFファイルとして保存されるタイプの
> 仮想プリンタードライバーを併用されているのでしょうか?

おそらくその通りです。
仮想プリンタでPDFをあるファイルにPDF形式で保存しようと思っています。
(おそらくというのは私の知識不足ですが)

>
>>肝心の内容をセットする方法が分かりません。
> 「内容をセット」とのことですが、PrintDocument クラスには、
> データバインドなどの機能は用意されていません。

なるほど、、、
VisualStudio内にReport.rdlcというのを作って
そこにデータを埋め込めるのかと思っていました。
勉強になります。


> e.Graphics.DrawString などを使うなどして、出力したい内容を
> すべて自前で描画処理としてコーディングする必要があります。
> 改ページ処理、折り返し処理、禁則処理、フォント、文字色、座標指定等々。

こちらも大変有益な情報でした。
勉強して処理のコードを入力したいと面ます。



>>≪この中にSQL文を入力してデータを呼び出すのでしょう?≫
> データの取得は、PrintPage イベントの中で行っても良いですし、
> Printメソッドを呼ぶ前に、あらかじめ DataSet 等に読み込んでおき、
> その内容を描画しても良いかと思います。

データを1度別フォームのtextboxなどに取得して
そのテキストをレポートのコーティング時に呼び出すように
したいと思います。



改めて、ご返信ありがとございます。
再度いろいろ試して結果をご報告するようにいたします。

また、何かご教授いただければ幸いです。

よろしくお願いいたします。
いつもお世話になっております。


初心者の私なりに
やったことのご報告をさせていただきます。

PDF出力に関してはプリントプレビュー→ダイアログを開いて
PDFで印刷出力まで理解しました。



またしても教えていただきたいことがあります。

@レポート.rdlcとレポートビューの関連の方法
ReportViewerタスク→レポートの選択
→そのあとはReport_Loadで何を書けばプリントプレビューでレポートが表示されるようになるのでしょうか?

private void reportViewer1_Load(object sender, EventArgs e)
{
       <ここの部分のプログラム>
}



よろしくお願いいたします。
■No32567に返信(かさぶたさんの記事)
> →そのあとはReport_Loadで何を書けばプリントプレビューでレポートが表示されるようになるのでしょうか?

PrintPreviewControl や PrintPreviewDialog で印刷する場合は、
それらの Document プロパティに「PrintDocument」を渡してやれば OK です。
.rdlc を指定する必要はありません(そもそも指定できない)。


> PDF出力に関してはプリントプレビュー→ダイアログを開いて
> PDFで印刷出力まで理解しました。

・PrintPreviewControl
・PrintPreviewDialog
・PrintDocument

これら↑は、レポートファイル(.rdlc)とは無関係の代物です。

今回利用したいのは、『PrintDocument』による印刷手法でしょうか。
それとも 『.rdlc』による印刷手法でしょうか?
(このほか『Crystal Reports for Visual Studio』という手段もあります)


No32559 にも書きましたが、『PrintDocument』を使う方法の場合は、
「PrintDocument の PrintPage イベント」にて
  e.Graphics.DrawString("あいうえお", this.Font, Brushes.Red, 100, 100);
などのコーディングを施すことで出力することになります。

PrintDocument は、ドラッグ&ドロップでデザインするタイプの帳票ではなく、
全てをコーディングで『描画』するために用意された仕組みであり、
.rdlc のレポート機能とは無関係である点に注意して下さい。


なお、PrintDocument での印刷手順は、下記の [印刷] の項にまとめられて
いますので、そちらを参照して下さい。
http://dobon.net/vb/dotnet/graphics/index.html



一方、.rdlc に対して用いるのは、PrintPreviewControl コントロールではなく
ReportViewer コントロールです。フォームに貼った ReportViewer を選択すると、
その右上にタスクボタン(三角アイコン)が現れるので、そこから印刷したい
.rdlc ファイルを選択してください。

デザイン時ではなく実行時に .rdlc を指定したい場合には、
 reportViewer1.LocalReport.ReportEmbeddedResource = 埋込リソース名;
もしくは
 reportViewer1.LocalReport.ReportPath = rdlcのパス;
を使います。



今回の場合は、DataSet やビジネスオブジェクトを作るほどでもないので、
rdlc の「レポートデータ」ペインにて、「パラメーター」を追加した上で、
  reportViewer1.LocalReport.SetParameters(new ReportParameter("ReportParameter1", textBox1.Text));
  reportViewer1.LocalReport.SetParameters(new ReportParameter("ReportParameter2", textBox2.Text));
  reportViewer1.RefreshReport();
などのようにして割り当てると良いでしょう。


レポートのデザイン方法や呼び出し方など、具体的な使い方を
掲示板で細かく伝えることは難しいので、基本的な使い方は、
No32559 で紹介した URL にあるチュートリアルにて学んで下さい。

その中で、チュートリアルの中で不明な箇所があれば、それらを具体的に
質問していただければと思います。自作アプリに組み込むのはその後ですね。


なお、No32559 で 1 番目に紹介した URL は、レポートを PDF として
出力するためのコードです。(データベース等は使っていません)
ただしこれは VB で記載されたものなので、読みにくければ 3 番目の URL で
学ばれると良いかと思います。

3 番目の URL は、C# によるチュートリアルで、SQL Server データベースから
取得したデータを出力する方法のほか、「単票形式の帳票作成」の項では、
データベースを伴わない任意のデータを印字する方法も記載されています。

DOBON.NET | プログラミング道 | プログラミング掲示板