Как сохранить pdf-файл в общей папке с помощью wicked_pdf

Прямо сейчас я использую Rails 3.0.0. Я уже установил драгоценный камень wicked_pdf. Теперь я хочу сохранить файл PDF в общей папке. Пожалуйста, помогите мне.


person chandrashekar    schedule 02.06.2012    source источник


Ответы (3)


Если вам нужно просто создать pdf и не отображать его:

# create a pdf from a string
pdf = WickedPdf.new.pdf_from_string('<h1>Hello There!</h1>')

# create a pdf from string using templates, layouts and content option for header or footer
WickedPdf.new.pdf_from_string(
    render_to_string(:pdf => "pdf_file.pdf", :template => 'templates/pdf.html.erb', :layout => 'pdfs/layout_pdf'), 
    :footer => {:content => render_to_string({:template => 'templates/pdf_footer.html.erb', :layout => 'pdfs/layout_pdf'})}

# or from your controller, using views & templates and all wicked_pdf options as normal
pdf = render_to_string :pdf => "some_file_name"

# then save to a file
save_path = Rails.root.join('pdfs','filename.pdf')
File.open(save_path, 'wb') do |file|
  file << pdf
end
person arcooverbeek    schedule 04.06.2012

Это главный ответ на тему Как преобразовать строку в pdf в ruby ​​on rails
И если вы не против, я приведу один из ответов:
Некоторые сервисы возвращают pdf как жало, например JVBERi0xLjQKJeLjz9MKNCAwIG9iago8PC9Ue. . .
Вы можете создать файл PDF из строки, используя:

f = File.new("/tmp/file.pdf", "w")
f.write(Base64.decode64(invoice[:file]).force_encoding('UTF-8'))
f.close

И тогда вы можете открыть файл PDF с помощью AcrobatReader или другой программы для чтения PDF.
Надеюсь, это поможет.

person itsnikolay    schedule 15.09.2014

Кроме того, вы можете сделать это:

render :pdf          => 'foo',
       :save_to_file => Rails.root.join('public', "foo.pdf"),
       :save_only    => true
person Unixmonkey    schedule 05.06.2012
comment
мгновенная любовь к этому ответу ‹3 - person abhishek77in; 20.11.2015
comment
что произойдет, если я запущу эту команду на что-то вроде Heroku? Будет ли это выдавать ошибку или зависать, так как heroku не предоставляет доступную для записи файловую систему. - person abhishek77in; 20.11.2015
comment
@abhishek77in Вы можете писать в файловую систему в большинстве современных стеков Heroku, но вы не можете гарантировать, что она останется, если динамометрический стенд будет перезапущен. В такой ситуации было бы лучше сохранить файл в корзину Amazon S3 или что-то в этом роде. Если вам нужно временно сохранить в файловую систему, лучше использовать /tmp. - person Unixmonkey; 21.11.2015
comment
@Unixmonkey знаете ли вы, какой маршрут нужно добавить, чтобы иметь возможность доступа/открытия файлов, сохраненных в /tmp? Спасибо. - person Marklar; 14.02.2017
comment
@Marklar Вам не нужен маршрут для доступа к /tmp, это было бы довольно плохо с точки зрения безопасности. Я просто использовал его для иллюстрации места сохранения в приведенном выше примере. В реальном приложении вы, вероятно, захотите сохранить его на public или S3 или в другое место, где вы храните файлы для последующего извлечения. - person Unixmonkey; 16.02.2017