2

我有一个脚本,它在其他 gem 中使用 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 但是还没有解决方法。在我看来,这一定是我的设置问题,而不是 gem 或 pdf,因为在其他机器上我没有任何问题。我在 linux (Mageia 3 64bit) 上运行 ruby​​ 1.9.3,并尝试切换到 gem 的多个版本,但没有运气。关于我所缺少的任何建议?谢谢!

4

1 回答 1

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 中捕获在这种情况下为 9 的 code_point

于 2016-05-09T21:37:21.380 回答