Ruby pdf阅读器出现未知字形宽度错误
Posted
技术标签:
【中文标题】Ruby pdf阅读器出现未知字形宽度错误【英文标题】:Unknown glyph width error with Ruby pdf-reader 【发布时间】:2013-06-14 19:46:21 【问题描述】:我有一个脚本,它使用 pdf-reader 和其他 gem 来解析一个大的 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 但还没有解决方法。在我看来,这一定是我的设置问题,而不是 gem 或 pdf,因为在其他机器上我没有任何问题。我在 linux (Mageia 3 64bit) 上运行 ruby 1.9.3,并尝试切换到 gem 的多个版本,但没有运气。关于我所缺少的任何建议?谢谢!
【问题讨论】:
您能否提供一个示例 PDF 来说明该问题。 【参考方案1】:我在使用 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
【讨论】:
以上是关于Ruby pdf阅读器出现未知字形宽度错误的主要内容,如果未能解决你的问题,请参考以下文章