From 6623656530a7a9f547c3f6fc845d43bb625c8b82 Mon Sep 17 00:00:00 2001 From: Loic Nageleisen Date: Fri, 21 Feb 2014 14:39:05 +0100 Subject: [PATCH] header + footer support --- lib/tilt/pdf.rb | 48 +++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 41 insertions(+), 7 deletions(-) diff --git a/lib/tilt/pdf.rb b/lib/tilt/pdf.rb index 065a2c6..2ea47c9 100644 --- a/lib/tilt/pdf.rb +++ b/lib/tilt/pdf.rb @@ -13,9 +13,22 @@ module Tilt def evaluate(scope, locals, &block) main = render_html(main_html_file, scope, locals, &block) - render_to_tmp(*css_files, scope, locals, block) do |tmp| - kit = PDFKit.new(main, pdfkit_options) + render_to_tmp(*aux_files, scope, locals, block) do |tmp| + opts = pdfkit_options + + if header + htmp = tmp.select { |_, f| f =~ /#{File.basename header}/ }.first[1] + opts.merge!('header-html' => htmp) if header + end + + if footer + ftmp = tmp.select { |_, f| f =~ /#{File.basename footer}/ }.first[1] + opts.merge!('footer-html' => ftmp) if footer + end + + kit = PDFKit.new(main, opts) tmp.each { |t, f| kit.stylesheets << f if t == 'text/css' } + @output = kit.to_pdf end @@ -32,6 +45,26 @@ module Tilt @config = (YAML.load(data) || {}) end + def aux_files + files = css_files + files << header if header + files << footer if footer + + files + end + + def header + if (f = config['header']) + absolutize(f) + end + end + + def footer + if (f = config['footer']) + absolutize(f) + end + end + def main_html_file main_html_from_config || find_html end @@ -77,18 +110,19 @@ module Tilt noop = %w[html css] css = files.map do |file| - if noop.include?(ext = File.extname(file).sub(/^\./, '')) + ext = File.extname(file).sub(/^\./, '') + if noop.include?(ext) ["text/#{ext}", file] else - tmp = Tempfile.new(File.basename(file)) - tmps << tmp template = Tilt.new(file) + mime = template.class.default_mime_type + ext = mime.split('/').last + tmp = Tempfile.new([File.basename(file), '.' + ext]) + tmps << tmp rendered = template.render(scope, locals, &block) tmp.write(rendered) tmp.close - mime = template.class.default_mime_type - [mime, tmp.path] end end