Я использую PDFKit (вместе с Gem render_anywhere и wkhtmltopdf-binary), чтобы создать кнопку для создания PDF из HTML в Rails. Я следовал за несколькими уроками, которые оба используют «счета» в качестве примера. Мое приложение использует «ревизии». Я думал, что следил за всем, но получил ошибку в объекте ActionView :: LookupContext: undefined method 'view_paths=' for #<ActionView::LookupContext:0x00007fdb191d6cc0> Did you mean? view_path
. Это связано с неправильным путем и использованием класса обслуживания в Rails, но, похоже, не может найти решение. Вот мой код для создания PDF:
Gem PDFKit: https://github.com/pdfkit/pdfkit
Учебное пособие, которое я использую: https://code.tutsplus.com/tutorials/generating-pdfs-from-html-with-rails--cms-22918
downloads_controller
:
class DownloadsController < ApplicationController
def show
respond_to do |format|
format.pdf { send_audit_pdf }
end
end
private
def audit_pdf
audit = params[:incoming]
AuditPdf.new(audit)
end
def send_audit_pdf
send_file audit_pdf.to_pdf,
filename: audit_pdf.filename,
type: "application/pdf",
disposition: "inline"
end
end
Модель Download
:
require "render_anywhere"
class Download
include RenderAnywhere
def initialize(audit)
@audit = audit
end
def to_pdf
kit = PDFKit.new(as_html, page_size: 'A4')
kit.to_file("#{Rails.root}/public/audit.pdf")
end
def filename
"audit #{audit.id}.pdf"
end
private
attr_reader :audit
def as_html
render template: "audits/pdf", layout: "audit_pdf", locals: { audit: audit }
end
end
Мой views/layout/audit_pdf.html.erb
выглядит так:
<!DOCTYPE html>
<html>
<head>
<title>Audit PDF</title>
<style>
<%= Rails.application.assets.find_asset('audit.pdf').to_s %>
</style>
</head>
<body>
<%= yield %>
</body>
</html>