Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/thinreports/thinreports-generator
A Ruby library for Thinreports
https://github.com/thinreports/thinreports-generator
pdf prawn rails reporting ruby thinreports
Last synced: 30 days ago
JSON representation
A Ruby library for Thinreports
- Host: GitHub
- URL: https://github.com/thinreports/thinreports-generator
- Owner: thinreports
- License: mit
- Created: 2011-07-28T04:13:46.000Z (over 13 years ago)
- Default Branch: main
- Last Pushed: 2024-03-11T15:55:21.000Z (8 months ago)
- Last Synced: 2024-04-27T03:24:00.048Z (7 months ago)
- Topics: pdf, prawn, rails, reporting, ruby, thinreports
- Language: Ruby
- Homepage: https://github.com/thinreports/thinreports
- Size: 14.2 MB
- Stars: 291
- Watchers: 29
- Forks: 48
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: .github/CONTRIBUTING.md
- License: LICENSE.txt
Awesome Lists containing this project
- awesome-ruby-toolbox - thinreports - Thinreports is an open source report generation tool for Ruby. (Documents & Reports / Reports & Spreadsheets)
README
# Thinreports Generator
[![Gem Version](https://badge.fury.io/rb/thinreports.svg)](http://badge.fury.io/rb/thinreports)
[![Test](https://github.com/thinreports/thinreports-generator/workflows/Test/badge.svg)](https://github.com/thinreports/thinreports-generator/actions)A Ruby library for [Thinreports](https://github.com/thinreports/thinreports).
## Prerequisites
### Supported Versions
- Ruby 3.0, 3.1, 3.2, 3.3
- Prawn 2.4+## Installation
Add this line to your application's Gemfile:
```ruby
gem 'thinreports'
```And then execute:
$ bundle install
Or install it yourself as:
$ gem install thinreports
## Getting Started
First of all, check out [the README](https://github.com/thinreports/thinreports#getting-started) for an overview of Thinreports, its features, the two template formats available, and a complete example with template files and Ruby code.
## Usage
See [the README](https://github.com/thinreports/thinreports) for usage of the Section Format.
### Basic Format
The template file (`.tlf`) must be created in the [Thinreports Basic Editor](https://github.com/thinreports/thinreports-basic-editor/).
```ruby
require 'thinreports'report = Thinreports::Report.new layout: 'report.tlf'
report.start_new_page do
item(:title).value('Thinreports')
endreport.start_new_page do |page|
# Item Finder
page.item(:item_id) # => Item object
page[:item_id] # => Item object# Text block
page.item(:text_block).value('Pure Ruby')
page.item(:text_block).value = 'Pure Ruby'
page[:text_block] = 'Pure Ruby'
page.item('text_block').set('value', color: '#0000ff')
page.item(:text_block).format_enabled(false)# Image block
page.item(:image_block).src('/path/to/image.png')
page.item(:image_block).src = '/path/to/image.png'
page[:image_block] = '/path/to/image.png'
require 'open-uri'
page.item(:image_block).src(open('http://www.thinreports.org/assets/logos/thinreports-logo.png'))# Attributes
page.item(:any).hide
page.item(:any).show
page.item(:any).visible(true)
page.item(:any).visible? # => true
page.item(:any).id # => "any"# Styles
page.item(:text).style(:color, 'red')
page.item(:text).style(:bold, true)
page.item(:text).style(:italic, true)
page.item(:text).style(:linethrough, true)
page.item(:text).style(:underline, true)
page.item(:text).style(:font_size, 20)page.item(:text).style(:align, :left or :center or :right)
page.item(:text).style(:valign, :top or :center or :bottom)page.item(:rectangle).style(:border_color, '#ff0000')
.style(:border_width, 1)
.style(:fill_color, '#ffffff')# Bulk setting of styles
page.item(:text).styles(color: '#00000', align: :right)# Bulk setting of values
page.values text_block_a: 'value', text_block_b: 'value'# Helpers
page.item_exists?(:existing_id) # => true
page.item_exists?('existing_id') # => true
page.item_exists?(:unknown_id) # => false
endreport.generate(filename: 'report.pdf')
``````ruby
Thinreports::Report.generate(filename: 'report.pdf', layout: 'report.tlf') do |report|
report.start_new_page do |page|
# :
end
end
```#### Report and Page
```ruby
report = Thinreports::Report.new layout: 'foo.tlf'3.times { report.start_new_page }
# Returns all pages
report.pages # => [, , ]
# Returns number of pages
report.page_count # => 3# Add a blank page
report.add_blank_pagereport.pages.last # => Report::BlankPage
```#### Using multiple layouts
```ruby
report = Thinreports::Report.newreport.use_layout '/path/to/default.tlf', default: true
report.use_layout '/path/to/other1.tlf', id: :otherreport.start_new_page do |page|
# use '/path/to/default.tlf' layout
endreport.start_new_page layout: :other do |page|
# use '/path/to/other1.tlf' layout
endreport.start_new_page layout: '/path/to/other2.tlf' do |page|
# use '/path/to/other2.tlf' layout
end
```#### Callbacks
```ruby
report = Thinreports::Report.new layout: 'foo.tlf'# It will be called before finalizing each page
report.on_page_create do |page|
page.item(:text).value('Text for all pages')
end
```See also [basic_report/features/report_callbacks](https://github.com/thinreports/thinreports-generator/tree/main/test/basic_report/features/report_callbacks).
#### List
```ruby
report = Thinreports::Report.new layout: 'list.tlf'report.list.header do |header|
header.item(:text_block).value('Title')
end10.times do |n|
report.list.add_row do |row|
row.item(:text_block).value(n)
end
endreport.generate(filename: 'list.pdf')
``````ruby
report = Thinreports::Report.new layout: 'list_with_footer.tlf'report.list do |list|
total_price = 0
price_per_page = 0list.on_page_finalize do
total_price += price_per_page
price_per_page = 0
endlist.on_page_footer_insert do |footer|
footer.values price: price_per_page
endlist.on_footer_insert do |footer|
footer.item(:price).value(total_price)
end[100, 200, 300].each do |price|
list.add_row do |row|
row[:price] = price
end
price_per_page += price
end
end
```See also [basic_report/features/list_events](https://github.com/thinreports/thinreports-generator/tree/main/test/basic_report/features/list_events).
#### Page Number
```ruby
# Setting starting number of page
report.start_page_number_from 5# Setting whether to count new page
report.start_new_page count: true # default
report.start_new_page count: false# Change styles
report.start_new_page do |page|
page.item(:pageno).hide
page.item(:pageno).show
page.item(:pageno).visible(false)
page.item(:pageno).styles(color: 'red', bold: true)
end
```See also [basic_report/features/page_number](https://github.com/thinreports/thinreports-generator/blob/main/test/basic_report/features/page_number) and [basic_report/features/page_number_with_list](https://github.com/thinreports/thinreports-generator/blob/main/test/basic_report/features/page_number_with_list).
#### Configuring fallback fonts
```ruby
Thinreports.configure do |config|
config.fallback_fonts = '/path/to/fallback.ttf'
endThinreports.config.fallback_fonts = ['/path/to/font_a.ttf', '/path/to/font_b.ttf']
```See also [basic_report/features/eudc](https://github.com/thinreports/thinreports-generator/blob/main/test/basic_report/features/eudc).
## Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/thinreports/thinreports-generator. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/thinreports/thinreports/blob/main/CODE_OF_CONDUCT.md).
## Development
### Feature test requires diff-pdf command
In order to run feature test, you need to install [diff-pdf](https://github.com/vslavik/diff-pdf) in your environment, or you can run test in the docker container as below.
### How to develop in Docker container
You can use the Docker container for development. This container contains the libraries required for testing, such as diff-pdf.
```
$ docker pull ghcr.io/hidakatsuya/ruby-with-diff-pdf:latest
$ docker run -v $PWD:/src:cached -it ghcr.io/hidakatsuya/ruby-with-diff-pdf bash> /src#
```You can run test:
```
> /src# bundle install
> /src# bundle exec rake test
```## Releasing Generator
1. Update the version number in `version.rb`
2. Update `CHANGELOG.md` and `README.md` (if needed)
3. Create the Release PR like #105
4. Merge the PR
5. Is the main CI green? If not, make it green
6. Run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to rubygems.org## License
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
## Copyright
(c) 2021 [Matsukei Co.,Ltd](http://www.matsukei.co.jp).