Я посмотрел в Интернете, но, похоже, не смог найти, как отображать PDF файл в рельсах (я могу найти информацию только о том, как его создать).
Кто-нибудь знает, какой код/драгоценный камень мне нужно отобразить?
Я посмотрел в Интернете, но, похоже, не смог найти, как отображать PDF файл в рельсах (я могу найти информацию только о том, как его создать).
Кто-нибудь знает, какой код/драгоценный камень мне нужно отобразить?
В вашем контроллере:
def pdf
pdf_filename = File.join(Rails.root, "tmp/my_document.pdf")
send_file(pdf_filename, :filename => "your_document.pdf", :type => "application/pdf")
end
В config/environment/production.rb
:
config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache
или
config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx
Требуется модификация конфигурации, поскольку она позволяет веб-серверу отправлять файл непосредственно с диска, что дает хороший прирост производительности.
Обновление
Если вы хотите отобразить его, а не загружать его, используйте параметр :disposition
send_file
:
send_file(pdf_filename, :filename => "your_document.pdf", :disposition => 'inline', :type => "application/pdf")
Если вы хотите отобразить его inline, этот вопрос будет намного более полным, чем я когда-либо мог бы быть.
В основном вам просто нужно написать его в html в своем представлении. Итак, это простое решение для меня:
В 'show.hmtl.erb'
<iframe src=<%= @certificate.certificate_pdf %> width="600" height="780" style="border: none;"> </iframe>
просто поместить местоположение файла во встроенный рубин, поскольку источник тега iframe работал у меня после нескольких часов и часов поиска. "сертификат" - моя модель, а "certificate_pdf" - это файл вложения.
В зависимости от того, откуда приходит PDF-документ, вам может помочь следующее. У меня есть приложение, в котором я храню много вещей, а некоторые из них имеют (дополнительные) PDF файлы, связанные с элементами. Я храню элементы в каталоге /public/res/<item_id>/
. res
означает результат, а item_id
- это числовой идентификатор этого элемента в Rails.
В представлении я предоставляю ссылку на PDF файлы следующим (псевдо) кодом в качестве вспомогательного метода, который может использоваться в представлении:
def file_link(key, name = nil)
res= Ressource.find(:first, :conditions => ["key = ?", key])
list = Dir["public/res/#{res.id}/*"]
file= list.empty? ? "" : list[0]
return file if file.empty?
fn = name ? name : File.basename(file)
link_to fn, "/res/#{res.id}/#{File.basename(file)}", :popup => true
end
Соответствующая часть здесь - это link_to name, "/res/#{res.id}/#{File.basename(file)}"
.
Это может быть слишком просто, но мне не удалось найти простой ответ на мою проблему, поэтому я размещаю его здесь. Я действительно не хотел добавлять к моему контроллеру еще одно действие только для загрузки статического файла.
Я только что загрузил свой файл на S3 и использовал ссылку_, ссылаясь на путь, который S3 предоставляет после загрузки файла и установки разрешений (помните, каждый должен иметь возможность загружать и загружать его). Я храню много данных для приложения на S3, поэтому он выглядел как прекрасный выбор.
<%= link_to "speaker registration form", "https://s3.amazonaws.com/gws_documents/speaker_registration.pdf" %>
def pdf
pdf_content = ...# create the pdf
send_data(pdf_content, :filename => "test.pdf", :type => "application/pdf")
end