【问题标题】:Rails 4, How to add an s3 image to wicked pdfRails 4,如何将 s3 图像添加到 wicked pdf
【发布时间】:2016-11-30 22:34:27
【问题描述】:

在 rails 4 中,我使用 wicked_pdf gem 来下载 .pdf 文件。我必须在这个 pdf 中添加一个图像,现在图像在开发中通过 wicked_pdf_image_tag 呈现,但在测试环境中图像(s3)没有呈现。

用过的宝石,

gem 'wicked_pdf', '1.0.3'
gem 'wkhtmltopdf-binary', '0.9.9.3'

在初始化器中,

class WickedPdf
  wkhtmltopdf_path = Rails.env.production? ? "#{Rails.root}/bin/wkhtmltopdf-amd64" : "#{Rails.root}/bin/wkhtmltopdf-amd64"
  WICKED_PDF = {
   :exe_path => wkhtmltopdf_path,
   :wkhtmltopdf => wkhtmltopdf_path
  }
end

在控制器中,

respond_to do |format|
  format.html {
    render :pdf => "sample",
    :margin => {:top => 10, :bottom => 10, :left => 10, :right => 10},
    :orientation => 'Portrait', # default , Landscape,
    :no_background => true
  }
end

在视图中,我尝试通过加载

<%= Rails.env.development? ? wicked_pdf_image_tag("img/logo.png") : wicked_pdf_image_tag("#{Rails.root}/public/assets/img/logo.png") %>

<%= Rails.env.development? ? wicked_pdf_image_tag("img/logo.png") : wicked_pdf_image_tag("#{Rails.root}/assets/img/logo.png") %>

<%= image_tag(ActionController::Base.helpers.asset_path('img/logo.png')) %>

如何在 pdf 文件中加载s3 图像?

【问题讨论】:

    标签: ruby-on-rails ruby pdf amazon-s3


    【解决方案1】:

    您可以将图像放入 s3 存储桶并公开。之后尝试如下。如果您使用下面的代码,无需为不同的环境使用单独的语法,它将适用于所有 .Hope 它的作品。

    <%= wicked_pdf_image_tag('//s3.amazonaws.com/bucket_name/image.png') %>
    

    【讨论】:

      【解决方案2】:

      我曾使用 PDFKit gem 开发过类似的功能。但我认为渲染逻辑几乎是相似的。

      下面是我在控制器中渲染部分的代码

      def print_batch
        batch = Batch.find(params[:id])
        respond_to do |format|
          format.pdf {
            html = render_to_string("_batch",:formats => [:html], layout: false , locals: { batch: batch })
            Rails.logger.debug(html.inspect)
            kit = PDFKit.new(html)
            send_data(kit.to_pdf, :filename => "file_name_#{batch.id}.pdf", :type => 'application/pdf') and return
          }
          format.html
          format.json { render json: {id: batch.id, processed: batch.processed?} }
        end     
      
      end
      

      _batch.html.haml 中。你可以看到我使用 person.s3_logo 来渲染 pdf 图像。

        - logo_image_pdf = person.logo.present? ? person.s3_logo : default_credit_logo 
        - logo_image_html = person.logo.present? ? image_path(Person.logo.thumb('100x100').url) : image_path('default_credit_logo.png')
        - logo_image = params[:format] == 'pdf' ? logo_image_pdf : logo_image_html
      
        .bucks           
          %img.logo{src: logo_image }
      

      Person.rb 模型中。无论如何,我们不能直接从 s3 直接渲染 PDF 文件中的图像。所以任何 gem 都会首先将它下载到 /tmp 文件夹中并渲染它。这就是我在模型文件中所做的。

        def s3_logo
          file = open(self.logo.remote_url)
          file.path if file
        end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-16
        • 2021-04-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多