一種方法是在內存中創建PDF文件並將其流式傳輸到客戶端。我喜歡這種方式,也許以後你將不得不通過電子郵件發送PDF文件,或只是將它們保存到一些備份磁盤等等
def get_pdf
pdf = WickedPdf.new.pdf_from_string('<h1>Hello There!</h1>')
send_data pdf, filename: 'file_name.pdf'
end
您可以將PDF生成不同的服務,只是把它在控制器中。這提供了隔離,您可以單獨測試它。
你也可以調試與HTTPiehttp get http://localhost:3000/invoices/1/get_pdf
Rails的端點響應將所有必須的HTTP響應頭:
Content-Disposition: attachment; filename="file_name.pdf"
Content-Length: 5995
Content-Transfer-Encoding: binary
Content-Type: application/pdf
因此,當用戶點擊指向端點的鏈路上,最可能會彈出下載對話框,因爲Content-Disposition: attachment;
標頭
其他解決方案是將get_pdf.html呈現爲PDF併發送回客戶端:
def get_pdf
render pdf: "file_name"
end
但是,在這種情況下,Content-Disposition
頭部有inline
,這意味着瀏覽器將打開PDF文檔(如果它可以閱讀PDF格式),而不是提供下載。
當你要求被調用時,你想強制下載PDF嗎? – Sajin
看看send_data - http://apidock.com/rails/ActionController/Streaming/send_data。這是你想要的? – Sajin