2017-03-15 11 views
3

私はruby on railsアプリケーションの中に残りのAPIを設定しましたが、今はPDFを生成してgetリクエストからこのPDFを返す必要があります。この機能を実装する方法に関するアドバイスを探しています。残りのAPIからPDFファイルを返す方法は?

私が持っている要件のいくつかは次のとおりです。ファイルのデータをいつでも更新できるため、ファイルを保存してエンドユーザーにファイルへのリンクを与えることはできません。私はマイクロサービスとしてアプリケーションを使用しているので、ファイルを表示するために使用できるフロントエンドはありません。

ここで私はこの機能を実装する方法に関するいくつかのアドバイスが大好きです。

私はアプリケーションの特定のエンドポイントにget要求を行いたいと考えています。私は、エンドユーザに表示できるPDFファイルが返されると期待しています。

私は現在一時的なPDFファイルを生成するためにWickedPdf gemを使用していますが、私は本当にレスポンスの見方に苦しんでいます。

アドバイスをいただければ幸いです。

+0

そのリクエストを受け取ったときにpdfを強制的にダウンロードしたいですか? – Sajin

+0

send_data - http://apidock.com/rails/ActionController/Streaming/send_dataをご覧ください。これはあなたが探しているものですか? – Sajin

答えて

0

Amazon S3にpdfをアップロードしてリンクを生成し、apiでpdfリンクを取得します。

+0

これは最も簡単ですが、 –

+0

という名前のルートを作成し、コントローラアクションを呼び出し、wickedpdfを使用してpdfを生成し、そのURLまたはルートをapiで渡すと生成するのではなく、保存する必要はありません。 – puneet18

1

1つの方法は、PDFファイルをメモリに作成してクライアントにストリームすることです。私はあなたが別のサービスにPDF生成を入れて、それを呼び出すことができます

def get_pdf 
    pdf = WickedPdf.new.pdf_from_string('<h1>Hello There!</h1>') 
    send_data pdf, filename: 'file_name.pdf' 
end 

...多分、後であなたは電子メールを介してPDFファイルを送信する必要があります、または単にいくつかのバックアップディスクなどに保存し、この方法を好みますコントローラ内にあります。これにより隔離が提供され、個別にテストすることができます。

Content-Disposition: attachment; filename="file_name.pdf" 
Content-Length: 5995 
Content-Transfer-Encoding: binary 
Content-Type: application/pdf 

したがって、ユーザーがエンドポイントを指すリンクをクリックしたときに、最も:

また、あなたはRailsが必要なすべてのHTTPレスポンスヘッダを設定しますHTTPiehttp get http://localhost:3000/invoices/1/get_pdf

とエンドポイントの応答をデバッグすることができますContent-Disposition: attachment;ヘッダーのためダウンロードダイアログが表示される可能性があります

その他の解決策は、get_pdf.htmlをPDF形式でレンダリングしてクライアントに返信することです。

def get_pdf 
    render pdf: "file_name" 
end 

しかし、この場合にはContent-Dispositionヘッダが(それはPDF形式を読み取ることができる場合)、ブラウザではなく、それをダウンロードするために提供のPDFファイルを開きますを意味し、inlineになります。

0

あなたはまだこれを必要とするかどうかは知りませんが、将来的に誰のために私は素敵な解決策が見つかりました:私は「render_to_string」を通じて私のpdf-HTMLビューベースのテンプレートをロードしています

pdf = WickedPdf.new.pdf_from_string(render_to_string "entradas/entradaspdf.pdf.erb") 
send_data pdf, filename: "bergha.pdf", disposition: "inline" 

をrubyメソッドで、ビューの内容を文字列で返します。その後、WickedPdfはそれをpdfバイナリに変換し、最後に "pdf" varに保存します。

最後に "出力データ"の代わりに、出力データ(my pdf var)、出力データのファイル名、およびオプションのContent- Dispositionヘッダーを使用して、ファイルを読み込むか(インライン)、ダウンロードするかをブラウザーに指示します(添付ファイル)。
それはうまくいくと思っています。私にとってはうまくいくよ。

関連する問題