mirror of
https://github.com/lloeki/tilt-pdf.git
synced 2025-12-06 10:34:41 +01:00
first version
This commit is contained in:
commit
e2c2846b81
11 changed files with 303 additions and 0 deletions
88
lib/tilt/pdf.rb
Normal file
88
lib/tilt/pdf.rb
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
require 'pdfkit'
|
||||
require 'tilt'
|
||||
require 'tilt/template'
|
||||
|
||||
PDFKit.configure do |config|
|
||||
config.wkhtmltopdf =
|
||||
'/Applications/wkhtmltopdf.app/Contents/MacOS/wkhtmltopdf'
|
||||
config.default_options = {
|
||||
page_size: 'A4',
|
||||
orientation: 'portrait',
|
||||
print_media_type: true,
|
||||
dpi: 600,
|
||||
margin_top: 0,
|
||||
margin_bottom: 0,
|
||||
margin_left: 0,
|
||||
margin_right: 0,
|
||||
header_spacing: 0,
|
||||
footer_spacing: 0,
|
||||
disable_smart_shrinking: true,
|
||||
zoom: 1.0,
|
||||
}
|
||||
end
|
||||
|
||||
module Tilt
|
||||
class PDFTemplate < Template
|
||||
self.default_mime_type = 'application/pdf'
|
||||
|
||||
def prepare; end
|
||||
|
||||
def evaluate(scope, locals, &block)
|
||||
html_file = find_html
|
||||
html = render_html(html_file, scope, locals, &block)
|
||||
|
||||
css_files = find_css
|
||||
render_css(*css_files) do |*css|
|
||||
kit = PDFKit.new(html, pdfkit_options)
|
||||
css.each { |f| kit.stylesheets << f }
|
||||
@output = kit.to_pdf
|
||||
end
|
||||
|
||||
@output
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def pdfkit_options
|
||||
YAML.load(data) || {}
|
||||
end
|
||||
|
||||
def dirname
|
||||
eval_file.gsub(/#{basename}$/, '').chomp('/')
|
||||
end
|
||||
|
||||
def find_html
|
||||
Dir.glob(File.join(dirname, name + '.html*')).first
|
||||
end
|
||||
|
||||
def find_css
|
||||
Dir.glob(File.join(dirname, name + '.css*'))
|
||||
end
|
||||
|
||||
def render_html(file, scope, locals, &block)
|
||||
Tilt.new(file).render(scope, locals, &block)
|
||||
end
|
||||
|
||||
def render_css(*files)
|
||||
tmps = []
|
||||
|
||||
files.each do |file|
|
||||
case file
|
||||
when /.*\.css$/
|
||||
yield file
|
||||
else
|
||||
tmp = Tempfile.new(File.basename(file))
|
||||
tmps << tmp
|
||||
css = Tilt.new(file).render
|
||||
tmp.write(css)
|
||||
tmp.close
|
||||
yield tmp.path
|
||||
end
|
||||
end
|
||||
ensure
|
||||
tmps.each { |tmp| tmp.close! }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Tilt.register Tilt::PDFTemplate, 'rpdf'
|
||||
Loading…
Add table
Add a link
Reference in a new issue