■概要 openOfficeでの自動処理 †openofficをバックグランド常駐させてPDFを作らせる。 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で起動させておきます。 次にこの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を調整してもできるとのこと。 次に実践編。 wget -nd -k -p -E "http://hogehoge/dataView.aspx?id=20101210" とすると、そのフォルダにhtmlのほか、その画面を構成する画像ファイルらが置かれる。 <STYLE TYPE="text/css"> <!-- @page { size:landscape } --> </STYLE> こうするとPDFにした際、横長で印刷されます。画像のサイズが大きくて一枚に収まらなくA3サイズでPDFを作成したい場合は @page { size: 42cm 29.7cm } とA3サイズを直接入力します。 |