2004-12-05 [長年日記]

_ [Ruby] Rabbit で PDF 作成

先日の発表資料を、直接 Rabbit で PDF にしようとチャレンジしましたが、残念ながら失敗しました。

まず、libgnomecups-0.1.13 と libgnomeprint-2.8.1 を入れてから ruby-gnome2-0.11.0 を入れました。 次に、以下のように実行しました。

$ rabbit -e euc-jp -w 1024 -h 768 -p -o hiki.pdf hiki.rd

(process:14415): GnomePrintCupsPlugin-WARNING **: The ppd file for the CUPS printer XXXX could not be loaded.
/usr/lib/ruby/1.8/rabbit/renderer/gnome-print.rb:208:in `init_printers': uninitialized constant Gnome::PrintGPA (NameError)

このエラーはこういう修正でいいのかな?

--- rabbit-0.0.5/lib/rabbit/renderer/gnome-print.rb
+++ rabbit-0.0.5/lib/rabbit/renderer/gnome-print.rb
@@ -204,7 +204,7 @@
       end

       def init_printers
-        @printers = Gnome::PrintGPA.printers
+        @printers = Gnome::GPARoot.printers
       end

       def init_paper

ではもう一度実行すると、今度は Segmentation Fault しました。

/usr/lib/ruby/1.8/rabbit/renderer/gnome-print.rb:212: [BUG] Segmentation fault
ruby 1.8.2 (2004-11-11) [i586-linux]

gdb で眺めると、こんな感じ (debugging symbols なしですが)。

#0  0xb7f1193e in rb_scan_args () from /usr/lib/libruby.so.1.8
#1  0xb70e2dbf in gnome_print_paper_get_type ()
   from /usr/lib/ruby/1.8/i586-linux/gnomeprint2.so
#2  0xb7f23f07 in rb_thread_schedule () from /usr/lib/libruby.so.1.8

うーむ。最小の再現パターンはこんな感じかな。

$ ruby -r gnomeprint2 -e 'Gnome::PrintPaper.get("A4")'

さて、どうしたらいいのかしら?

[追記] Ruby/GnomePrint2 の rb_scan_args の引数の誤りが原因でした。 作者に報告しておきます。

--- ruby-gnome2-all-0.11.0/gnomeprint/src/rbgp-gnome-print-paper.c
+++ ruby-gnome2-all-0.11.0/gnomeprint/src/rbgp-gnome-print-paper.c
@@ -128,7 +128,7 @@
     return gp_paper_get_default(self);
   } else {
     VALUE name, width, height, mustfit;
-    rb_scan_args(argc, argv, "13", &name, &height, &mustfit);
+    rb_scan_args(argc, argv, "12", &name, &height, &mustfit);

     if (TYPE(name) == T_STRING) {
       if (argc > 1)

そういうわけで無事 PDF ができて、フォントもちゃんと埋め込まれていたのですが、'Printing images with alpha has not beein implemented for the PDF backend' という制限がいまのところあるようです。 あと、サイズが 13MB とかなり巨大になってしまいました。 そこで、

$ rabbit -e euc-jp -w 1024 -h 768 -p -o hiki.ps hiki.rd
$ ps2pdf14 hiki.ps

とすると、透過画像もちゃんと表示されていて、しかもファイルサイズが 511KB と小さくなりました。 -w や -h の指定が効かずに勝手に A4 サイズでレンダリングされてしまうのがちょっと気になりますが、これはかなり便利です!

このエントリーを含むはてなブックマーク 

_ Ad 今日の Amazon ご注文

このエントリーを含むはてなブックマーク 
[]