2014-10-01 54 views
1

我在wysiwyg編輯器(ckeditor)中上傳內聯圖像。它與Paperclip集成。 但是,當我生成pdf時,ckeditor的圖像不顯示。 我在做什麼錯?rails ckeditor和wicked_pdf

下面的代碼:

attachment_file.rb:

class Ckeditor::AttachmentFile < Ckeditor::Asset 
    has_attached_file :data, 
        :url => "/ckeditor_assets/attachments/:id/:filename", 
        :path => ":rails_root/public/ckeditor_assets/attachments/:id/:filename" 

    validates_attachment_presence :data 
    validates_attachment_size :data, :less_than => 100.megabytes 
    do_not_validate_attachment_file_type :data 

    def url_thumb 
    @url_thumb ||= Ckeditor::Utils.filethumb(filename) 
    end 
end 

controller.rb:

def download 
    html = render_to_string("offer_template_one", :formats => [:html], :layout => "templates.html") 
    pdf = WickedPdf.new.pdf_from_string(html) 
    send_data(pdf, 
    :filename => "offer.#{@offer.id}.pdf", 
    :disposition => 'attachment') 
    end 

application.rb中:

config.assets.paths << Rails.root.join("app", "assets", "fonts") 
config.assets.precompile += %w(templates.css) 
config.autoload_paths += %W(#{config.root}/app/models/ckeditor) 

的圖片上傳裏面的CKEditor是s成公共/ ckeditor_assets /圖片

謝謝!

回答

0

由於這些ckeditor圖片不是資產管道的一部分,因此您需要通過它們的絕對文件系統路徑爲wkhtmtopdf引用它們以將它們拉入您的PDF中。

在你的意見,你有可能做這樣的事情:

<%= image_tag 'ckeditor_assets/pictures/foo.jpg' %> 

這應該改成這樣的:因爲在第一種情況下

<%= image_tag Rails.root.join('public','ckeditor_assets','pictures','foo.jpg').to_s %> 

,這些圖像標籤將是呈現爲相對路徑,wkhtmltopdf無法在磁盤上找到與其創建的HTML臨時文件相關的信息,因此需要指定完整路徑才能在創建PDF時將其拉入到PDF中。

0

@ bogdan-popa @unixmonkey @flexo是的,我知道這不是一個答案,但它似乎是以儘可能小的麻煩迴應相關問題的唯一方式。無論如何,我想出了這個解決方案,工作陽光,即wicked_pdf從http://:image-bucket.s3.amazonaws.com/渲染圖像.....

has_attached_file :data, 
     :storage => :s3, 
     :bucket => "image-bucket", 
     :path => "ckeditor/pictures/:id/:basename.:extension", 
     :styles => { }, 
     :url => ':s3_alias_url', 
     :s3_host_alias => "image-bucket.s3.amazonaws.com" 

我仍然疑惑的唯一的事情就是:風格哈希值。如何正確使用S3的拇指?我希望這是一個有用的答案... reg。 BS

0

此代碼對我的作品,給你的HTML內容爲參數即身體

def absolute_path_for_src(body) 
    body.gsub(/(src|href)=('|")\//) { |s| "#{$1}=#{$2}#{request.protocol}#{request.host_with_port}/" } 
end