首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails 4,如何将s3图像添加到邪恶的pdf中

Rails 4,如何将s3图像添加到邪恶的pdf中
EN

Stack Overflow用户
提问于 2016-07-27 05:02:08
回答 2查看 1.5K关注 0票数 1

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

二手宝石是,

代码语言:javascript
复制
gem 'wicked_pdf', '1.0.3'
gem 'wkhtmltopdf-binary', '0.9.9.3'

在初始化器中,

代码语言:javascript
复制
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

在控制器里,

代码语言:javascript
复制
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

在视图中,我尝试过加载

代码语言:javascript
复制
<%= 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图像?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-28 11:36:55

您可以将图像放到s3桶中,并将其公之于众。在那之后,试试下面的样子。如果您在不同的环境中使用以下代码不需要使用单独的语法,那么它将适用于所有的.Hope --它可以工作。

代码语言:javascript
复制
<%= wicked_pdf_image_tag('//s3.amazonaws.com/bucket_name/image.png') %>
票数 2
EN

Stack Overflow用户

发布于 2016-07-27 07:09:42

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

下面是我在控制器中呈现部分内容的代码

代码语言:javascript
复制
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图像。

代码语言:javascript
复制
  - 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文件中呈现图像。因此,任何创业板都将首先在/tmp文件夹中下载并呈现它。这就是我在我的模型文件中所做的。

代码语言:javascript
复制
  def s3_logo
    file = open(self.logo.remote_url)
    file.path if file
  end
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38604090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档