prawn-svg + Inkscape = エラーで文字が表示出来ない
先日、Inkscapeで帳票を作ってprawn-svgでPDF化するという記事を投稿しましたが、Inkscapeで作成したSVGに文字列があるとエラーでPDFが生成できませんでしたので、ちょっと調べてみました。
調査の結果、文字列の読み込みに失敗しているようだったので、少しprawn-svgのソースコードを見てみると、prawn-svgではtextというエレメントの文字列を読み込んでいたのですが、InkscapeのSVGではtextの子エレメントのtspanというエレメントに文字列が入っているのでこれを読み込むように変更してみます。
変更内容は、以下の赤字の部分を追加しました。
##### prawn-svg-0.9.1.6/lib/prawn/svg/parser.rb 140行目 #####
# This is not a prawn option but we can't work out how to render it here -
# it's handled by Svg#rewrite_call_arguments
if anchor = style_attrs['text-anchor']
opts[:text_anchor] = anchor
end
element.elements.each do |child|
if child.name == 'tspan' then
element.text = child.text
end
end
calls << ['text_box', [element.text, opts], []]
##### ここまで #####
ということで、変更後に再度実行してみるとエラーなくPDFが生成されました。
良かった、良かった。
ただ、おかしなところで改行されているので、これはまた後日解決したら記事にしてみます。
| 固定リンク
コメント