京都産業大学の大本です.
At 4:05 PM +0900 05.8.23, SAKAI Takakazu wrote:
> その2:pdf -> psのフィルタとして使おうとすると,生成されるPSファイル
の末尾が途切れる.
cat test.pdf | acroread -toPostScript > foo.ps
を実行すると,foo.psの末尾が途切れていて正常にプリントできない.
しかし,謎なことに,
cat test.pdf | acroread -toPostScript
を実行すると,端末画面には
などと表示されて末尾まで出力されている(scriptコマンドの画面記録で確認済).
#リダイレクトすると途切れるというのがなんとも....
Vine、FedoraCore 共に上と同じ動作でしたが、出力されたファイル (foo.ps) の
サイズが少々違っていました (謎)。
もう少しだけ追いかけてみました.
straceしまして,PSデータを出力しているはずのwrite()のところだけgrepし
て抜き出してみました.
リダイレクトした場合:
write(1, "%!PS-Adobe-3.0\n%%Title: (\\376\\37"..., 4096) = 4096
write(1, " yflag \n {\n "..., 24576) = 24576
write(1, "2 dict\n\t\t\t\t\t\t\tbegin\n\t\t\t\t\t\t\tbegin"..., 4096) = 4096
write(1, "ix def\n /ct_PSBuildGlyph /c"..., 4096) = 4096
write(1, "l Language Levels.\n/cm { matrix "..., 8192) = 8192
write(1, "d\n{\n0 getrampcolor\ncx cy radius "..., 4096) = 4096
write(1, "s Incorporated. All Rights Reser"..., 4096) = 4096
write(1, "4/cA5/cA6/cA7/cA8/cA9/cAA\n/cAB/c"..., 20480) = 20480
write(1, "710 363 710 c\n216 710 125 620 10"..., 4096) = 4096
write(1, "otedblleft/quotedblright/quotele"..., 4096) = 4096
write(1, "ansDBBox\n{\nDurx Dury transform m"..., 4096) = 4096
write(1, "d 4 -1 roll exch\nget 4 -1 roll 3"..., 4096) = 4096
write(1, "if\rdup dup 1 sub 3 index exch ge"..., 24576) = 24576
write(1, "810e23784b2fb32a80a3f81936161cbf"..., 4096) = 4096
write(1, "416876f3534d7b975224d815a4012d42"..., 28672) = 28672
リダイレクトしない場合:
write(1, "%!PS-Adobe-3.0\n", 15) = 15
write(1, "%%Title: (\\376\\377[fO\\032\\377\\b{"..., 53) = 53
write(1, "%%Version: 1 4\n", 15) = 15
write(1, "%%CreationDate: 14\273\37620\312\25420\311\303 200"..., 44) = 44
write(1, "%%For: (\\376\\377N\\213R\\331\\200wT"..., 38) = 38
write(1, "%%DocumentData: Clean7Bit\n", 26) = 26
write(1, "%%LanguageLevel: 2\n", 19) = 19
write(1, "%%BoundingBox: 0 0 595 842\n", 27) = 27
write(1, "%%HiResBoundingBox: 0.0 0.0 595."..., 40) = 40
write(1, "%%Pages: 1\n", 11) = 11
write(1, "%%DocumentProcessColors: (atend)"..., 33) = 33
write(1, "%%DocumentSuppliedResources: (at"..., 37) = 37
write(1, "%%EndComments\n", 14) = 14
write(1, "%%BeginDefaults\n", 16) = 16
write(1, "%%EndDefaults\n", 14) = 14
リダイレクトしない場合は,「一行ずつ吐き出す」のに対して,リダイレクト
した場合は,4KBとか8KBとか24KBといった大きなブロック単位で書き出してる
ようです.
I/O性能を上げるためだと思いますが,mmap2()とか使ってるので,これも何か
関係あるかもしれません.さらに,fork()が度々呼ばれてたりもしてまして,
一体どんな作りになってるのだか.
私の手には負えそうにないので,この件はあっさり諦めて,PDF -> PSフィル
タ(CUPS設定用)にはVine3.1標準の/usr/bin/pdftopsを使うことにしました.
Adobe ReaderにPDF文書を読ませてX画面に出してGUI操作でプリントすれば,
ちゃんと印刷される(さらに謎だ)ので,まず困らないし....
#でもAdobe Readerで印刷したほうが,フォントがかなり美しい.
--
京都産業大学 工学部情報通信工学科 大本 英徹
E-mail: oomoto@xxxxxxxxxxxxxxxxxx Tel: 075-705-1904 (Dial In)
(*^.^*) (*^_^*) (*^o^*) (*^.^*) Fax: 075-705-1914