Ruby 1.9.3 でも同じ問題が発生しています。私は、少なくともpdfに商標Rを含めるように絞り込みました。私はそれをpdf gemのこのコードに落とし込みました:
def glyph_width(code_point)
return 0 if code_point.nil? || code_point <= 0
m = @metrics.char_metrics_by_code[code_point]
if m.nil?
names = @font.encoding.int_to_name(code_point)
m = names.map { |name|
@metrics.char_metrics[name.to_s]
}.compact.first
end
if m
m[:wx]
elsif @font.widths[code_point - 1]
@font.widths[code_point - 1]
else
raise ArgumentError, "Unknown glyph width for #{code_point} #{@font.basefont}"
end
end
そして、認識できない文字を無視するように変更しました。Ruby 2.0 でこの問題が修正されたかどうかはわかりません。
def glyph_width(code_point)
return 0 if code_point.nil? || code_point <= 0
m = @metrics.char_metrics_by_code[code_point]
if m.nil?
names = @font.encoding.int_to_name(code_point)
m = names.map { |name|
@metrics.char_metrics[name.to_s]
}.compact.first
end
if m
m[:wx]
elsif @font.widths[code_point - 1]
@font.widths[code_point - 1]
elsif(m == nil)
return 0
else
p(m)
raise ArgumentError, "Unknown glyph width for #{code_point} #{@font.basefont}"
end
end
より良い解決策は、この場合は char_metrics_by_code の 9 である code_point をキャッチすることです。