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

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

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

Re[5]: WebサーバーでPDF変換を行う


(過去ログ 103 を表示中)

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

■61725 / inTopicNo.1)  WebサーバーでPDF変換を行う
  
□投稿者/ Mira (61回)-(2011/08/31(Wed) 16:16:53)

分類:[ASP.NET (VB)] 

表題の通りWebサーバーでPDFの変換(プリンターを使用した変換です)
を行おうと思っているのですが

適切なソフトがなかなか見つかりません

今まで試したソフト
Acrobat Distiller (ユーザーのログインが必要だったりサーバーで使用するには不安定)
CubePDF (無料版はGUI操作が前提)
PDFCreator (VBAのサンプルはあるが結局はGUI操作が前提)

条件としては
・変換後ファイルの指定から印刷まですべてコードで制御できる
・よくわかんないけどスレッドセーフである^^;
・出来れば無料(有料でも高くないと嬉しい)

みなさんが愛用しているソフト等あれば紹介してくださいm(_ _)m

環境はWindows Server 2003 FrameWork 2.0です
引用返信 編集キー/
■61726 / inTopicNo.2)  Re[1]: WebサーバーでPDF変換を行う
□投稿者/ 魔界の仮面弁士 (2341回)-(2011/08/31(Wed) 17:04:22)
No61725 (Mira さん) に返信
> Webサーバーで
クライアント用であれば、国内外に幾つかあるのですけれどね…。
http://www.bullzip.com/products/pdf/info.php


> PDFの変換(プリンターを使用した変換です)
"Microsoft Office Document Image Writer"
"Microsoft Office Live Meeting Document Writer"
などのように、任意の文書ファイルを「印刷」することで
PDF 化するタイプの製品を探しているのでしょうか。

それとも、プリンター変換かどうかには拘りが無く、
とにかく PDF 帳票を作成できれば良いのでしょうか。


> みなさんが愛用しているソフト等あれば紹介してくださいm(_ _)m
PDF の作成については、うちは ActiveReports を使っています。
iText.NET を使っている案件もあったかも。
http://www.grapecity.com/japan/support/database/p7_406.htm
http://www.atmarkit.co.jp/fdotnet/dotnettips/309aspgenpdf1/aspgenpdf1.html


その他、プリンタードライバーに依存しないPDF生成ツール(Super Visual Formade等)も
ありますが、そうした製品の場合は価格面で要件を満たせないかも知れません。


> Acrobat Distiller (ユーザーのログインが必要だったりサーバーで使用するには不安定)
そもそも、クライアント版をサーバーで使うのはライセンス違反だと思いますよ。
サーバー版については、CPUライセンスだと100万円単位の金額になるはず。
http://cloud.watch.impress.co.jp/epw/cda/software/2007/12/21/11926.html
http://hitachisoft.jp/products/adobe/support/vup/acrds_20100217.html


> ・変換後ファイルの指定から印刷まですべてコードで制御できる
> ・出来れば無料(有料でも高くないと嬉しい)
自前でPDFを生成する…というのは駄目ですよね、やっぱり。
http://www.kobu.com/docs/pdf/pdfxhand.htm


> ・よくわかんないけどスレッドセーフである^^;
ASP.NET の利用を前提にしている製品なら、大抵はスレッドセーフだと思います。
ただし、「プリンターを使用した変換」であるならば、同時出力は基本的に無理かも知れません。
印刷指示自体は同時に発行できたとしても、処理自体はプリンターキューに溜まった順に処理されるでしょうし。
引用返信 編集キー/
■61728 / inTopicNo.3)  Re[2]: WebサーバーでPDF変換を行う
□投稿者/ Mira (62回)-(2011/08/31(Wed) 17:31:50)
魔界の仮面弁士さん回答ありがとうございます

> などのように、任意の文書ファイルを「印刷」することで
> PDF 化するタイプの製品を探しているのでしょうか。

今探しているのはこれになります。
Word文書(ここは状況によって変わります)をPDFに変換しようとしています

>>・よくわかんないけどスレッドセーフである^^;
> ASP.NET の利用を前提にしている製品なら、大抵はスレッドセーフだと思います。

PDFCreatorで私が望んでいることができそうなのですがサンプルを見ていただいたらわかると思うのですが
http://www.excelguru.ca/node/21

サンプルコードの前後の
Shell "taskkill /f /im PDFCreator.exe", vbHide
が気になって眠れません・・・これでスレッドセーフなのでしょうか・・・
引用返信 編集キー/
■61738 / inTopicNo.4)  Re[3]: WebサーバーでPDF変換を行う
□投稿者/ 魔界の仮面弁士 (2342回)-(2011/08/31(Wed) 23:55:44)
No61728 (Mira さん) に返信
> Word文書(ここは状況によって変わります)をPDFに変換しようとしています

だとすると、どのプリンタードライバーを利用するかとは別の問題で、
ASP.NET での動作は難しいように思えます。


たとえば、Word 文書の印刷を行うには、通常は Microsoft Word が必要になります。
そして Office は、オートメーション動作であれコマンドラインからの起動であれ、
サーバーサイドでの動作をサポートしていないはずです。ライセンス的な問題もありますし。
http://support.microsoft.com/kb/257757/ja

ASP.NET サーバー上での動作を目的として Word を導入することができないとなれば、
代わりとなるソフトは、*.doc や *.docx を印刷または直接 PDF 変換する機能を持っており、
かつ、それがサーバー上での動作をサポートしていなければなりません。

しかも、Word 文書以外についても同様に対応ソフトを探す必要があるようですから、
それはかなり難しいのでは無いでしょうか。(私はそういった製品やサービスを知りません。)


サービスでは無く、デスクトップアプリとして PDF 印刷処理させるためのサーバーを
別途用意しておき、そのサーバーに対して、ASP.NET から処理依頼をかける仕組みを構築するのなら、
PDF プリンター + ファイル印刷用アプリの組み合わせで対処できるかも知れません。

# ライセンス面で問題がでるかどうかは別として。


> サンプルコードの前後の
そこにあるのは VBA のコードでしょうか。PDFCreator のことは知らないのですが、
サンプルの中には、サーバー動作を考慮したサンプルもあるのでしょうか?
(PDFCreator が今回の案件を満たせるのかどうかという点について、私は情報を持っていません)

仮にサーバー動作を保証していないのだとしたら、スレッドセーフかどうかとは関係無く、
今回の要件には使えないと思います。


> Shell "taskkill /f /im PDFCreator.exe", vbHide
Set pdfjob = New PDFCreator.clsPDFCreator
という記述もありましたが、PDFCreator というのは ActiveX EXE なのでしょうか?


> が気になって眠れません・・・これでスレッドセーフなのでしょうか・・・
Shell 関数はどうだか知りませんが、少なくとも、exe を呼び出すための
Process.Start メソッドについてはスレッドセーフですね。

で、提示されたコマンドラインだと、起動中の "PDFCreator.exe" が強制終了させられますね。
PDFCreator.exe を同時実行させないを前提としているようなので、このロジックのまま使うなら、
同時に起動される事が無いよう、同時実行制御も組み込まないといけないように思います。
引用返信 編集キー/
■61740 / inTopicNo.5)  Re[4]: WebサーバーでPDF変換を行う
□投稿者/ Mira (63回)-(2011/09/01(Thu) 09:10:57)
> で、提示されたコマンドラインだと、起動中の "PDFCreator.exe" が強制終了させられますね。
> PDFCreator.exe を同時実行させないを前提としているようなので、このロジックのまま使うなら、
> 同時に起動される事が無いよう、同時実行制御も組み込まないといけないように思います。

こういうことをスレッドセーフではないと言うものだと思ってました・・・
(個々のプロセスがスレッドセーフであるかとかそういう議論ではなく全体の流れとしてです)

サーバーで使用するサンプルは探せていません。あれば教えてください
使用中ならタイムアウト時間を設けてから強制終了するようなコードに変える予定ですが・・・

ということで自己解決しておきます
解決済み
引用返信 編集キー/
■61743 / inTopicNo.6)  Re[5]: WebサーバーでPDF変換を行う
□投稿者/ 魔界の仮面弁士 (2343回)-(2011/09/01(Thu) 09:47:27)
2011/09/01(Thu) 09:57:09 編集(投稿者)

No61740 (Mira さん) に返信
> こういうことをスレッドセーフではないと言うものだと思ってました・・・

taskkill.exe には ProcessId を指定して終了させる機能もありますので、
そうしたコードに書き換えれば、同名のプロセスが複数同時に起動していたとしても、
個別に終了させることは可能かも知れません。もっとも、対象のプロセスが
そうした同時処理に対応したアプリケーションなのかどうかは分かりませんし、
それがサーバー動作として望ましいものであるかは、また別の問題になりますが。


> サーバーで使用するサンプルは探せていません。あれば教えてください

別製品ですが、このようなものがあるようです。
http://www.iothe.co.jp/


> 使用中ならタイムアウト時間を設けてから強制終了するようなコードに変える予定ですが・・・

何にせよ、普通のデスクトップアプリケーション経由で、PDFプリンターに
出力させるという作りにすることは、ASP.NET では避けた方が良いでしょう。

デスクトップアプリの多くは、エラー発生時(メモリ不足、I/Oエラー等)において、
それをメッセージボックスで伝えたり、続行すべきかの確認を
ユーザーに求めるようなものが多いかと思います。
(たとえば『NOTEPAD /P C:\存在しないファイル.TXT』といったパターンなど)

しかしサービスは基本的に無人で運用される事が前提です。
サーバー上に対人向けのメッセージが出ても、Webクライアント側では
対処できません。サーバー側にしても、そうしたユーザー応答の
メッセージすべてに対し、システム的に対応させるのは難しいでしょう。
(タイムアウトとしてプロセスを殺すことぐらいはできるかもしれませんが)

ゆえに、文書ファイルの PDF 変換を求めるのであれば、
デスクトップアプリを利用する方法では無く、サーバーでの
変換処理向けに開発されたツールを利用する事を強くおすすめします。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -