У меня есть 3 приложения Rails, который использует эти драгоценные камни:Rails 3 Злая PDF - включают в себя файлы в формате PDF Paperclip S3
gem 'paperclip'
gem 'wicked_pdf'
gem 'combine_pdf'
Я использую wicked_pdf
открыть PDF для costproject
. costproject
имеет HTML-страницу под названием viewproject.pdf.erb
.
Я пытаюсь объединить нечестивый pdf с привязкой к стоимости проекта в один PDF-файл.
Это мой код контроллера:
def viewproject
@costproject = Costproject.find(params[:costproject_id])
respond_to do |format|
format.html
format.pdf do
pdf = CombinePDF.new
pdf2 = render_to_string pdf: "Costproject.pdf", template: "costprojects/viewproject", encoding: "UTF-8"
pdf << CombinePDF.new(pdf2)
@costproject.attachments.each do |attachment|
pdf << CombinePDF.new(attachment.attach.path)
end
send_data pdf.to_pdf, :disposition => 'inline', :type => "application/pdf"
end
end
end
Линия pdf << CombinePDF.new(pdf2)
дает мне:
string contains null byte
Если я смотрю на PDF2, он начинает, как это - так это выглядит, как PDF:
>> pdf2
=> "%PDF-1.4\n1 0 obj\n<<\n/Title (\xFE\xFF)\n/Producer (wkhtmltopdf)\n/CreationDate (D:20150405202628)\n>>\nendobj\n4 0 obj\n<<\n/Type /ExtGState\n/SA true\n/SM 0.02\n/ca 1.0\n/CA 1.0\n/AIS false\n/SMask /None>>\nendobj\n5 0 obj\n[/Pattern /DeviceRGB]\nendobj\n8 0 obj\n<<\n/Type /XObject\n/Subtype /Image\n/Width 71\n/Height 75\n/BitsPerComponent 8\n/ColorSpace /DeviceRGB\n/Length 9 0 R\n/Filter
Я также пробовал pdf << CombinePDF.new(pdf2.to_pdf)
Спасибо за помощь!
Update1
В качестве теста, чтобы увидеть, если PDF2 работает, я сделал это успешно:
def viewproject
@costproject = Costproject.find(params[:costproject_id])
respond_to do |format|
format.html
format.pdf do
pdf2 = render_to_string pdf: "Costproject.pdf", template: "costprojects/viewproject", encoding: "UTF-8"
send_data pdf2, :disposition => 'inline', :type => "application/pdf"
end
end
end
UPDATE2
Myst было правильным об использовании parse
. Благодаря!
Я теперь с помощью этой строки в коде контроллера:
pdf << CombinePDF.new(attachment.attach.url)
Я получаю эту ошибку:
No such file or directory - http://s3.amazonaws.com/ ...
Но, если я скопировать адрес HTTP и вставить в браузер Ф показывают вверх.
Вы правы в использовании 'parse'. Но теперь у меня проблема, что она работает локально - потому что я сохраняю файлы вложений в Rails, но на Heroku я использую S3. Я пытаюсь использовать другой код для 'pdf << CombinePDF.new (attachment.attach.path) ' – Reddirt
' pdf << CombinePDF.new (attachment.attach.url) 'не работает – Reddirt
Как бы вы обычно получали доступ к необработанному содержимое файла с уровня S3? Он локально установлен? Используете ли вы конкретный API? – Myst