Thinreports에서 서식 작성을 보다 간편하게
12524 단어 루비erbThinReports
ruby로 간편하게 서표를 작성할 수 있는 Thinreports
Thinreports를 사용한 서식 작성 단계는 다음과 같습니다.
이번에는 레이아웃 파일의 정보를 이용하여 각 항목에 대한 설정 로직의 편지지를 작성합니다.
레이아웃 파일(.tlf)은 JSON
Thinreports-Editor로 작성된 레이아웃 파일은 JSON이므로,
정보를 검색해 봅니다.
레이아웃 파일의 구조(의 분위기)는 다음과 같습니다.
이번 주제로 간단한 장표(collection_list.tlf)를 작성했습니다.
tlf에서 정보를 검색합시다 (1) text-block
가변 텍스트를 설정하는 것은 type: text-block 이므로, 이 ID를 꺼냅니다.
require 'json'
@layout="collection_list.tlf"
File.open(@layout) do |j|
tlf = JSON.load(j)
@text_blocks = []
tlf["items"].each do |item|
if item["type"] == "text-block"
@text_blocks.push item["id"]
end
end
@text_blocks.each do |i|
puts i
end
end
실행해 보겠습니다.
PS thinreports> ruby .\extract_text_block.rb
name
birthday
우선은 베타인 text-block의 ID를 꺼낼 수 있었습니다.
tlf에서 정보를 검색합시다 (2) list의 text-block
그런 다음 목록에서 type: text-block을 검색합니다.
리스트의 항목은 취급을 바꾸고 싶기 때문에 다른 배열에 격납합니다.
require 'json'
@layout="collection_list.tlf"
File.open(@layout) do |j|
tlf = JSON.load(j)
@text_blocks = []
@list_text_blocks = []
tlf["items"].each do |item|
if item["type"] == "text-block"
@text_blocks.push item["id"]
end
if item["type"] == "list"
item["detail"]["items"].each do |l_item|
if l_item["type"] == "text-block"
@list_text_blocks.push l_item["id"]
end
end
end
end
@text_blocks.each do |i|
puts i
end
@list_text_blocks.each do |i|
puts i
end
end
PS thinreports> ruby .\extract_text_block.rb
name
birthday
item_name
date
shop
목록의 text-block도 OK입니다.
erb로 ruby 소스 생성
그럼 소스 생성에 갑시다.
erb를 만듭니다.
목록의 text-block은 CSV를 읽고 값을 설정하도록 구성했습니다.
require 'thinreports'
require 'csv'
Thinreports::Report.generate filename: 'result.pdf', layout: '<%= @layout %>' do
start_new_page
% @text_blocks.each do |item|
page.item(:<%= "#{item}" %>).value = ""
% end
CSV.foreach("data.csv") do |csv_row|
page.list.add_row do |row|
% @list_text_blocks.each_with_index do |l_item,i|
row.item(:<%= "#{l_item}" %>).value = csv_row[<%= "#{i}" %>]
% end
end
end
end
루비에 erb에서 생성 로직 추가
require 'json'
require 'erb'
@layout="collection_list.tlf"
# 省略
erb = ERB.new(IO.read("./extract_text_block.erb"), nil, "%" )
File.open("./src.rb", "w" ) { |f|
f.write( erb.result(binding) )
}
실행하면 이런 소스가 생성되었습니다.
require 'thinreports'
require 'csv'
Thinreports::Report.generate filename: 'result.pdf', layout: 'collection_list.tlf' do
start_new_page
page.item(:name).value = ""
page.item(:birthday).value = ""
CSV.foreach("data.csv") do |csv_row|
page.list.add_row do |row|
row.item(:item_name).value = csv_row[0]
row.item(:shop).value = csv_row[1]
row.item(:date).value = csv_row[2]
end
end
end
자, PDF 시간입니다.
데이터가되는 data.csv를 준비하고 (헤더는 필요하지 않습니다)
아이템
상점
날짜
타이탄
○○가게
197X
스파이 마술사
△△가게
197X
명령
□집
197X
src.rb를 실행하면 ...!
일부 설정하지 않은 곳도 있지만, 쉽게 PDF를 만들 수있었습니다.
코딩뿐만 아니라 문서 작성 등에도 응용할 수 있다고 생각합니다.
(문서 작성은 표준 장비되어 있습니다)
템플릿 처리는 재미 있습니다.
Reference
이 문제에 관하여(Thinreports에서 서식 작성을 보다 간편하게), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tkotobu1048/items/d103afa8588d3ea67c4b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)