- PR -

VB.NETでPDFを表示

投稿者投稿内容
Kira
ぬし
会議室デビュー日: 2004/10/30
投稿数: 252
投稿日時: 2006-11-27 14:12
環境:VS2005 Standard

お世話になっております。
現在DBで登録されているPDFのLOBデータを
VB.NETで作ったもので表示する仕組みを考えております。

そこで、
ImageBoxやPictureBoxにLOBデータを流し込もうかと考えていたのですが、
PDFが対応していないことに気が付きました。
(Webのときは簡単にできたもので。。。)

VB.NETでPDFデータを表示する
なにかよい方法をご教授願えませんでしょうか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-11-27 15:18
引用:

Kiraさんの書き込み (2006-11-27 14:12) より:

VB.NETでPDFデータを表示するなにかよい方法をご教授願えませんでしょうか?


前後の文章から察するに、"Windows アプリケーションで" ですよね。

引用:

ImageBoxやPictureBoxにLOBデータを流し込もうかと考えていたのですが、PDFが対応していないことに気が付きました。(Webのときは簡単にできたもので。。。)


次のような方法で可能ではないでしょうか?
  1. Byte の配列に格納
  2. Byte の配列から MemoryStream のインスタンスを生成
  3. Image.FromStream メソッドから Image のインスタンスを生成
かなり想像で書いています。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-11-27 15:20
やったことはありませんが、
*.PDF が アクロバットリーダーなどに関連づいているなら
一時ファイル経由で実行してあげてはどうでしょうか?
_________________
かるあ のメモスニペット
HIRO
大ベテラン
会議室デビュー日: 2002/06/21
投稿数: 109
投稿日時: 2006-11-27 15:25
WebBrowserコントロールならPDFファイルを表示することが可能です。
(LOBデータを流し込めるかどうかはわかりませんが...)
_________________
--------------------------------------------
HIRO's.NET VB.NETとC#のTipsを掲載しています

[ メッセージ編集済み 編集者: HIRO 編集日時 2006-11-27 15:28 ]
Kira
ぬし
会議室デビュー日: 2004/10/30
投稿数: 252
投稿日時: 2006-11-27 16:22
>HIROさま・かるあさま
 WebBrowserコントロールならPDFファイルを表示することはできそうですが、
 Lobファイルが流し込めなさそうです。
 一時ファイルを作ると出来そうですが、
 できればファイルを作る方法は避けたいと考えております。

>じゃんぬねっとさま
 仰られた方法ですが、
 Image.FromStream メソッドから Image のインスタンスを生成
 する段階でファイルとして認識されないようでPDFファイルに変換できませんでした。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2006-11-27 16:59
引用:

 一時ファイルを作ると出来そうですが、
 できればファイルを作る方法は避けたいと考えております。



まず、PDF を自分で解析してレンダリングするんでも無い限り、PDF の表示には Acrobat Reader (に含まれている ActiveX コントロール)が必要です。

おそらく、Web ベースで開発した際も「Acrobat Reader がインストール済みであること」みたいな制限事項を設定しましたよね?

次に、Acrobat Rader の ActiveX コントロールにオンメモリでデータを引き渡す方法ですが、正当な方法は2つ考えられます。

・アプリケーションレベルで簡単な Web サーバ機能を実装し、その Web サーバ経由で PDF データを引き渡す。

・カスタムの Moniker(OLE/COM で定義されます)を実装して、Moniker 経由で PDF データを引き渡す。

前者は、BCL を使えば現実的なボリュームで実装できると思いますが、ポートを占有してしまうのが個人的には気に喰わないです。

後者は、真正面から問題を解決する手法ですが、BCL の COM サポートの限度を遥かに超えているので、かなり工数がかかると思います。


[ メッセージ編集済み 編集者: 渋木宏明(ひどり) 編集日時 2006-11-27 17:01 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-11-27 17:58
引用:

Kiraさんの書き込み (2006-11-27 16:22) より:

仰られた方法ですが、Image.FromStream メソッドから Image のインスタンスを生成する段階でファイルとして認識されないようでPDFファイルに変換できませんでした。


"PDF ファイルに変換" は関係ないと思いますが、バイナリ (いわゆる BLOB) でなければ無理でしょうね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2006-11-27 19:16
引用:

"PDF ファイルに変換" は関係ないと思いますが、バイナリ (いわゆる BLOB) でなければ無理でしょうね。



バイナリであっても無理です。

Image.FromFile() が受け付けるのは BMP, GIF, JPEG, TIFF といったところで、PDF までは読み込んでくれません。

スキルアップ/キャリアアップ(JOB@IT)