2013-06-14 2 views
2

У меня есть скрипт, который использует PDF-ридер среди других драгоценных камней для разбора и разбиения большого PDF-файла на несколько PDF-файлов. Я устанавливал его для работы на новой машине, и я теперь получаю эту ошибку, когда я пытаюсь запустить тесты:Неизвестная ошибка ширины глифов с помощью Ruby pdf-reader

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, так как на других машинах у меня нет никаких проблем. Я запускаю ruby ​​1.9.3 на linux (Mageia 3 64bit) и пробовал переключиться на несколько версий драгоценного камня без везения. Любые предложения о том, что мне не хватает? Благодаря!

+0

Можете ли вы предоставить образец PDF, иллюстрирующий проблему. – mkl

ответ

0

У меня такая же проблема с ruby ​​1.9.3. Я сузил его для меня, по крайней мере, для того, чтобы иметь товарный знак R в формате pdf. Я получил его до этого кода в Pdf перл:

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 

Лучшим решением было бы поймать code_point, который в данном случае является 9 в char_metrics_by_code

Смежные вопросы