【问题标题】:Ruby on Rails unable to generate pdf with map content wicked_pdfRuby on Rails 无法生成带有地图内容 wicked_pdf 的 pdf
【发布时间】:2018-07-22 19:32:58
【问题描述】:

我正在尝试呈现包含谷歌地图的我的页面的 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)

当我加载 pdf url 时,地图部分未呈现

当我使用 wkhtmltopdf 命令行实用程序时。它正确地呈现了 pdf。

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

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

【问题讨论】:

  • 您在 rails 日志中看到任何错误吗?
  • 日志中没有错误。一切正常
  • 仔细检查您没有安装两个不同版本的wkhtmltopdf 并且在终端上执行不同的版本。如果您有:rubygems.org/gems/wkhtmltopdf-binary,可能就是这种情况。查看 rails 日志中执行的命令以获取更多详细信息,并尝试在终端中准确复制该命令。
  • @BrendonMuir 在 rails 日志"***[\"/usr/local/bin/wkhtmltopdf\", \"-q\", \"--javascript-delay\", \"3000\", \"file:////var/folders/y4/18x7npks3w5b_yr8jz304wzr0000gn/T/wicked_pdf20180723-2048-1h1m8w7.html\", \"/var/folders/y4/18x7npks3w5b_yr8jz304wzr0000gn/T/wicked_pdf_generated_file20180723-2048-u71ska.pdf\"]*****" 中执行的命令并执行which wkhtmltopdf 返回/usr/local/bin/wkhtmltopdf,这是正在使用的确切二进制文件。一切看起来都应该如此
  • 也许需要 javascript-delay 才能等待带有地图的 iframe 加载?您是否在命令行测试中尝试过?

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


【解决方案1】:

您是否尝试过使用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'd 之前正确生成

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 2012-01-27
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多