2015-01-09 4 views
2

У меня есть pdf, созданный креветкой, он содержит заголовок, таблицу и нижний колонтитул. Оба верхнего и нижнего колонтитула повторяются, с :dynamic => true, таблица нет.Повторитель в креветке PDF-рендеринг содержимого дважды

Проблема, с которой я сталкиваюсь, заключается в том, что весь контент в верхнем и нижнем колонтитулах отображается так, как будто он отображается дважды в одном и том же месте, и это, похоже, противоречит функции сглаживания, поэтому текст кажется изменчивым и полужирный (см. рисунок ниже). Однако, когда я увеличиваю или печатаю его, он выглядит правильно.

Вот некоторый код конкретной части, где я начинаю повторитель блоки:

pdf = Prawn::Document.new :page_size => "A4", :margin => [28, 20, 7, 20] 

(...) 

pdf.repeat :all, :dynamic => true do 
    pdf.bounding_box([0, 803], :width => 555, :height => 60) do 
    pdf.stroke_bounds 

    (...) 
    end 
end 

(...) 

pdf.render 
# End of file 

Насколько я знаю, это способ по умолчанию, чтобы объявить блок ретранслятора, я почти mirrorred его от руководства.

Вот изображение: верхний контейнер - это заголовок, внутри ретранслятора, похоже, что все выделено жирным шрифтом, но это тот же самый шрифт и ширина строки, что и раздел ниже, который находится из таблицы, и выглядит нормально. Извините, я не могу опубликовать большую часть pdf-файла, это касается конфиденциальности.

Division between wrong and correct sections

Если удалить ретранслятор, заголовок будет выглядеть правильно, как надо, но когда я добавляю его снова это выглядит.

С кем-либо еще сталкивался с этой проблемой раньше? Как это исправить?

EDIT: Добавлен еще один код выше. Также добавлен следующий код, который находится внутри файла шаблона Rails «historico.pdf.prawn», и это, как я называю это контроллер для визуализации PDF и вернуть его к пользователю:

rendered_pdf = render_to_string :template => "reports/historico.pdf" 
send_data rendered_pdf, :filename => "Historico.pdf", :type => "application/pdf" 

ответ

2

Когда вы используете pdf.repeat :all, документ «повторно открыт» после того, как документ уже создан, и данные в блоке повтора добавляются. Это может вызвать множество странных поступков, я считаю, что это и является причиной вашей проблемы.

Существует related issue with a solution, в котором используется метод Prawn canvas. Если вы адаптируете это решение к своей проблеме (используйте canvas, чтобы генерировать верхний и нижний колонтитулы, а не repeat :all), вы больше не должны иметь эти проблемы с текстом на верхней части текста.

Примечание:

Это может быть важно, чтобы вы знали, что креветка имеет officially stated, что они «не в хорошем положении, чтобы поддерживать функции шаблонных (я поднимаю это, потому что вы, кажется, создавая шаблон), «поэтому подобные методы могут понадобиться, если вы продолжите использовать этот инструмент для этих типов потребностей. В зависимости от вашей зависимости от этих типов функций шаблонов, вы можете использовать may, используя другой инструмент.

+0

Я использую шаблон .pdf.prawn Rails, но я не называю его так же, как парень в связанной проблеме. Я попробую этот метод холста и посмотрю, сработает ли это, спасибо. Я также отредактирую вопрос, чтобы указать, как я его вызываю на контроллере –

+0

Я пробовал этот метод canvas, но без использования его с 'repeat: all', он только печатает его содержимое на первой странице, он не повторите на других страницах, так что это не решит мою проблему. Я не знаю, как это сделал @Bramski, но способ, которым он поставил свой собственный ответ, не должен даже решить проблему для него. –

+0

Это может показаться глупым на данный момент, но, возможно, стоит попробовать использовать 'repeat: all', обернутый вокруг метода холста, например: http://stackoverflow.com/a/2919309/1026898. – Ecnalyr

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