Я использую wickedpdf, чтобы создать красивый отчет в формате PDF.При использовании show_as_html: true, чтобы убедиться, что все выглядит правильно, страница выглядит великолепно, она использует правильный шаблон, и все содержимое загружается так, как должно.Нет ошибок ссылок или ошибок активов, они были исправлены путем создания специальных wssedpdf scss и js (см. Ниже):
Однако, когда яустановите его в disposition: 'attachment', чтобы он фактически генерировал pdf, он не похож на страницу выше, и в результате получается pdf, который не имеет форматирования и имеет разрозненные компоненты на нескольких страницах.Графики также не отображаются и не показывают данных.Похоже, что он не применяет правильную загрузочную / пользовательскую CSS и не запускает файлы javascript, необходимые для создания макета, как показано в представлении html.Есть идеи, почему это происходит?Насколько я понимаю, использование show_as_html: true будет отображать ту же самую страницу, как она будет выглядеть в PDF, а затем создание PDF будет использовать именно это содержимое для создания документа PDF.Я просмотрел все остальные вопросы в формате wicked-pdf, но не нашел ничего, что могло бы помочь.
Ниже приведена текущая настройка в контроллере:
format.pdf do
render pdf: "#{@interest.name}",
template: "interests/pdf_export.html.erb",
layout: 'pdf.html', disposition: 'attachment',
title: "#{@interest.name}",
#default_header: true,
#default_footer: true,
header: { spacing: 10,
html: {
content: "interests/report_header",
layout: 'pdf.html', # optional, use 'pdf_plain' for a pdf_plain.html.pdf.erb file, defaults to main layout
}
},
viewport_size: '1280x1024',
#show_as_html: true,
javascript_delay: 10000,
enable_plugins: true,
page_size: 'A4'
end
Вот макет PDF:
<!DOCTYPE html>
<html>
<head>
<title>PDF</title>
<%= wicked_pdf_stylesheet_link_tag 'wickedpdf' %>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/simple-line-icons/2.4.1/css/simple-line-icons.css">
<link rel="stylesheet" href="http://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<!-- JAVASCRIPT DEPENDENCIES ---->
<!-- jquery -->
<script src="http://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<!-- popper -->
<script src="http://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<!-- bootstrap -->
<script src="http://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
<script src= "https://cdnjs.cloudflare.com/ajax/libs/feather-icons/4.19.0/feather.js"></script>
<%= wicked_pdf_javascript_include_tag 'wickedpdf'%>
</head>
<body>
<div class='container'>
<%= yield %>
</div>
</body>
</html>
wickedpdf.scss:
@import 'stack/bootstrap';
@import 'stack/fonts/flag-icon-css/css/flag-icon';
@import 'stack/vendors/extensions/pace';
@import 'stack/vendors/extensions/unslider';
@import 'stack/plugins/extensions/noui-slider';
@import "stack/bootstrap-extended";
@import "stack/colors";
@import "wickedpdf/components";
@import 'stack/core/menu/menu-types/vertical-menu';
@import 'stack/core/colors/palette-gradient';
@import 'style';
wickedpdf.js:
//= require stack/vendors/vendors.min
//= require stack/vendors/charts/raphael-min
//= require stack/vendors/charts/chart.min
//= require stack/vendors/charts/jquery.sparkline.min
//= require stack/vendors/extensions/unslider-min
//= require stack/vendors/extensions/wNumb
//= require stack/vendors/extensions/nouislider.min
//= require stack/vendors/extensions/jquery.steps.min
//= require stack/vendors/timeline/horizontal-timeline
//= require stack/vendors/tables/datatable/datatables.min
//= require stack/core/app-menu
//= require stack/core/app
//= require stack/scripts/pages/dashboard-ecommerce
//= require_tree ./common
//= stub ./common/subscriptions