Злой заголовок PDF не отображается
После проверки хранилища Rails Gem на наличие похожих проблем, а также переполнения стека я не смог найти ответ на свою проблему.
Я пытаюсь визуализировать PDF-файл, используя wicked_pdf в контроллере Rails, но заголовок не отображается, независимо от того, что я делаю или какие рекомендуемые решения для аналогичных проблем я следую.
Прежде всего, вот вывод консоли разработки:
***************WICKED***************
Rendering biddings/show.pdf.html.haml within layouts/pdf
Rendered biddings/show.pdf.html.haml within layouts/pdf (0.7ms)
Rendering biddings/header_pdf.html.haml within layouts/pdf_header
Rendered biddings/header_pdf.html.haml within layouts/pdf_header (1.9ms)
"***************[\"/home/tommy/.rvm/gems/ruby-
2.5.1@igalbids/bin/wkhtmltopdf\", \"-q\", \"--encoding\", \"UTF-8\",
\"--javascript-delay\", \"500\",
\"--disable-internal-links\", \"--disable-external-links\",
\"--orientation\", \"Portrait\", \"--margin-top\",
\"50\", \"--margin-bottom\", \"25\", \"--header-html\",
\"file:////tmp/wicked_header_pdf20180801-27285-b8y5sg.html\",
\"--footer-right\", \"Página [page] de [topage]\",
\"file:////tmp/wicked_pdf20180801-27285-1jfgdd7.html\",
\"/tmp/wicked_pdf_generated_file20180801-27285-1bkrvhx.pdf\"]***************"
Rendering text template
Rendered text template (0.1ms)
Sent data Licitación_2524.pdf (0.6ms)
Completed 200 OK in 2334ms (Views: 0.5ms | ActiveRecord: 64.4ms)
Как видите, как макет заголовка, так и его содержимое визуализируются и обрабатываются, однако они не создают окончательный выходной PDF, и я не знаю почему! Посмотрите:
Итак, вот мой код контроллера:
class Api::V1::Biddings::PdfBiddingsController < PdfController
# JWT Authentication enforced
before_action :authenticate_user!
# GET /biddings/:id/pdf
def show
@bidding = scoped_collection.find(params[:id])
authorize [:biddings, :pdf, @bidding]
respond_to do |format|
format.pdf do
render(
pdf: "#{Bidding.model_name.human}_#{@bidding.code}",
disposition: "inline",
orientation: "Portrait",
template: 'biddings/show.pdf.html.haml',
header: {
html: {
template: "biddings/header_pdf.html.haml",
handlers: [:haml],
layout: "pdf_header",
formats: [:haml, :html]
}
},
footer: {
html: {
handlers: [:haml],
layout: "pdf",
formats: [:haml, :html],
encoding: 'UTF-8'
},
right: "#{I18n.t('pdf.page')} [page] #{I18n.t('pdf.of')} [topage]"
},
margin: { :top => 50, :bottom => 25},
handlers: [:haml],
layout: "pdf",
javascript_delay: 500,
encoding: 'UTF-8',
show_as_html: false,
disable_internal_links: true,
disable_external_links: true) and return
end
end
end
protected
def self.model
Bidding
end
private
def scoped_collection
policy_scope([:biddings, :pdf, Bidding]).includes(:bidding_type, :client, :payment_condition, :price_list, :real_payment_condition, :sales_man, :user)
end
def records_per_page
params[:per_page] || 10
end
end
Ничего особенного, там вы можете увидеть все параметры конфигурации, довольно стандартные. Излишне говорить, что нижний колонтитул с нумерацией страниц работает нормально (скриншот слишком длинный, чтобы показать, но поверьте мне). Не могу сказать то же самое о заголовке.
Вот файл макета заголовка PDF:
pdf_header.html.haml:
!!! 5
%html
%head
%meta{:content => "text/html; charset=utf-8", "http-equiv" => "content-type"}/
= wicked_pdf_stylesheet_link_tag "bidding_pdf", media: :all
= csrf_meta_tags
%body.pdf
= yield
а вот содержимое для заголовка "содержимое" как таковое:
header_pdf.html.haml:
Test text
Просто текст. У меня ОС Linux 16.04 x64, wicked_pdf (1.1.0), wkhtmltopdf-binary (0.12.4). Как я могу отладить это?
2 ответа
Для всех, кто добирается сюда... это была проблема CSS. Заголовок был там, но "невидим", и независимо от того, какое поле я установил в параметрах рендеринга, это была проблема CSS. После запуска CSS с нуля появился заголовок! Я не мог отладить его с флагом show_as_html: true
потому что верхний и нижний колонтитулы не отображаются в этом режиме, только тело.
Если кто-то прочитает это и окажется в той же ситуации, используйте инструмент поиска в документе PDF, чтобы найти слово, которое вы знаете, в заголовке. Если он что-то находит, но невидим, значит, у вас проблемы с CSS.
Для тех, кто сталкивается с этим, так как ответ OP не слишком точен, то что для меня сделало то, что HTML-тег DOCTYPE был добавлен в ваш верхний / нижний колонтитул. Вышел из невидимого заголовка (с текстом, который можно найти с помощью инструмента поиска), чтобы полностью отобразить.
Обновите двоичный файл wkhtmltopdf по крайней мере до версии "0.12.4 (с исправленным qt)". Я потратил полдня на устранение неполадок, потому что моя версия 0.12.1 не поддерживала верхний и нижний колонтитулы.
Ссылка: Злой PDF не рендерит колонтитулы