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죠.
  • Doc
  • title
  • content
  • author
  • 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 이런 느낌이에요.


    완성!!(외모 정리할 시간 없어!)
    너무 좋아요.✌️

    총결산


    친구가 되었습니다

    좋은 웹페이지 즐겨찾기