Ruby on Rails无法生成地图内容为wicked_pdf的pdf

时间:2018-07-22 19:32:59

标签: ruby-on-rails ruby wkhtmltopdf wicked-pdf

我正在尝试渲染包含Google地图的页面PDF,但是它始终显示为空。奇怪的是,当我使用wkhtmltopdf二进制文件调用url时,它实际上起作用了。我能缺少什么吗???这是我当前的设置

家庭控制器

class HomeController < ApplicationController
  def index
    respond_to do |format|
        format.html
        format.pdf do
            render pdf: "Example PDF",
                layout: 'pdf.html.erb',
                show_as_html: params.key?('debug'),
                javascript_delay: 3000
        end
    end
  end
end

index.pdf.erb

<%- content_for :js do %>
  <script src="//code.jquery.com/jquery-1.12.4.min.js"></script>
  <script src = "//maps.googleapis.com/maps/api/js?&key=GOOGLE_API_KEY"></script>
  <script src="//cdn.rawgit.com/mahnunchik/markerclustererplus/master/dist/markerclusterer.min.js"></script>
  <script>
      var map;
      function initMap() {
        map = new google.maps.Map(document.getElementById('map'), {
          center: {lat: -34.397, lng: 150.644},
          zoom: 8
        });
      }
      $(window).load(function(){
        initMap();
      })
  </script>
<% end %>

<h1>Google Map</h1>
<div id="map" style="width: 800px; height: 400px;"></div>

将debug设置为true(以查看用于呈现pdf的html) enter image description here

当我加载pdf网址时,地图部分未呈现 enter image description here

当我使用wkhtmltopdf命令行实用程序时。可以正确呈现pdf。

$ wkhtmltopdf --javascript-delay 3000 http://localhost:4000/home/index.pdf?debug  output.pdf 

enter image description here

在Rails应用程序中我在做错什么吗?一些指针确实会有所帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

您是否尝试过使用WickedPdf.new.pdf_from_string

它看起来像这样:

家庭控制器

class HomeController < ApplicationController
  def index
    respond_to do |format|
        format.html
        format.pdf do
            html = render_to_string(layout: 'pdf.html.erb')
            pdf = WickedPdf.new.pdf_from_string(html, {show_as_html: params.key?('debug'), javascript_delay: 3000})
            send_data pdf
        end
    end
  end
end

不是最好的方法,但是您可以检查字符串以了解在生成pdf之前是否已正确生成了