2016-07-27 22 views
1

In Rails 4, verwende ich wicked_pdf gem für .pdf Datei herunterladen. Ich muss ein Bild in dieser pdf hinzufügen, gerade jetzt Bild wird durch wicked_pdf_image_tag in Entwicklung, aber in Testumgebung Bild (s3) wird nicht gerendert.Rails 4, So fügen Sie ein s3 Bild zu wicked pdf

Gebrauchte Gems sind,

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

In initializers,

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 

In Controller,

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 

In Ansichten, ich habe versucht, durch

<%= 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')) %> 
zu laden

Wie kann ich s3 Bild in PDF-Datei laden?

Antwort

2

Sie können das Bild in einen s3-Bucket legen und öffentlich machen. Danach versuchen Sie es wie unten. Wenn Sie den folgenden Code verwenden, müssen Sie keine separate Syntax für verschiedene Umgebungen verwenden. Dies funktioniert für alle .Hope funktioniert.

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

Ich habe an der ähnlichen Funktionalität gearbeitet, aber mit PDFKit gem. Aber ich denke, Rendering Logik wird fast ähnlich sein.

Unten ist der Code, wo ich meine Controller teilweise in

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 

In _batch.html.haml gemacht. Sie können sehen, ich habe person.s3_logo zum Rendern des PDF-Bildes verwendet.

- 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 } 

In Person.rb Modell. Wie auch immer, wir können Bilder nicht direkt aus s3 in PDF-Dateien rendern. Jedes Juwel wird es zuerst im/tmp-Ordner herunterladen und rendern. So habe ich es in meiner Modelldatei gemacht.

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