我有一个脚本,使用pdf-reader和其他宝石来解析并将大型pdf文件拆分成多个pdf。我一直在设置它以在新机器上运行,现在我尝试运行测试时出现此错误:
Failure/Error: SrnProcessor.process_main_pdf(main_pdf_path)
ArgumentError:
Unknown glyph width for 9 Helvetica
我看到其他几个人在这里遇到了这个问题:https://github.com/yob/pdf-reader/issues/102但还没有解决方法。在我看来,这必须是我的设置问题,而不是宝石或PDF,因为在其他机器上我没有任何问题。我在linux(Mageia 3 64bit)上运行ruby 1.9.3,并试图切换到多个版本的gem而没有运气。我对失踪的建议有什么建议吗?谢谢!
答案 0 :(得分:0)
我遇到了与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中的code_point,在本例中为9