html2pdf
Convert multiple html or xhtml files to pdfs using the power of wkhtmltopdf.
Note: starting from version 0.1.0
this gem will be release based on Semantic Versioning convention.
Installation
Mandatory Requirement
- wkhtmltopdf - please see wkhtmltopdf installation for detail
Usage
gem install html2pdf
For list of usage type
html2pdf
Which should give the following output
Usage:
html2pdf
Options:
-b, [--base-dir=BASE_DIR] # Base directory
# Default: . (current directory)
-r, [--recursive], [--no-recursive] # Search for files recursively
# Default: true
-v, [--version], [--no-version] # Display version information
Example Usage
- Convert all
xhtml
andhtml
fromtest/fixtures/samples
directory recursively
html2pdf -b test/fixtures/samples -r
Before the run
test/fixtures/samples/
├── demo1_xxx.rb.xhtml
├── demo2_xxx.rb.xhtml
└── sub_dir
├── demo3_xxx.rb.xhtml
└── demo4_xxx.rb.xhtml
After the above command is executed:
You should get the output html2pdf_samples.tar.gz
which contain the pdf version of the input files above.
e.g.
├── demo1_xxx.rb.xhtml.pdf
├── demo2_xxx.rb.xhtml.pdf
└── sub_dir
├── demo3_xxx.rb.xhtml.pdf
└── demo4_xxx.rb.xhtml.pdf
Usage Tips
This is my personal use case
-
Use vim_printer which export any source code to list of (x)html files in a single tar.gzipped file.
-
Use the output from vim_printer as input to this program so that you get the pdf version of it.
-
Then combine the generated pdf files using pdfs2pdf gem to produce one pdf file
Customization
If you like to adjust the output for pdf you can override the default settings by
set your own configuration in the file lib/html2pdf/config/html2pdf.rb
For more customization please see the wkhtmltopdf manual page for detail.
module Html2Pdf
class << self
# rubocop:disable MethodLength
def update_config
Html2Pdf.configure do |config|
# Note: or add your own path here if `wkhtmltopdf` is not in the $PATH environment
config.options[:wkhtmltopdf] = (defined?(Bundler::GemfileError) ? `bundle exec which wkhtmltopdf` : `which wkhtmltopdf`).chomp
config.options[:page_settings] = [
"--margin-top 8",
"--margin-bottom 8",
"--margin-left 8",
"--margin-right 8",
'--header-center "[webpage] :: [page]/[topage]"',
"--header-spacing 1",
"--header-font-size 8",
"--header-line",
"--footer-spacing 1",
"--footer-font-size 8",
"--footer-line"
]
end
end
# rubocop:enable All
end
end
Contributing
- Fork it ( http://github.com/agilecreativity/html2pdf/fork )
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request