2011年12月8日木曜日

puppyPDF修正

puppyPDFというツールが入っていますが、PuppyLinux4.3.1JPのバージョンでは日本語に修正したスクリプトが一部古いままです。と言うか古い日本語バージョンから使い回した為、修正されていないのだろうと思います。もっともこのpuppyPDFを使用してPDFにする事があるかと言われると、かなり苦しい。せっかくあるんだから使える方が良いとしか言いようが無い。

このpuppyPDFはAbiwordで扱う事が出来るファイル形式をAbiwordのコマンドでPostScriptに変換し、さらにGhostscriptのps2pdfでPDFにするものです。(なんでこんな面倒な事するのか理由は知りません。)

ところがAbiwordのコマンドが変更になったのに、日本語スクリプトを修正していないのでうまく変換できないと言う事でしょうか。

以下の部分を修正します。
/usr/sbin/ja/puppypdf をエディタで開き、228行目付近にあるAbiwordのコマンドを変更する。コメントアウトした方が元のもの。

# res=`abiword --print="$TEMP" "$INPUT"`
res=`abiword --to=ps --to-name="$TEMP" "$INPUT"`



これでOK。日本語版スクリプトだけがおかしいのでオリジナルは修正不要。
----------------------------
以下UbuntuのAbiword2.8.6 man より抜粋。

OPTIONS
-t DEST, --to=DEST
Convert the given file to another format, writing the result to
DEST. The format of DEST is determined by its extension.
See also --to=FORMAT and --to-name.

-t FORMAT, --to=FORMAT
Convert the given files(s) to the given format. Unless
explicitly specified with --to-name, the original filename will
be used (with a different extension, if necessary). See also
EXAMPLES.

The more popular values for FORMAT include:

abw Abiword XML format (zabw for gzip, bzabw for bzip2
compression)
dbk DocBook XML
doc Microsoft Word binary format
docx Office Open XML (newer Microsoft Word versions)
html Hypertext Markup Language
kwd KWord
odt OpenDocument Text
pdf Portable Document Format
rtf Rich Text Format
sxw OpenOffice.org Writer 1.0
txt Plain text

--to-name=DEST
Only useful in conjunction with --to=FORMAT. Specifies where
the converted document shall be written to.

EXAMPLES
To convert the document example.abw to RTF:
abiword --to=rtf example.abw
The resulting file will be named example.rtf.

To print a document:
abiword --to=ps --to-name=fd://1 FILENAME | lp

いつもながらAbiwordのマニュアルには記載されていないので、仕方なくmanを探した。

Ghostscriptの用紙サイズ変更

PuppyLinux4.3.1JPではGhostscriptの用紙サイズが初期設定のLetterになっているがこれをA4にするには /usr/share/ghostsript/8.15/lib/gs_init.ps をエディタで開き75行目のコメントを外して保存する。



これでAbiwordからのPS作成とCUPSからのPS作成がうまく行く様になります。他のソフトで問題が出るかどうかは検証できていません。

この件に関してはGhostscriptのDocumentに記載されているので仕様としか言いようがありません。このドキュメントにはバージョン情報がありませんがPuppyLinuxの8.15でも有効なようです。

Documentの場所が探しにくいのでメモ。何しろ同じ様なサイトが乱立しすぎ。ここのサイトはDebianからもリンクされているので現状の本家みたいです。以下からDocumentへ。

http://www.ghostscript.com/



次にUse.htmへ


最終的に項目からサイズ変更に関する部分を探す。


用紙サイズの参考


まずDocumentsを読むべし。用紙サイズはポイントで指示するみたいです。直接PostScriptを扱う事は少ないと思いますがPDFや印刷などに影響するのがイヤな感じです。PuppyLinuxのGhostscriptはバージョンアップして欲しいのですが、中々そうはなりません。新しい物は容量が急激に大きくなるので躊躇しているのかもしれません。今のところ日本語を扱う上でそれほど不便はないのでガマンしかないでしょう。

Wary5.2.2などでも同じ操作で変更出来ます。

AbiwordからのPDF作成

PuppyLinux4.3.1JPのAbiword2.7はPDFの作成に不具合があるみたいです。AbiwordでA4をPDFにし、ファイルを解析すると 793.701x1122.52 pts というサイズになっています。これをミリ単位に変換すると 280x396mm となり、A4(210x297mm)より少し大きなサイズになっています。このサイズ(280x396mm)が何を意味するのか不明です。

ちなみに、この用紙サイズ(280x396mm)をピクセル300dpiに換算すると 3307x4677ピクセル になります。この数値はA4サイズ(210x297mm)をピクセル400dpiに変換した際のピクセル数と同じになります。関係ありそうですがイマイチ理解できません。

PDF表示ソフトでは自動的に用紙サイズに合わせて表示する機能があるため一見問題ない様に見える場合があります(完全におかしい場合もある)が、PDFから印刷すると正しく印刷されない事があります。

多少関係しているのはGhostscriptの用紙設定が初期値でLetterになっている事です。これはA4にするのが無難だと思います。この設定はCUPSからPostScriptを作成する際影響します。CUPS-PDFは動作に問題はないので、こちらでPDFにした方が無難です。CUPSからPostScript作成の場合も用紙設定をA4にすれば問題ありません。なんでAbiwordからのPDFがおかしいのか不明です。

詳しい原因は解りませんが新しくAbiword2.8.6をコンパイルしインストールする事で解決できています。

--------------------------------
ポイントについて:
ポイントは主に出版関係で利用される長さの単位。ptと略され、印刷関係やDTPソフトなどで使用されています。PDFフォーマットもこれに準じ用紙サイズがポイントで表わされています。ポイントにはDTP用とjisなどに規定されているものとがあり若干違うようです。ここではとりあえずDTP用ポイントで考えます。ポイントについては詳しい印刷関連のサイトが沢山ありますので、詳細はそちらで調べて下さい。

1pt=1/72インチ なので 1pt=0.352777mm となり、A4サイズは 595.276x841.89 pts (210x297mm)という事になります。

PDFファイルの情報を得るには Poppler のツール pdfinfo コマンドを使用します。

# pdfinfo testcase.pdf
Creator: cairo 1.8.6 (http://cairographics.org)
Producer: cairo 1.8.6 (http://cairographics.org)
Tagged: no
Pages: 1
Encrypted: no
Page size: 595.276 x 841.89 pts (A4)
File size: 4028 bytes
Optimized: no
PDF version: 1.4

--------------------------------
PuppyLinux4.3.1JPにあるPDF関連コマンド(抜粋)

Poppler-utils関係
/usr/bin/pdffonts
/usr/bin/pdfimages
/usr/bin/pdfinfo
/usr/bin/pdftoabw
/usr/bin/pdftohtml
/usr/bin/pdftoppm
/usr/bin/pdftops
/usr/bin/pdftotext

Ghostscript関係
/usr/bin/pdf2dsc
/usr/bin/pdf2ps
/usr/bin/pdfopt
/usr/bin/ps2ascii
/usr/bin/ps2epsi
/usr/bin/ps2pdf
/usr/bin/ps2pdf12
/usr/bin/ps2pdf13
/usr/bin/ps2pdf14
/usr/bin/ps2pdfwr
/usr/bin/ps2ps
/usr/bin/ps2ps2
/usr/bin/ps2txt

Wary5.2.2のAbiword2.8.6はGhostscriptの初期用紙設定をA4にすればPDFの作成に問題はありません。