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

**openOfficeでの自動処理 [#ja14c34d]
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となるのが残念なのだが仕方ない。。
そして、ここで大事なのが&color(red){ページサイズ};。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が完成することになります。
1

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS