PDF를 내보내고 싶습니다!【Thinreports + Rails】
12294 단어 ThinReportsRubyRails
그래서 SmartHR Advent Calendar 2020의 5일째.
목표
당사 제품의 PDF 출력에 사용되었기 때문에Thinreports 친구가 되고 싶습니다.
사용품
Thinreports + Rails로 하겠습니다.
종점
PDF가 제목과 본문이 있는 파일을 출력할 수 있도록 하세요!
간단해!
작업 저항
아무튼 rails new.
rails new thinreports_demo --skip-test
gem 추가gem 'thinreports'
bundle install
견본 PDF 내보내기 준비
Thinreports의 PDF 출력은
tlf
형식의 데이터가 필요하기 때문에 나중에 준비를 해야 하기 때문에 rails 측의 준비를 먼저 해야 한다컨트롤러 준비
rails g controller pdfs index sample_doc
sample_doc의 루트 수정routes.rb
Rails.application.routes.draw do
root 'pdfs#index'
resources :pdfs, only: :index do
get :sample_doc, on: :collection
end
end
views 수정views/pdfs/index.html.erb
<h1>PDFにしてくれる君</h1>
<p>
<%= link_to 'サンプル書類がみたい', sample_doc_pdfs_path %>
</p>
링크에 액세스하면 PDF가 표시됩니다.Thinreports 편집기에서 TLF 파일 만들기
공식 설치 보기 Thinreports Editor(필요한 경우 Generator도 설치됨)
Thinreports 설치 가이드(공식)
어쨌든 시작
Thinreports Editor
새로 만들기부터 A4 파일 새로 만들기
뒷일을 생각하다
テキストブロックツール
app/pdfs 아래에 저장 (파일 이름은 임의)
PDF로 내보내기 설정
PDF 출력을 pdfs 컨트롤러로 설정
자세한 내용은 참조이 근처의 빠른 시작.
pdfs_controller.rb
class PdfsController < ApplicationController
:
:
def sample_doc
report = Thinreports::Report.new(layout: "#{Rails.root}/app/pdfs/sample_doc.tlf")
report.start_new_page
# さっき作った title に value つっこんでる
report.page.item(:title).value('PDFやで')
# title 以外はあとでやるのでここではスルーします
file = report.generate
send_data(
file,
filename: 'filename_sample.pdf',
type: 'application/pdf',
disposition: 'inline'
)
end
end
아까 링크에서 접근하면 PDF가 나와요.너무 좋아요.✌️
유사한 서류를 만드는 것
이 근처가 scaffold죠.
rails g scaffold doc title content:text author
rails db:migrate
새 TLF 파일 복사
내용은
sample_doc.tlf
과 같기 때문에 TLF를 하나 더 만들 수 있습니다. (특별한 의미가 없기 때문에 sample_doc.tlf를 반복해서 사용할 수 있습니다.)파일 같은 것들은 모두 PDF를 출력할 수 있다
루트 수정
routes.rb
Rails.application.routes.draw do
:
:
resources :docs do
get :show_pdf
end
:
:
end
컨트롤러docs_controller.rb
class DocsController < ApplicationController
:
:
def show_pdf
@doc = Doc.find(params[:doc_id])
report = Thinreports::Report.new(layout: "#{Rails.root}/app/pdfs/doc.tlf")
report.start_new_page
# 以下で各カラムごとのデータを入れる
report.page.item(:title).value(@doc.title)
report.page.item(:content).value(@doc.content)
report.page.item(:author).value(@doc.author)
file = report.generate
send_data(
file,
filename: "doc_#{@doc.id}.pdf",
type: 'application/pdf',
disposition: 'inline'
)
end
:
:
end
링크도 잊지 마세요.views/docs/index.html.erb
<p id="notice"><%= notice %></p>
<h1>Docs</h1>
<table>
:
<tbody>
<% @docs.each do |doc| %>
<tr>
:
<td><%= link_to 'ShowPDF', doc_show_pdf_path(doc) %></td>
# ☝️追加
:
</tr>
<% end %>
</tbody>
</table>
<br>
<%= link_to 'New Doc', new_doc_path %>
데이터 입력
사용위조 텍스트 생성기 등 입력 데이터
http://localhost:3000/docs/new적당히
http://localhost:3000/docs 이런 느낌이에요.
완성!!(외모 정리할 시간 없어!)
너무 좋아요.✌️
총결산
친구가 되었습니다
Reference
이 문제에 관하여(PDF를 내보내고 싶습니다!【Thinreports + Rails】), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kodera123/items/372d78eb450be5653c96텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)