2

他のgemの中でもpdfリーダーを使用して、大きな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 64 ビット) で 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 に答える