Paper generation based on templates. Web-based printing using print-client.
The context of the templates will using Liquid Drops, and call to_liquid
on your objects.
In case you want web-printing, the params needs an owner and possibly a locale. Use default_params
on the
configuration object to set the owner or locale of a document.
# config/initializers/papyrus.rb
config.default_params = lambda { |_event, _record|
{owner: Current.user, locale: I18n.locale}
}
Install the PrintNode app: https://www.printnode.com/en
Print anything this way
`Papyrus::Paper.new(kind: 'pdf', use: 'document', purpose: 'packlist', owner: User.first, attachment: {io: StringIO.new("test"), filename: 'test.pdf'}).print!`
or, for ZPL labels for example:
Papyrus::Paper.new(kind: 'liquid', use: 'label', purpose: 'whatever', owner: User.first, attachment: {io: StringIO.new("^XA^BY5,2,270^FO100,50^BC^FD12345678^FS^XZ"), filename: 'test.zpl'}).print!
You can consolidate print jobs by using the consolidate
option. This will create a single print job for all the papers
that have the same consolidation_id
.
This is useful for example when you want to send a single print job to a label printer for all the labels that are
printed within a context (e.g. a shipment).
Example:
Papyrus.consolidate do
Papyrus::Paper.new(kind: 'liquid', use: 'label', purpose: 'whatever', owner: User.first, attachment: {io: StringIO.new("^XA^BY5,2,270^FO100,50^BC^FD12345678^FS^XZ"), filename: 'test.zpl'}, consolidation_id: 'shipment-123').print!
Papyrus::Paper.new(kind: 'liquid', use: 'label', purpose: 'whatever', owner: User.first, attachment: {io: StringIO.new("^XA^BY5,2,270^FO100,50^BC^FD12345678^FS^XZ"), filename: 'test.zpl'}, consolidation_id: 'shipment-123').print!
# Paper 1 and 2 will be consolidated into a single print job and sent to the printer
Papyrus.print_consolidation(Papyrus.consolidation_id)
end
If you have Sidekiq Pro Papyrus::Consolidation::Batch
can be used to consolidate print jobs asynchronously.
In order to make use of this you need to add the following to your config/initializers/sidekiq.rb
or in any other
initializer:
require 'papyrus/consolidation/sidekiq_client_middleware'
require 'papyrus/consolidation/sidekiq_server_middleware'
Sidekiq.configure_server do |config|
config.server_middleware do |chain|
chain.add Papyrus::Consolidation::SidekiqServerMiddleware
end
end
Sidekiq.configure_client do |config|
config.client_middleware do |chain|
chain.add Papyrus::Consolidation::SidekiqClientMiddleware
end
end
Example usage:
require 'papyrus/consolidation/batch'
Papyrus::Consolidation::Batch.start do
Job1.perform_async
Job2.perform_async
end
When all jobs are finished a consolidated print job will start. Any job that is executed within a job will be also added to the batch.
This is done using Prawn. See here for more info:
- Prawn
- Prawn Tables
- Barcodes are generated using barby: https://github.com/toretore/barby/wiki/Symbologies
Papyrus depends on imagemagic for some operations
Add this line to your application's Gemfile:
gem 'papyrus'
And then execute:
$ bundle
Or install it yourself as:
$ gem install papyrus
Run yarn link
inside frontend
folder
Run yarn link @components/papyrus
inside your main app.
Contribution directions go here.
The gem is available as open source under the terms of the MIT License.