2014-10-01 3 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 aved to public/ckeditor_assets/pictures

Спасибо!

ответ

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-файл при его создании.

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? Надеюсь, это полезный ответ ... рег. BS

0

Данный код работает для меня, отправить вам HTML содержания в качестве параметра тела т.е.

def absolute_path_for_src(body) 
    body.gsub(/(src|href)=('|")\//) { |s| "#{$1}=#{$2}#{request.protocol}#{request.host_with_port}/" } 
end 
Смежные вопросы