【问题标题】:how to use PDFKit to capture wanted html div in Rails如何使用 PDFKit 在 Rails 中捕获想要的 html div
【发布时间】:2014-05-18 13:01:35
【问题描述】:

我想在我指定的区域生成 PDF(例如在 div id 标签中) 我已经按照 railcast 和文档中的教程开始使用 rails gem PDFKit。

所以一个简单的 .pdf 链接就可以解决问题。

 <%= link_to 'Open PDF', invoice_path(@invoice, :format => "pdf"), :class => "btn btn-md btn-primary" %>

现在的问题是如何只捕获想要的区域?我在这里探索了 html 答案:Print <div id=printarea></div> only?

我尝试了类似的方法,但它不起作用。

@media print
{  
  body * { visibility: hidden; }
  #printableArea * { visibility: visible; }
  #printableArea { position: absolute; top: 40px; left: 30px; }
}

在show.html.erb中

<div id="printableArea">
something in PDF
</div>

我找到了一些其他资源,例如 http://www.sitepoint.com/pdf-generation-rails/ 但它只是要求放置标签来隐藏它。我的问题更多是隐藏其余部分并使我想要的 div 可见。

【问题讨论】:

  • “它不起作用”是什么意思?

标签: css ruby-on-rails ruby-on-rails-4 wkhtmltopdf pdfkit


【解决方案1】:

不确定这是否是最好的方法,但我在我不想在我的 pdf 中显示的所有代码周围添加了一个 if 语句,如下所示:

<% if params[:format] != "pdf" %>
  All the code I don't want to show in my pdf
<% end %>

或者您可以将 pdf 内容与 html 内容完全分开

<% if params[:format] == "pdf" %>
  All the code I want to show in my pdf only
<% else %>
  All the code I want to show in html only
<% end %>

您可以使用不同的布局来不显示导航栏和页脚

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title></title>
    <%= wicked_pdf_stylesheet_link_tag 'application' %>
  <link href="http://netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
  <script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>

  <%= wicked_pdf_javascript_include_tag "application" %>
  <%= csrf_meta_tags %>
  <%= favicon_link_tag 'https://s3.amazonaws.com/url/favicon.ico' %>
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <script src="https://js.braintreegateway.com/v1/braintree.js"></script>
</head>
<body id="body_tag">

    <%= yield %>

</body>
</html>

控制器

respond_to do |format|
  format.html
  format.pdf do
    render :pdf => "show",
    template: 'deliveries/show.html.erb',
    layout: 'pdf.html'
  end
end

【讨论】:

  • 但您仍然会得到不在这种情况下的所有其他内容。考虑您的页面中有导航栏、页脚等。所有这些也将进入您的pdf。现在你怎么没有它们,只是想把你的条件或div中的内容说成生成的pdf?
  • 我对 pdf 使用不同的布局
  • 好的,谢谢,这就是一个答案。如果css实际上可以做到这一点会很好(打开可见的部分而不是其他部分)。可能是不可能的,我不知道?已经决定改用大虾了,生成速度真的比wkhtmltopdf快。
  • 是的,那很好,也许有人会指出如何做到这一点,但到目前为止,我在网上搜索时还没有看到任何解释
【解决方案2】:

你好,在一个 css 文件中试试这个

#mi_id_div{
display: none;
}

当 #MI_ID_DIV 是 pdf 中不可见的所有内容时

在你的控制器中

html = render_to_string(:action => "tiempo_atencion.html.erb", :layout => false)
       kit = PDFKit.new(html)
       kit.stylesheets << "#{Rails.root}/vendor/assets/stylesheets/reportes-estilos/tablas.css"

       send_data(kit.to_pdf, :filename => 'test_report_with_table.pdf', :type => 'application/pdf')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-19
    • 1970-01-01
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多