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

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

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

Re[2]: PDF作成方法について


(過去ログ 112 を表示中)

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

■66163 / inTopicNo.1)  PDF作成方法について
  
□投稿者/ みき (1回)-(2013/04/05(Fri) 07:00:12)

分類:[.NET 全般] 

はじめまして。
お世話になります。

業務系システムでエクセルからPDFを作成しているのですが、
どうも時間がかかってしまい困っております。
処理が正しいかを含め、お知恵をお貸しいただけないでしょうか。

【実行環境】
・visual studio 2010
・Acrobat Distiller X
・acrobat standard10 
・Microsoft Excel2010 と2003
  ※ユーザー端末が複数あり、
Windows7にも関わらずofficeのみ2003が入っている端末もあるので
 プロジェクトの参照を変えた2バージョンのEXEを作って、います。
・Windows7

現在のPDF作成方法は以下になります。
1、Excelを開く
2、開いたエクセルの不要シートを非表示にして、
 workbook.printoutでpsファイルを出力する。
3、エクセルを閉じる(プロセスを解放)
4、psファイルをacrobat distillerのpdf変換でPDF変換する
5、処理を終了する。

2と4の処理で時間がかかってしまい、何かスマートではないのでは
と思っている次第です。
エクセルはグラフを多用していて、シート数も多くかつファイル数も多いので
それも時間のかかる一因かと思います。
2段階踏まずにAdobe PDFに直接に変換出来れば良いと思って調べているのですが、
見つけることが出来ず、良い方法がありましたらご教示いただけませんでしょうか。
引用返信 編集キー/
■66165 / inTopicNo.2)  Re[1]: PDF作成方法について
□投稿者/ shu (265回)-(2013/04/05(Fri) 09:31:16)
No66163 (みき さん) に返信

使ったことはないのですがiTextでPDFが作成できます。

http://blog.livedoor.jp/akf0/archives/51339655.html
http://itextpdf.com/
引用返信 編集キー/
■66168 / inTopicNo.3)  Re[1]: PDF作成方法について
□投稿者/ 魔界の仮面弁士 (190回)-(2013/04/05(Fri) 10:10:50)
> 【実行環境】
> ・visual studio 2010
実行環境に Visual Studio をインストールしてあるのですか…。
通常は .NET Framework だけで良いと思いますよ。


> ・Acrobat Distiller X
> ・acrobat standard10 
> ・Microsoft Excel2010 と2003
>   ※ユーザー端末が複数あり、
共有のサーバー上に Adobe Distiller Server を導入しているわけでは無く、
実行する各クライアントに Distiller のライセンスがあるのですね?


> Windows7にも関わらずofficeのみ2003が入っている端末もあるので
組合せとしては問題ないかと思います。
Office 2003 Service Pack 3 さえ適用しているのであれば。


> 2と4の処理で時間がかかってしまい、
どの程度かかっているのか分からないので、一般論となりますが:

PostSciript の生成に拘らないなら、Acrobat PDFWriter やいきなりPDF などの
「文書データから直接 PDF に変換するタイプの製品」を使う手もあります。
GDI での描画になるので品質は劣りますが、処理時間を短縮できるかと思います。

それでも遅い場合は、そもそもの文書データも見直してみてください。
サイズ0の画像や無用な空白セル設定が無いか、使用するフォント数を減らせないかなど。


ところで、PDF 仮想プリンターではなく、通常のプリンターへ出力した場合は
高速で処理されるのでしょうか。元データが大きかったり複雑だった場合には、
処理に時間がかかってしまうのも、ある程度仕方がないかも…。
引用返信 編集キー/
■66172 / inTopicNo.4)  Re[2]: PDF作成方法について
□投稿者/ LL (1回)-(2013/04/05(Fri) 16:33:11)
作成手順の2ですが
2.1 開いたエクセルの不要シートを非表示にするのに要する時間
2.2 workbook.printoutでpsファイルを出力するのに要する時間

のどちらで時間がかかるのかを切り分けたほうが良いかと思います

後、すべての端末で時間がかかるのか、それともExcel2010の端末で遅いのか2003で遅いのか
この辺も確認したほうが対応しやすいのではと思います

ちなみにExcel2010なら早い遅いは別として ExportAsFixedFormat() でPDFとして出力できますが
2003の方は結局は現在の処理の流れに行き着くのではないかと思います

少し視点が変わりますが、処理内容の一部を並列処理(System.Threading.Tasks.Parallel.ForEach・System.Threading.Tasks.Parallel.For )
にうまく置き換えればパフォーマンスはかなり改善すると思うので
並列処理で各ワークシートから個別のPDFファイルをいったん作成して
shu さんが提示しておられる iText を使用して結合するというような方法もいけるかもしれません。
引用返信 編集キー/
■66183 / inTopicNo.5)  Re[2]: PDF作成方法について
□投稿者/ みき (3回)-(2013/04/07(Sun) 00:17:14)
shu様

ありがとうございます。
iText、とても便利に使えそうですね。

ただ、サードパーティーのソフトウェアを使うには、お客様の許可が必要ですし、
Adobe Standardがありますので、使わせていただくのが難しそうです。

調べるのにお時間割いていただいたのに申し訳ありません。
ありがとうございます。


No66165 (shu さん) に返信
> ■No66163 (みき さん) に返信
>
> 使ったことはないのですがiTextでPDFが作成できます。
>
> http://blog.livedoor.jp/akf0/archives/51339655.html
> http://itextpdf.com/
引用返信 編集キー/
■66184 / inTopicNo.6)  Re[2]: PDF作成方法について
□投稿者/ みき (4回)-(2013/04/07(Sun) 00:26:08)
魔界の仮面弁士様

> 実行環境に Visual Studio をインストールしてあるのですか…。
> 通常は .NET Framework だけで良いと思いますよ。
失礼致しました。実行環境は.Net Frameworkのみです。

> 共有のサーバー上に Adobe Distiller Server を導入しているわけでは無く、
> 実行する各クライアントに Distiller のライセンスがあるのですね?
ライセンスを各端末分購入しております。

> それでも遅い場合は、そもそもの文書データも見直してみてください。
> サイズ0の画像や無用な空白セル設定が無いか、使用するフォント数を減らせないかなど。
>
>
> ところで、PDF 仮想プリンターではなく、通常のプリンターへ出力した場合は
> 高速で処理されるのでしょうか。元データが大きかったり複雑だった場合には、
> 処理に時間がかかってしまうのも、ある程度仕方がないかも…。
実はExcelの機能のExportAsFixedFormatでPDFを出力した場合(Office2010のみでしか検証できませんでしたが><)は、
45秒でPDF出力処理を行っております。
しかし、偶発的にエラーが発生したり2003ではPDF出力できないという背景から、今回Adobe StandardのPDF出力機能を使う運びになりました。

しかし、質問させていただいた方法ですと、2で45秒・4で45秒かかっております。
驚くほどキッチリ倍になっておりまして、なんとかワンステップで出力できたら助かるのに。。と質問させていただいた次第です。



No66168 (魔界の仮面弁士 さん) に返信
>>【実行環境】
>>・visual studio 2010
> 実行環境に Visual Studio をインストールしてあるのですか…。
> 通常は .NET Framework だけで良いと思いますよ。
>
>
>>・Acrobat Distiller X
>>・acrobat standard10 
>>・Microsoft Excel2010 と2003
>>  ※ユーザー端末が複数あり、
> 共有のサーバー上に Adobe Distiller Server を導入しているわけでは無く、
> 実行する各クライアントに Distiller のライセンスがあるのですね?
>
>
>>Windows7にも関わらずofficeのみ2003が入っている端末もあるので
> 組合せとしては問題ないかと思います。
> Office 2003 Service Pack 3 さえ適用しているのであれば。
>
>
>>2と4の処理で時間がかかってしまい、
> どの程度かかっているのか分からないので、一般論となりますが:
>
> PostSciript の生成に拘らないなら、Acrobat PDFWriter やいきなりPDF などの
> 「文書データから直接 PDF に変換するタイプの製品」を使う手もあります。
> GDI での描画になるので品質は劣りますが、処理時間を短縮できるかと思います。
>
> それでも遅い場合は、そもそもの文書データも見直してみてください。
> サイズ0の画像や無用な空白セル設定が無いか、使用するフォント数を減らせないかなど。
>
>
> ところで、PDF 仮想プリンターではなく、通常のプリンターへ出力した場合は
> 高速で処理されるのでしょうか。元データが大きかったり複雑だった場合には、
> 処理に時間がかかってしまうのも、ある程度仕方がないかも…。
引用返信 編集キー/
■66185 / inTopicNo.7)  Re[3]: PDF作成方法について
□投稿者/ みき (5回)-(2013/04/07(Sun) 00:30:17)
No66172 (LL さん) に返信
> 作成手順の2ですが
> 2.1 開いたエクセルの不要シートを非表示にするのに要する時間
> 2.2 workbook.printoutでpsファイルを出力するのに要する時間
>
> のどちらで時間がかかるのかを切り分けたほうが良いかと思います

2.1は一瞬で処理できておりまして、2.2に結構時間がかかっている状況です。
しっかりお伝えしておらず申し訳ありません。
>
> ちなみにExcel2010なら早い遅いは別として ExportAsFixedFormat() でPDFとして出力できますが
> 2003の方は結局は現在の処理の流れに行き着くのではないかと思います

実はExcelの機能のExportAsFixedFormatでPDFを出力した場合(Office2010のみでしか検証できませんでしたが><)は、
45秒でPDF出力処理を行っております。
しかし、偶発的にエラーが発生したり2003ではPDF出力できないという背景から、今回Adobe StandardのPDF出力機能を使う運びになりました。

しかし、質問させていただいた方法ですと、2で45秒・4で45秒かかっております。
驚くほどキッチリ倍になっておりまして、なんとかワンステップで出力できたら助かるのに。。と質問させていただいた次第です。


>
> 少し視点が変わりますが、処理内容の一部を並列処理(System.Threading.Tasks.Parallel.ForEach・System.Threading.Tasks.Parallel.For )
> にうまく置き換えればパフォーマンスはかなり改善すると思うので
> 並列処理で各ワークシートから個別のPDFファイルをいったん作成して
> shu さんが提示しておられる iText を使用して結合するというような方法もいけるかもしれません。

並列処理、目からうろこです!!
早速試させていただきます。

引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -