■概要
インターネットのWebページをPDFでスナップショット撮影します。
*WebサイトがAjaxだと無理です。静的なページか、URL変数で表示するページに対して使えます。

openOfficeでの自動処理

openofficをバックグランド常駐させてPDFを作らせる。
まず、裏方として働くopenofficeをインストールします。

yum groupinstall Office/Productivity
yum install openoffice.org-langpack-ja_JP (日本語環境)
yum install xorg-x11-server-Xvfb (仮想フレームバッファー)

っで、これを常駐稼動させるのだが、下記でいいみたい。

export DISPLAY=:1.0
/usr/bin/Xvfb :1 -screen 0 1024x768x8 &
/usr/bin/soffice -invisible -headless -accept="socket,host=127.0.0.1,port=8100;urp;"  -nofirststartwizard &

これを含んだ起動スクリプトを書いて、/etc/init.d/sofficeとして保存。chkconfig辺りでrc3とrc5で起動させておきます。
これでローカルの8100ポートから命を受けて働いてくれます。

次にこのsofficeにデータを投げてPDFに変換指示をしてくれるもの。Jodconverterをインストール。っと言っても最新版を取得して特定の場所に広げるだけ。
使い方は、

java -jar /opt/Jodconverter/jodconverter/lib/jodconverter-cli-2.2.2.jar 変換元 PDFファイル

とするだけである。どうもjodconverterが直に8100ポートと通じているような。。

またもっと賢くはGroovyを使うこともできて、CLASSPATHにjodconverter-cli-2.2.2.jarを入れて、下記をConvertToPDF.groovyとして保存。(別途 groovyをインストールしますけど)

import com.artofsolving.jodconverter.*
import com.artofsolving.jodconverter.openoffice.connection.*
import com.artofsolving.jodconverter.openoffice.converter.*
if (args.length < 2) {
   println "USAGE: ConvertToPdf.groovy <input-file> <output-file>"
   System.exit(255)
}
def input = new File(args[0])
def output = new File(args[1])
def connection = new SocketOpenOfficeConnection(8100)
connection.connect()
def registry = new DefaultDocumentFormatRegistry()
def converter = new OpenOfficeDocumentConverter(connection, registry)
def pdf = registry.getFormatByFileExtension("pdf")
def pdfOptions = [ 'ReduceImageResolution': true, 'MaxImageResolution': 600, 'RestrictPermissions': true, 'PermissionPassword':1234 ]
pdf.setExportOption(DocumentFamily.TEXT, "FilterData", pdfOptions)

converter.convert(input, output, pdf)
connection.disconnect()

そして、これを

groovy ConvertToPDF.groovy 変換元 PDFファイル

として実行してもOK。この場合、PDF化される際の解像度を指定することもできるような。まぁーこれはjodconverterの展開先のdocument-formats.xmlを調整してもできるとのこと。

次に実践編。
とあるURLの中身をPDF化したいと。。この場合ばず、そのURLの中身をwgetなどで全部取得します。
とあるフォルダを掘って、そこにhtmlファイルと関連ファイルを置く。例えばとあるURLの場合、

wget -nd -k -p -E "http://hogehoge/dataView.aspx?id=20101210"

とすると、そのフォルダにhtmlのほか、その画面を構成する画像ファイルらが置かれる。
この場合、始めのindex.htmlに該当するのが dataView.aspx?id=20101210.htmlとなるのが残念なのだが仕方ない。。
そして、ここで大事なのがページサイズ。htmlなんて印刷サイズなんて気にしない仕様なので取得したhtmlに「このhtmlはA4サイズで横長ですよ」とかをCSSを使って追記します。

<STYLE TYPE="text/css">
<!--
       @page { size:landscape }
-->
</STYLE>

こうするとPDFにした際、横長で印刷されます。画像のサイズが大きくて一枚に収まらなくA3サイズでPDFを作成したい場合は

@page { size: 42cm 29.7cm }

とA3サイズを直接入力します。
このようにしてできたhtmlを先のJodconverterに掛けると思ったイメージなPDFが完成することになります。


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2011-06-24 (金) 22:01:34 (2160d)