{"id":13416466,"url":"https://github.com/thinreports/thinreports-generator","last_synced_at":"2025-04-08T09:06:38.695Z","repository":{"id":1593447,"uuid":"2116739","full_name":"thinreports/thinreports-generator","owner":"thinreports","description":"A Ruby library for Thinreports","archived":false,"fork":false,"pushed_at":"2024-03-11T15:55:21.000Z","size":14849,"stargazers_count":297,"open_issues_count":7,"forks_count":48,"subscribers_count":29,"default_branch":"main","last_synced_at":"2024-10-29T14:18:01.464Z","etag":null,"topics":["pdf","prawn","rails","reporting","ruby","thinreports"],"latest_commit_sha":null,"homepage":"https://github.com/thinreports/thinreports","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thinreports.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2011-07-28T04:13:46.000Z","updated_at":"2024-10-29T07:08:47.000Z","dependencies_parsed_at":"2024-01-13T17:49:58.376Z","dependency_job_id":"cab7cd30-127f-40f5-a7e1-20286f8193cd","html_url":"https://github.com/thinreports/thinreports-generator","commit_stats":{"total_commits":494,"total_committers":13,"mean_commits":38.0,"dds":0.4149797570850202,"last_synced_commit":"cff720908e6ec321bfd34bc05118cbcda64d0e7a"},"previous_names":[],"tags_count":21,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thinreports%2Fthinreports-generator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thinreports%2Fthinreports-generator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thinreports%2Fthinreports-generator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thinreports%2Fthinreports-generator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thinreports","download_url":"https://codeload.github.com/thinreports/thinreports-generator/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247809964,"owners_count":20999816,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["pdf","prawn","rails","reporting","ruby","thinreports"],"created_at":"2024-07-30T21:00:59.231Z","updated_at":"2025-04-08T09:06:38.673Z","avatar_url":"https://github.com/thinreports.png","language":"Ruby","readme":"# Thinreports Generator\n\n[![Gem Version](https://badge.fury.io/rb/thinreports.svg)](http://badge.fury.io/rb/thinreports)\n[![Test](https://github.com/thinreports/thinreports-generator/workflows/Test/badge.svg)](https://github.com/thinreports/thinreports-generator/actions)\n\nA Ruby library for [Thinreports](https://github.com/thinreports/thinreports).\n\n## Prerequisites\n\n### Supported Versions\n\n- Ruby 3.0, 3.1, 3.2, 3.3\n- Prawn 2.4+\n\n## Installation\n\nAdd this line to your application's Gemfile:\n\n```ruby\ngem 'thinreports'\n```\n\nAnd then execute:\n\n    $ bundle install\n\nOr install it yourself as:\n\n    $ gem install thinreports\n\n\n## Getting Started\n\nFirst 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.\n\n## Usage\n\nSee [the README](https://github.com/thinreports/thinreports) for usage of the Section Format.\n\n### Basic Format\n\nThe template file (`.tlf`) must be created in the [Thinreports Basic Editor](https://github.com/thinreports/thinreports-basic-editor/).\n\n```ruby\nrequire 'thinreports'\n\nreport = Thinreports::Report.new layout: 'report.tlf'\n\nreport.start_new_page do\n  item(:title).value('Thinreports')\nend\n\nreport.start_new_page do |page|\n  # Item Finder\n  page.item(:item_id) # =\u003e Item object\n  page[:item_id]      # =\u003e Item object\n\n  # Text block\n  page.item(:text_block).value('Pure Ruby')\n  page.item(:text_block).value = 'Pure Ruby'\n  page[:text_block] = 'Pure Ruby'\n  page.item('text_block').set('value', color: '#0000ff')\n  page.item(:text_block).format_enabled(false)\n\n  # Image block\n  page.item(:image_block).src('/path/to/image.png')\n  page.item(:image_block).src = '/path/to/image.png'\n  page[:image_block] = '/path/to/image.png'\n  require 'open-uri'\n  page.item(:image_block).src(open('http://www.thinreports.org/assets/logos/thinreports-logo.png'))\n\n  # Attributes\n  page.item(:any).hide\n  page.item(:any).show\n  page.item(:any).visible(true)\n  page.item(:any).visible? # =\u003e true\n  page.item(:any).id # =\u003e \"any\"\n\n  # Styles\n  page.item(:text).style(:color, 'red')\n  page.item(:text).style(:bold, true)\n  page.item(:text).style(:italic, true)\n  page.item(:text).style(:linethrough, true)\n  page.item(:text).style(:underline, true)\n  page.item(:text).style(:font_size, 20)\n\n  page.item(:text).style(:align, :left or :center or :right)\n  page.item(:text).style(:valign, :top or :center or :bottom)\n\n  page.item(:rectangle).style(:border_color, '#ff0000')\n                       .style(:border_width, 1)\n                       .style(:fill_color, '#ffffff')\n\n  # Bulk setting of styles\n  page.item(:text).styles(color: '#00000', align: :right)\n\n  # Bulk setting of values\n  page.values text_block_a: 'value', text_block_b: 'value'\n\n  # Helpers\n  page.item_exists?(:existing_id)  # =\u003e true\n  page.item_exists?('existing_id') # =\u003e true\n  page.item_exists?(:unknown_id)   # =\u003e false\nend\n\nreport.generate(filename: 'report.pdf')\n```\n\n```ruby\nThinreports::Report.generate(filename: 'report.pdf', layout: 'report.tlf') do |report|\n  report.start_new_page do |page|\n    # :\n  end\nend\n```\n\n#### Report and Page\n\n```ruby\nreport = Thinreports::Report.new layout: 'foo.tlf'\n\n3.times { report.start_new_page }\n\n# Returns all pages\nreport.pages # =\u003e [\u003cReport::Page\u003e, \u003cReport::Page\u003e, \u003cReport::Page\u003e]\n# Returns number of pages\nreport.page_count # =\u003e 3\n\n# Add a blank page\nreport.add_blank_page\n\nreport.pages.last # =\u003e Report::BlankPage\n```\n\n#### Using multiple layouts\n\n```ruby\nreport = Thinreports::Report.new\n\nreport.use_layout '/path/to/default.tlf', default: true\nreport.use_layout '/path/to/other1.tlf', id: :other\n\nreport.start_new_page do |page|\n  # use '/path/to/default.tlf' layout\nend\n\nreport.start_new_page layout: :other do |page|\n  # use '/path/to/other1.tlf' layout\nend\n\nreport.start_new_page layout: '/path/to/other2.tlf' do |page|\n  # use '/path/to/other2.tlf' layout\nend\n```\n\n#### Callbacks\n\n```ruby\nreport = Thinreports::Report.new layout: 'foo.tlf'\n\n# It will be called before finalizing each page\nreport.on_page_create do |page|\n  page.item(:text).value('Text for all pages')\nend\n```\n\nSee also [basic_report/features/report_callbacks](https://github.com/thinreports/thinreports-generator/tree/main/test/basic_report/features/report_callbacks).\n\n#### List\n\n```ruby\nreport = Thinreports::Report.new layout: 'list.tlf'\n\nreport.list.header do |header|\n  header.item(:text_block).value('Title')\nend\n\n10.times do |n|\n  report.list.add_row do |row|\n    row.item(:text_block).value(n)\n  end\nend\n\nreport.generate(filename: 'list.pdf')\n```\n\n```ruby\nreport = Thinreports::Report.new layout: 'list_with_footer.tlf'\n\nreport.list do |list|\n  total_price = 0\n  price_per_page = 0\n\n  list.on_page_finalize do\n    total_price += price_per_page\n    price_per_page = 0\n  end\n\n  list.on_page_footer_insert do |footer|\n    footer.values price: price_per_page\n  end\n\n  list.on_footer_insert do |footer|\n    footer.item(:price).value(total_price)\n  end\n\n  [100, 200, 300].each do |price|\n    list.add_row do |row|\n      row[:price] = price\n    end\n    price_per_page += price\n  end\nend\n```\n\nSee also  [basic_report/features/list_events](https://github.com/thinreports/thinreports-generator/tree/main/test/basic_report/features/list_events).\n\n#### Page Number\n\n```ruby\n# Setting starting number of page\nreport.start_page_number_from 5\n\n# Setting whether to count new page\nreport.start_new_page count: true # default\nreport.start_new_page count: false\n\n# Change styles\nreport.start_new_page do |page|\n  page.item(:pageno).hide\n  page.item(:pageno).show\n  page.item(:pageno).visible(false)\n  page.item(:pageno).styles(color: 'red', bold: true)\nend\n```\n\nSee 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).\n\n#### Configuring fallback fonts\n\n```ruby\nThinreports.configure do |config|\n  config.fallback_fonts = '/path/to/fallback.ttf'\nend\n\nThinreports.config.fallback_fonts = ['/path/to/font_a.ttf', '/path/to/font_b.ttf']\n```\n\nSee also [basic_report/features/eudc](https://github.com/thinreports/thinreports-generator/blob/main/test/basic_report/features/eudc).\n\n## Contributing\n\nBug 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).\n\n## Development\n\n### Feature test requires diff-pdf command\n\nIn 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.\n\n### How to develop in Docker container\n\nYou can use the Docker container for development. This container contains the libraries required for testing, such as diff-pdf.\n\n```\n$ docker pull ghcr.io/hidakatsuya/ruby-with-diff-pdf:latest\n$ docker run -v $PWD:/src:cached -it ghcr.io/hidakatsuya/ruby-with-diff-pdf bash\n\n\u003e /src#\n```\n\nYou can run test:\n\n```\n\u003e /src# bundle install\n\u003e /src# bundle exec rake test\n```\n\n## Releasing Generator\n\n1. Update the version number in `version.rb`\n2. Update `CHANGELOG.md` and `README.md` (if needed)\n3. Create the Release PR like #105\n4. Merge the PR\n5. Is the main CI green? If not, make it green\n6. 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\n\n## License\n\nThe gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).\n\n## Copyright\n\n(c) 2021 [Matsukei Co.,Ltd](http://www.matsukei.co.jp).\n","funding_links":[],"categories":["Ruby","Documents \u0026 Reports"],"sub_categories":["Reports \u0026 Spreadsheets"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthinreports%2Fthinreports-generator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthinreports%2Fthinreports-generator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthinreports%2Fthinreports-generator/lists"}