tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルボタンをクリックでPDFを作成したい
記事No9546
投稿日: 2009/11/05(Thu) 11:03
投稿者水の都
Sql Server2008 Pro : Visual Studio2005 Standard(VB) : Windows XP 環境で開発しています

Formのボタンをクリックした際、別フォーム(レポート)のページを、PDFで出力するにはどのような方法がありますでしょうか。
別フォーム(レポート)は、(Print専用テーブルを作成し)Sql Serverから取得するのがベストだとは考えていますが、他の方法でも構いません。

 皆様ご教授お願い致します。

[ツリー表示へ]
タイトルRe: ボタンをクリックでPDFを作成したい
記事No9547
投稿日: 2009/11/05(Thu) 11:59
投稿者オショウ
>  Formのボタンをクリックした際、別フォーム(レポート)のページを、PDFで出力するにはどのような方法がありますでしょうか。

  どこからデータを取得してこようが・・・
  要はPDFを作成でいなかればならない。
  と言うのであれば、フリーのPDF作成用プリタードライバー
  を導入して、行うとか・・・

  また、PSプリンタードライバを使って、PSファイルを作成
  し、GhostScriptで、PDFに変換させるとか・・・

  方法はいろいろあろうかと・・・

以上。参考まで

[ツリー表示へ]
タイトルRe^2: ボタンをクリックでPDFを作成したい
記事No9549
投稿日: 2009/11/05(Thu) 14:03
投稿者水の都
>   どこからデータを取得してこようが・・・
>   要はPDFを作成でいなかればならない。
>   と言うのであれば、フリーのPDF作成用プリタードライバー
>   を導入して、行うとか・・・
>
>   また、PSプリンタードライバを使って、PSファイルを作成
>   し、GhostScriptで、PDFに変換させるとか・・・
>

 オショウ様 早速のご回答ありがとうございます
 PostScriptファイルを使ってのPDF作成を考えてみます。
この場合使用するPCが複数ある場合、PC毎にインストール設定が
必要になるというでしょうか?

[ツリー表示へ]
タイトルRe^3: ボタンをクリックでPDFを作成したい
記事No9554
投稿日: 2009/11/05(Thu) 18:12
投稿者オショウ
> この場合使用するPCが複数ある場合、PC毎にインストール設定が
> 必要になるというでしょうか?

  そういう前提条件なら・・・厄介ですネ!

  私は基本的に有償ソフトを保有しているので、そういう問題に
  抵触しない、広範囲で活用できるものでソフト開発してます。

  ので、あくまでフリーで・・・
  となると、魔界の仮面弁士さんの方法が適切かと・・・

※ サーバーサイドと言うなら、SQL Serverの稼動するマシン上で、
  SQL Server上からPDF作成も可能は可能です。
  が、なんか余計難しいことやらないといけないハメになりそう
  なので、敢えてオススメしません。

以上。

[ツリー表示へ]
タイトルRe^4: ボタンをクリックでPDFを作成したい
記事No9556
投稿日: 2009/11/05(Thu) 18:53
投稿者水の都
オショウ様

度々のご回答ありがとうございました。

今回は複数PCへの配布という事もあり、魔界の仮面弁士様に教えて頂いた方法で
試してみようと思います。

ありがとうございました。

[ツリー表示へ]
タイトルRe: ボタンをクリックでPDFを作成したい
記事No9548
投稿日: 2009/11/05(Thu) 12:49
投稿者魔界の仮面弁士
> Formのボタンをクリックした際、別フォーム(レポート)のページを、PDFで出力するにはどのような方法がありますでしょうか。

レポートを PDF でエクスポートする事ができないのでしょうか?
http://technet.microsoft.com/ja-jp/library/ms159713.aspx
ビューワーから出力するなら、こんな感じで。
File.WriteAllBytes("C:\sample.PDF", ReportViewer1.LocalReport.Render("PDF", …))

それとも、複数のフォームを連携させる部分で躓いているのでしょうか?
http://dobon.net/vb/dotnet/form/accessanotherformdata.html

[ツリー表示へ]
タイトルRe^2: ボタンをクリックでPDFを作成したい
記事No9550
投稿日: 2009/11/05(Thu) 14:20
投稿者水の都
> レポートを PDF でエクスポートする事ができないのでしょうか?
> http://technet.microsoft.com/ja-jp/library/ms159713.aspx
> ビューワーから出力するなら、こんな感じで。
> File.WriteAllBytes("C:\sample.PDF", ReportViewer1.LocalReport.Render("PDF", …))
>

 魔界の仮面弁士様 ご回答ありがとうございます。

 SQL ServerからPDF作成方法すごい魅力的なのですが、今回各クライアントPCから複数同時でSQL Serverへのアクセス(データ更新とPDF作成)の可能性があります。複数アクセス時
は特別なコントロールが必要になったりするのでしょうか?。
(SQL Serverはデータの保存だけで、基本はクライアント側のVBで管理を考えていました)

[ツリー表示へ]
タイトルRe^3: ボタンをクリックでPDFを作成したい
記事No9551
投稿日: 2009/11/05(Thu) 15:20
投稿者魔界の仮面弁士
> (SQL Serverはデータの保存だけで、基本はクライアント側のVBで管理を考えていました)

サーバーサイドでの作成も可能ですし、クライアント側での PDF 作成も可能です。
たとえば下記では、SQL Server に接続する事無く、DataTable の内容を
PDF として出力しています。


1. 新規に WinForm アプリを作成。
2. [プロジェクト]-[新しい項目の追加]で、"データセット" DataSet1.xsd を追加。
3. DataSet デザイナを右クリックして、[追加]-[データテーブル]を選択。DataTable1 が生成される。
4. DataTable1 を右クリックして、[追加]-[列]を選択。Column1 が生成される。
5. 同様にして、Column2 列も追加する。
6. [プロジェクト]-[新しい項目の追加]で、"レポート" Report1.rdlc を追加。
7. ツールボックスから[一覧]を選択し、Report1 のデザイナ上に貼り付ける。
8. [データ]-[データソースの表示]を選択し、データソースウィンドウを開く。
9. データソースウィンドウから、DataSet1-DataTable1 の下にある Column1/2 を選択し、
 それを Report1 上に貼った「一覧(list1)」の中に配置する。
10. Form1 デザイナに戻り、ツールボックスから ReportViewer を貼りつける。
11. ReportViewerのタスクで、先ほどの Report1.rdlc レポートを選択する。
12. Form をダブルクリックして、コードウィンドウを開く。
 すでに、Form1_Load に『Me.ReportViewer1.RefreshReport()』と書かれているので、
 その直前に以下のダミーデータ作成処理を追加する。

Me.DataSet1.DataTable1.Rows.Add("123", "あいうえお")
Me.DataSet1.DataTable1.Rows.Add("456", "かきくけこ")
Me.DataSet1.DataTable1.Rows.Add("789", "さしすせそ")

13. Form1 デザイナに戻り、ボタンを貼る。(Button1)
14. Button1 をダブルクリックして、Button1_Click に 下記コードを追加。

Dim bin() As Byte = Me.ReportViewer1.LocalReport.Render( _
   "PDF", Nothing, Nothing, Nothing, Nothing, Nothing, Nothing)
My.Computer.FileSystem.WriteAllBytes("C:\sample.pdf", bin, False)
Process.Start("C:\sample.pdf")

15. アプリケーション実行。ボタンを押すと PDF が作成される。

[ツリー表示へ]
タイトルRe^4: ボタンをクリックでPDFを作成したい
記事No9555
投稿日: 2009/11/05(Thu) 18:46
投稿者水の都
魔界の仮面弁士様 

詳細な操作説明までご回答頂きありがとうございました。
ご教授頂きました方法で行わせて頂きます。

ありがとうございました。

[ツリー表示へ]