wisepdf 1.1.1 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/VERSION +1 -1
- data/lib/wisepdf/render.rb +44 -54
- data/lib/wisepdf/writer.rb +26 -5
- data/wisepdf.gemspec +2 -2
- metadata +15 -15
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.1.
|
1
|
+
1.1.2
|
data/lib/wisepdf/render.rb
CHANGED
@@ -11,8 +11,6 @@ module Wisepdf
|
|
11
11
|
def render(options = nil, *args, &block)
|
12
12
|
if options.is_a?(Hash) && options.has_key?(:pdf)
|
13
13
|
log_pdf_creation
|
14
|
-
options[:basic_auth] = set_basic_auth(options)
|
15
|
-
|
16
14
|
make_and_send_pdf(options.delete(:pdf), Wisepdf::Configuration.options.merge(options))
|
17
15
|
else
|
18
16
|
super
|
@@ -22,71 +20,63 @@ module Wisepdf
|
|
22
20
|
def render_to_string(options = nil, *args, &block)
|
23
21
|
if options.is_a?(Hash) && options.has_key?(:pdf)
|
24
22
|
log_pdf_creation
|
25
|
-
options
|
26
|
-
options.delete :pdf
|
23
|
+
options.delete(:pdf)
|
27
24
|
make_pdf(Wisepdf::Configuration.options.merge(options))
|
28
25
|
else
|
29
26
|
super
|
30
27
|
end
|
31
28
|
end
|
32
29
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
end
|
38
|
-
|
39
|
-
def set_basic_auth(options={})
|
40
|
-
options[:basic_auth] ||= Wisepdf::Configuration.options.fetch(:basic_auth){ false }
|
41
|
-
if options[:basic_auth] && request.env["HTTP_AUTHORIZATION"]
|
42
|
-
request.env["HTTP_AUTHORIZATION"].split(" ").last
|
43
|
-
end
|
44
|
-
end
|
30
|
+
protected
|
31
|
+
def log_pdf_creation
|
32
|
+
logger.info '*'*15 + 'PDF' + '*'*15
|
33
|
+
end
|
45
34
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
end
|
35
|
+
def clean_temp_files
|
36
|
+
if defined?(@hf_tempfiles)
|
37
|
+
@hf_tempfiles.each { |tf| tf.close! }
|
50
38
|
end
|
39
|
+
end
|
51
40
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
41
|
+
def make_pdf(options = {})
|
42
|
+
html_string = render_to_string(:template => options.delete(:template), :layout => options.delete(:layout))
|
43
|
+
options = prerender_header_and_footer(options)
|
44
|
+
w = Wisepdf::Writer.new(options[:wkhtmltopdf])
|
45
|
+
w.to_pdf(html_string, options)
|
46
|
+
end
|
58
47
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
end
|
48
|
+
def make_and_send_pdf(pdf_name, options={})
|
49
|
+
options[:wkhtmltopdf] ||= nil
|
50
|
+
options[:layout] ||= false
|
51
|
+
options[:template] ||= File.join(controller_path, action_name)
|
52
|
+
options[:disposition] ||= "inline"
|
53
|
+
if options[:show_as_html]
|
54
|
+
render :template => options[:template], :layout => options[:layout], :content_type => "text/html"
|
55
|
+
else
|
56
|
+
pdf_content = make_pdf(options)
|
57
|
+
File.open(options[:save_to_file], 'wb') {|file| file << pdf_content } if options.delete(:save_to_file)
|
58
|
+
|
59
|
+
pdf_name += '.pdf' unless pdf_name =~ /.pdf\z|.PDF\Z/
|
60
|
+
send_data(pdf_content, :filename => pdf_name, :type => 'application/pdf', :disposition => options[:disposition]) unless options[:save_only]
|
73
61
|
end
|
62
|
+
end
|
74
63
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
64
|
+
def prerender_header_and_footer(arguments)
|
65
|
+
[:header, :footer].each do |hf|
|
66
|
+
if arguments[hf] && arguments[hf][:html] && arguments[hf][:html].is_a?(Hash)
|
67
|
+
opts = arguments[hf].delete(:html)
|
68
|
+
|
69
|
+
@hf_tempfiles = [] if ! defined?(@hf_tempfiles)
|
70
|
+
@hf_tempfiles.push( tf = Wisepdf::Tempfile.new("wisepdf_#{hf}_pdf.html") )
|
71
|
+
opts[:layout] ||= arguments[:layout]
|
72
|
+
|
73
|
+
tf.write render_to_string(:template => opts[:template], :layout => opts[:layout], :locals => opts[:locals])
|
74
|
+
tf.flush
|
75
|
+
|
76
|
+
options[hf][:html] = "file://#{tf.path}"
|
88
77
|
end
|
89
|
-
options
|
90
78
|
end
|
79
|
+
arguments
|
80
|
+
end
|
91
81
|
end
|
92
82
|
end
|
data/lib/wisepdf/writer.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'open3'
|
2
|
+
|
1
3
|
module Wisepdf
|
2
4
|
class Writer
|
3
5
|
def initialize(path=nil)
|
@@ -11,12 +13,31 @@ module Wisepdf
|
|
11
13
|
invoke = self.command.join(' ')
|
12
14
|
log(invoke) if Wisepdf::Configuration.development? || Wisepdf::Configuration.test?
|
13
15
|
|
14
|
-
result = IO.popen(invoke, "wb+") do |
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
16
|
+
# result = IO.popen(invoke, "wb+") do |f|
|
17
|
+
# # f.sync = true
|
18
|
+
# f.puts(string)
|
19
|
+
# f.close_write
|
20
|
+
# f.gets(nil)
|
21
|
+
#
|
22
|
+
# # pdf = f.gets(nil)
|
23
|
+
# # f.close
|
24
|
+
# # pdf
|
25
|
+
# end
|
26
|
+
result, err = Open3.popen3(invoke) do |stdin, stdout, stderr|
|
27
|
+
stdin.write(string)
|
28
|
+
stdin.close
|
29
|
+
[stdout.read, stderr.read]
|
19
30
|
end
|
31
|
+
# result, err = Open3.popen3(invoke) do |stdin, stdout, stderr|
|
32
|
+
# stdin.binmode
|
33
|
+
# stdout.binmode
|
34
|
+
# stderr.binmode
|
35
|
+
# stdin.write(string)
|
36
|
+
# stdin.close_write
|
37
|
+
#
|
38
|
+
# [stdout.read, stderr.read]
|
39
|
+
# end
|
40
|
+
|
20
41
|
|
21
42
|
raise Wisepdf::WriteError if result.to_s.strip.empty?
|
22
43
|
|
data/wisepdf.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "wisepdf"
|
8
|
-
s.version = "1.1.
|
8
|
+
s.version = "1.1.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Igor Alexandrov"]
|
12
|
-
s.date = "2012-04-
|
12
|
+
s.date = "2012-04-27"
|
13
13
|
s.description = "wisepdf uses the shell utility wkhtmltopdf to serve a PDF file to a user from HTML. In other words, rather than dealing with a PDF generation DSL of some sort, you simply write an HTML view as you would normally, and let pdf take care of the hard stuff."
|
14
14
|
s.email = "igor.alexandrov@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wisepdf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-04-
|
12
|
+
date: 2012-04-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
16
|
-
requirement: &
|
16
|
+
requirement: &70342391986920 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 3.0.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70342391986920
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: sqlite3
|
27
|
-
requirement: &
|
27
|
+
requirement: &70342391985400 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70342391985400
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: wkhtmltopdf-binary
|
38
|
-
requirement: &
|
38
|
+
requirement: &70342391984480 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70342391984480
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: shoulda
|
49
|
-
requirement: &
|
49
|
+
requirement: &70342391983740 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70342391983740
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: bundler
|
60
|
-
requirement: &
|
60
|
+
requirement: &70342391982400 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 1.0.0
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70342391982400
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: jeweler
|
71
|
-
requirement: &
|
71
|
+
requirement: &70342391981320 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ~>
|
@@ -76,7 +76,7 @@ dependencies:
|
|
76
76
|
version: 1.6.4
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70342391981320
|
80
80
|
description: wisepdf uses the shell utility wkhtmltopdf to serve a PDF file to a user
|
81
81
|
from HTML. In other words, rather than dealing with a PDF generation DSL of some
|
82
82
|
sort, you simply write an HTML view as you would normally, and let pdf take care
|
@@ -172,7 +172,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
172
172
|
version: '0'
|
173
173
|
segments:
|
174
174
|
- 0
|
175
|
-
hash:
|
175
|
+
hash: 3612362875393278572
|
176
176
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
177
177
|
none: false
|
178
178
|
requirements:
|