Rails6 Prawnでデータをpdfに表示するにはどうしたらよいのでしょうか
解決したいこと
Prawnを使って、Railsにおいてpdfを作成したいと考えています。
pdfは、「Rails5でPrawnによるPDFを作成する」(https://qiita.com/yacci/items/61a26ddd3f6eb2494121)
を参考にして、表示されるようになったのですが、
インスタンスの利用
コントローラで渡して入れば、データベースから取得したデータをPDF内で利用可能
を参考に、データを pdfにうめこみたいのですがうまくいきません。
アドバイスをお願いします。
発生している問題・エラー
該当するソースコード
index8.html.erb
<div class="table-ichi">
<% @cdir.each do |cdir| %>
<tr>
<td><%= link_to(cdir.id,"/cdirs/#{cdir.id}") %></td>
<td><%= cdir.no %></td>
<td><%= cdir.name %></td>
<td><%= cdir.age %></td>
<td><%= cdir.a_zaiseki %></td>
<td><%= cdir.b_houzin %></td>
<td><%= cdir.haizoku %></td>
<td><%= cdir.syokusyu %></td>
<td><%= cdir.birth %></td>
<td><%= cdir.hire_date %></td>
<td><%= cdir.reti_date %></td>
<td><%= link_to("pdf","/cdirs/#{cdir.id}/pdf") %></td>
</tr>
<% end %>
</div>
routes.rb
get "cdirs/:id/pdf"=>"cdirs#pdf"
cdirs_controller.rb
class CdirsController < ApplicationController
def pdf
@cdirs = Cdir.find(params[:id])
respond_to do |format|
format.html
format.pdf do
# pdfを新規作成。インスタンスを渡す。
pdf = RecordPdf.new(@cdirs)
send_data pdf.render,
filename: "order_#{@cdirs.no}",
type: "application/pdf",
disposition: "inline" # 画面に表示。外すとダウンロードされる。
end
end
end
end
pdf.html.erb
<div class="main user-show">
<div class="container">
<div class="user">
<h2><%= @cdirs.name %></h2>
<p><%= @cdirs.no %></p>
<p><%= @cdirs.age %></p>
<%= link_to "PDF2を表示", record_pdfs_index_path(format: "pdf") %>
</div>
</div>
</div>
record_pdf.rb
class RecordPdf < Prawn::Document
# recordにモデルなどのデータを渡します
def initialize(cdirs) # 受け取ったものがcdirsに入っている
# superで初期設定を指定します(ページサイズ、マージン等)
super(
page_size: 'A4',
top_margin: 40,
bottom_margin: 30,
left_margin: 20,
right_margin: 20
)
@cdirs=cdirs # メソッドで利用できるようにインスタンス化
#日本語のフォント
font "vendor/assets/fonts/ipaexm.ttf"
# きちんと日本語も表示されるか確認
text 'hello こんにちは 春夏秋冬'
name
end
def name
text "僕は#{@cdirs.name}です"
end
#途中省略
end
自分で試したこと
record_pdf.rbにおいて、「text "僕は#{@cdirs.name}です"」 の記述を、「text "僕はです"」 に変えると、pdfは表示されるのですが、「#{@cdirs.name}」を記述すると、上記のエラーが発生します。
pdf.html.erbは、きちんと表示されており、なぜ、record_pdf.rbに データが渡されないか分かりません。ご指導よろしくお願いいたします。
0 likes
