添加标题后,在wicked_pdf Rails中获得空白pdf页面

时间:2018-12-10 09:13:41

标签: ruby-on-rails wicked-pdf

我的代码在没有标题的情况下运行完美,但是在添加标题后,我得到了空白的pdf页面。请解决我的问题

def show
    @resume = current_user.resume
    respond_to do |format|
      format.html{ }
      format.pdf do 
         render template: 'student/resumes/show', 
                pdf: "#{current_user.first_name}.pdf",
                # :header => { :content => render_to_string({:template => 'student/resumes/header.pdf.erb'})}
                header:  {
                          html: {           
                          template: 'student/resumes/header'},
                          layout: 'pdf.erb',
                          handlers: [:erb],
                          formats: [:pdf] 
                          }
      end
    end
  end

3 个答案:

答案 0 :(得分:1)

同一问题我也遇到了代码,因此我尝试了很多组合,但最后我发现了以下对我有用的解决方案

遵循正确的HTML DOM格式,该格式可以完美运行:

<!DOCTYPE html>
<html>
  <head>
   <title></title>
    <link href=“https://fonts.googleapis.com/css?family=Roboto:400,700” rel=“stylesheet”>
    <%= wicked_pdf_stylesheet_link_tag ‘pdf’ %>
  </head>
  <body>
   <h1>Hello World</h1>
  </body>
</html>

以上为标题示例

我还在控制器中添加了以下属性以生成PDF

          render template: 'backend/report_result/report',
             pdf: "test",
             header:  {   html: {            template: 'backend/report_result/header'}},
             margin: { top: 30, bottom: 20, left: 25, right: 25 }

确保在使用pdf.erb格式的视图时正确使用所有属性

答案 1 :(得分:0)

您的右括号放在错误的位置。标头-html应包含所有其他这些键

def show
    @resume = current_user.resume
    respond_to do |format|
      format.html{ }
      format.pdf do 
         render template: 'student/resumes/show', 
                pdf: "#{current_user.first_name}.pdf",
                # :header => { :content => render_to_string({:template => 'student/resumes/header.pdf.erb'})}
                header:  {
                          html: {           
                          template: 'student/resumes/header',
                          layout: 'pdf.erb',
                          handlers: [:erb],
                          formats: [:pdf] 
                          }}
      end
    end
  end

答案 2 :(得分:0)

如果用 wicked pdf 生成 pdf 时,pdf 中有多余的页面,则

只需在 html 代码的最后放置一个分区(或者您可以根据您的代码放置一个 div)。喜欢:

<% @questions.each do |question| %>
  <% if question.id == @questions.last.id %>
    <div></div>
  <% end %>
<% end %>

在你的 html.put 中添加一个分区后,在你的 css 中添加以下行:

div.alwaysbreak { page-break-before: always; }
div.nobreak:before { clear:both; }
div.nobreak{ page-break-inside: avoid; }

它对我有用