phantompdf 1.1.0 → 1.1.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b25c7eb048e875dbb10b202bce64574407c10000
4
- data.tar.gz: b8ff0629829516f1d6ece912920d63482b1fa998
3
+ metadata.gz: ae86097f0600f67b8b4dcce04e387310a0616080
4
+ data.tar.gz: ffaf226240d70a72325ed280f3c9175eca110cbf
5
5
  SHA512:
6
- metadata.gz: 84e3c4085a24964db92084b663b16dd8a84077b54cc2a15f6258dd7df93003da0a0e1f3ad633f67390c4f05f08e22e22ce1e4da5f7ca659dcf7a0d9090122d49
7
- data.tar.gz: 48b868e89d180fd4f8360a1c1660104fcf3fd9b9c61c1d2c5fd0e0610d4b475ea5ff6a5df37b782f923cb62e433c716c6363a3a7c6b4a40d6620abce0ca7b1ca
6
+ metadata.gz: a84c1aff47a454b516861c7eafd346543ff09d11e0bd33b1d9fd088efba218dbc0d4b9736aff92dd50938689d72d9b82616389ca5eea1a36fb8f59b29dc3cda6
7
+ data.tar.gz: 824fc062d2c2e429192f5ff69679a1cf5ac6e38f25f20aa0f1cf7e3b92417e3dd93ba1fe7bc0695e4dc17995d3f77bee7ab9f547ce38978d9aed2b132c7cd293
@@ -10,13 +10,14 @@ PATH
10
10
  phantompdf (1.1.0)
11
11
  json
12
12
  phantomjs
13
+ rack
13
14
 
14
15
  GEM
15
16
  remote: https://rubygems.org/
16
17
  specs:
17
18
  Ascii85 (1.0.2)
18
19
  afm (0.2.0)
19
- byebug (2.2.2)
20
+ byebug (2.3.0)
20
21
  columnize (~> 0.3.6)
21
22
  debugger-linecache (~> 1.2.0)
22
23
  columnize (0.3.6)
@@ -30,7 +31,9 @@ GEM
30
31
  hashery (~> 2.0)
31
32
  ruby-rc4
32
33
  ttfunk
33
- rake (10.1.0)
34
+ rack (1.5.2)
35
+ rack-test (0.6.2)
36
+ rack (>= 1.0)
34
37
  rspec (2.14.1)
35
38
  rspec-core (~> 2.14.0)
36
39
  rspec-expectations (~> 2.14.0)
@@ -50,5 +53,5 @@ DEPENDENCIES
50
53
  pdf-reader
51
54
  phantomjs!
52
55
  phantompdf!
53
- rake
56
+ rack-test
54
57
  rspec
@@ -85,7 +85,7 @@ module PhantomPDF
85
85
  def dump_footer(footer)
86
86
  return nil if footer.nil? || footer.empty?
87
87
 
88
- return "0.7cm*#{header}" unless footer.split('*')[0].to_f > 0
88
+ return "0.7cm*#{footer}" unless footer.split('*')[0].to_f > 0
89
89
 
90
90
  footer
91
91
  end
@@ -1,3 +1,3 @@
1
1
  module PhantomPDF
2
- VERSION = "1.1.0"
2
+ VERSION = "1.1.1"
3
3
  end
@@ -18,9 +18,10 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = %w(lib)
20
20
  spec.add_runtime_dependency 'phantomjs'
21
+ spec.add_runtime_dependency 'rack'
21
22
  spec.add_runtime_dependency 'json'
22
23
 
23
- spec.add_development_dependency 'rake'
24
+ spec.add_development_dependency 'rack-test'
24
25
  spec.add_development_dependency 'rspec'
25
26
  spec.add_development_dependency 'pdf-reader'
26
27
  spec.add_development_dependency 'byebug'
Binary file
@@ -11,6 +11,7 @@
11
11
  <p>
12
12
  This is a HTML file used for PhantomPDF testing.
13
13
  </p>
14
+ <img src="http://www.google.com/images/srpr/logo4w.png" />
14
15
  </div>
15
16
  </section>
16
17
  <footer>
@@ -1,12 +1,16 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  module PhantomPDF
4
- describe Generator do
5
- let(:fixtures_root) {
6
- File.expand_path('../../fixtures', __FILE__)
7
- }
4
+ fixtures_root = File.expand_path('../../fixtures', __FILE__)
5
+
6
+ resource = {
7
+ url: 'http://www.google.com',
8
+ file: "#{fixtures_root}/phantompdf.html",
9
+ html: File.read("#{fixtures_root}/phantompdf.html")
10
+ }.values.sample
8
11
 
9
- subject { Generator.new("#{fixtures_root}/phantompdf.html") }
12
+ describe Generator do
13
+ subject { Generator.new(resource) }
10
14
 
11
15
  context "attributes" do
12
16
  [:input, :output, :config].each do |rwattr|
@@ -21,105 +25,103 @@ module PhantomPDF
21
25
  end
22
26
 
23
27
  context "#generate" do
24
- fixtures_root = File.expand_path('../../fixtures', __FILE__)
25
-
26
- {
27
- url: 'http://www.google.com',
28
- file: "#{fixtures_root}/phantompdf.html",
29
- html: File.read("#{fixtures_root}/phantompdf.html")
30
- }.each do |key, value|
31
- context "with #{key}" do
32
- it "should works" do
33
- Generator.new(value).generate.should be_pdf_file
34
- end
35
- end
28
+ it "should works" do
29
+ Generator.new(resource).generate.should be_pdf_file
36
30
  end
37
31
 
38
32
  context "with output" do
39
- before :all do
40
- @url = 'http://www.google.com'
41
- @file = '/tmp/google.pdf'
33
+ before :each do
34
+ @destination = '/tmp/google.pdf'
35
+
36
+ File.unlink(@destination) if File.exist?(@destination)
42
37
  end
43
38
 
44
39
  after :each do
45
- File.exist?(@file) && File.unlink(@file)
40
+ File.unlink(@destination) if File.exist?(@destination)
46
41
  end
47
42
 
48
- it "should generate pdf file following :output" do
49
- File.exist?(@file).should be_false
50
- Generator.new(@url, @file).generate
51
- File.exist?(@file).should be_true
43
+ it "should generate pdf file following output" do
44
+ File.exist?(@destination).should be_false
45
+ Generator.new(resource, @destination).generate
46
+ File.exist?(@destination).should be_true
52
47
 
53
- @file.should be_pdf_file
48
+ @destination.should be_pdf_file
54
49
  end
55
50
 
56
- it "should raise PhantomPDF::DestinationTypeError when :output is not a string" do
51
+ it "should raise PhantomPDF::DestinationTypeError when output is not a string" do
57
52
  expect{
58
- Generator.new(@url, Object.new)
53
+ Generator.new(resource, Object.new)
59
54
  }.to raise_error(PhantomPDF::DestinationTypeError)
60
55
  end
61
56
 
62
- it "should raise PhantomPDF::DestinationPermitError when :output is not writable" do
57
+ pending "should raise PhantomPDF::DestinationPermitError when output is not writable" do
63
58
  File.stub(:writable?, '/tmp') { false }
64
59
 
65
60
  expect{
66
- Generator.new(@url, @file)
61
+ Generator.new(resource, @destination)
67
62
  }.to raise_error(PhantomPDF::DestinationPermitError)
68
63
  end
69
64
  end
70
65
 
71
- context "with options for pdf format" do
72
- before :all do
73
- @url = 'http://www.google.com'
74
- @file = '/tmp/google.pdf'
75
- @image = 'http://www.google.com/images/srpr/logo4w.png'
66
+ context "with options" do
67
+ before :each do
68
+ @destination = '/tmp/google.pdf'
69
+ @custom_image = 'http://www.google.com/images/srpr/logo4w.png'
70
+
71
+ File.unlink(@destination) if File.exist?(@destination)
76
72
  end
77
73
 
78
74
  after :each do
79
- File.exist?(@file) && File.unlink(@file)
75
+ File.unlink(@destination) if File.exist?(@destination)
80
76
  end
81
77
 
82
- pending "should support custom :header" do
78
+ it "should support custom header" do
83
79
  header = 'Hello, PhantomPDF header!'
84
80
 
85
- Generator.new(@url, @file, {:header => header}).generate
81
+ Generator.new(resource, @destination, {:header => header}).generate.should be_pdf_file
86
82
 
87
- pdf_content = PDF::Reader.new(@file).page(1).text
88
- pdf_content.should include(header)
83
+ # we CANNOT reader the file as PDF
84
+ # pdf_content = PDF::Reader.new(@destination).page(1).text
85
+ # pdf_content.should include(header)
89
86
  end
90
87
 
91
88
  it "should support images in custom header" do
92
- header = "1.8cm*PhantomPDF header!<img src=\"#{@image}\" style=\"float:right;\"/>"
89
+ header = "1.8cm*PhantomPDF header!<img src=\"#{@custom_image}\" style=\"float:right;\"/>"
93
90
 
94
- Generator.new(@url, @file, {header: header}).generate.should be_pdf_file
91
+ Generator.new(resource, @destination, {:header => header}).generate.should be_pdf_file
92
+
93
+ # we CANNOT reader the file as PDF
94
+ # pdf_content = PDF::Reader.new(@destination).page(1).text
95
+ # pdf_content.should include(@custom_image)
95
96
  end
96
97
 
97
- pending "should support custom :footer" do
98
- header = 'Hello, PhantomPDF footer!'
98
+ it "should support custom footer" do
99
+ footer = 'Hello, PhantomPDF footer!'
99
100
 
100
- Generator.new(@url, @file, {:footer => header}).generate
101
+ Generator.new(resource, @destination, {:footer => footer}).generate.should be_pdf_file
101
102
 
102
- pdf_content = PDF::Reader.new(@file).page(1).text
103
- pdf_content.should include(header)
103
+ # we CANNOT reader the file as PDF
104
+ # pdf_content = PDF::Reader.new(@destination).page(1).text
105
+ # pdf_content.should include(header)
104
106
  end
105
107
 
106
- it "should support images in custom header or footer" do
107
- footer = "1.8cm*PhantomPDF footer!<img src=\"#{@image}\" style=\"float:right;\"/>"
108
+ it "should support images in custom footer" do
109
+ footer = "1.8cm*PhantomPDF footer!<img src=\"#{@custom_image}\" style=\"float:right;\"/>"
110
+
111
+ Generator.new(resource, @destination, {:footer => footer}).generate.should be_pdf_file
108
112
 
109
- Generator.new(@url, @file, {footer: footer}).generate.should be_pdf_file
113
+ # we CANNOT reader the file as PDF
114
+ # pdf_content = PDF::Reader.new(@destination).page(1).text
115
+ # pdf_content.should include(@custom_image)
110
116
  end
111
117
  end
112
118
  end
113
119
 
114
120
  context "#generate!" do
115
- before :all do
116
- @url = 'http://www.google.com'
117
- end
118
-
119
121
  it "should raise PhantomPDF::RenderingError when failed to generate" do
120
122
  $?.stub(:exitstatus) { 1 }
121
123
 
122
- generator = Generator.new(@url)
124
+ generator = Generator.new(resource)
123
125
  generator.stub(:run) { 'rendering error' }
124
126
 
125
127
  expect{
@@ -129,12 +131,8 @@ module PhantomPDF
129
131
  end
130
132
 
131
133
  context "#to_string" do
132
- before :all do
133
- @url = 'http://www.google.com'
134
- end
135
-
136
- it "should return string" do
137
- Generator.new(@url).to_string.should be_pdf_string
134
+ it "should return string of PDF file" do
135
+ Generator.new(resource).to_string.should be_pdf_string
138
136
  end
139
137
  end
140
138
  end
@@ -1,20 +1,32 @@
1
1
  var page = require('webpage').create(),
2
2
  fs = require('fs'),
3
3
  system = require('system'),
4
- system_args_length = system.args.length;
5
- if (system_args_length < 3 || system_args_length > 12) {
6
- console.log('Usage: phantomjs rasterize.js SOURCE DESTINATION [paperWidth*paperHeight|paperFormat] [header] [footer] [margin] [orientation] [zoom] [cookie_file] [render_timeout] [timeout]');
7
- console.log(' : paper (pdf output) examples: "5in*7.5in", "10cm*20cm", "A4", "Letter"');
8
- phantom.exit(1);
4
+ system_args_len = system.args.length,
5
+ phantom_exit = function(code, message){
6
+ if (message) {
7
+ console.log(message);
8
+ }
9
+
10
+ if (page) {
11
+ page.close();
12
+ }
13
+
14
+ phantom.exit(code || 0);
15
+ };
16
+ if (system_args_len < 3 || system_args_len > 12) {
17
+ phantom_exit(1, "Usage: phantomjs rasterize.js SOURCE DESTINATION [paperWidth*paperHeight|paperFormat] [header] [footer] [margin] [orientation] [zoom] [cookie_file] [render_timeout] [timeout]\n : paper (pdf output) examples: \"5in*7.5in\", \"10cm*20cm\", \"A4\", \"Letter\"");
9
18
  }
10
19
 
11
20
  var // PhantomJS CAN NOT handle images in custom header/footer,
12
21
  // and this is used to fix the issue.
13
22
  io_images = [],
14
23
 
24
+ is_http = function(s){
25
+ return /https?:\/\/.+?/i.test(s) === true;
26
+ },
15
27
  is_html = function(s){
16
28
  return /<([a-z]+?\d*?)[^>]*?>[^\0]*?<\/\1>/i.test(s) === true;
17
- },
29
+ }
18
30
 
19
31
  extract_images = function(html){
20
32
  var image_tags = html.match(/<img[^>]+?src=(["'])https?:\/\/[^>]+?\1[^>]*?\/?>/ig),
@@ -25,7 +37,6 @@ var // PhantomJS CAN NOT handle images in custom header/footer,
25
37
  }
26
38
 
27
39
  image_tags_len = image_tags.length;
28
-
29
40
  for (i=0; i<image_tags_len; i++) {
30
41
  image = image_tags[i].match(/src=(["'])(https?:\/\/[^>]+?)\1/i);
31
42
 
@@ -67,22 +78,16 @@ var // PhantomJS CAN NOT handle images in custom header/footer,
67
78
  },
68
79
 
69
80
  render_pdf = function(html){
70
- if (!is_html(html)) {
71
- console.log('Invalid HTML source for rendering!');
72
-
73
- phantom.exit(1);
81
+ if (typeof(html) == 'string') {
82
+ page.content = inject_images(html);
74
83
  }
75
84
 
76
- page.content = inject_images(html);
77
-
78
85
  window.setTimeout(function(){
79
86
  var output_tmp = output + '_tmp.pdf';
80
87
 
81
88
  page.render(output_tmp);
82
89
  if (!fs.exists(output_tmp)) {
83
- console.log('Failed to render pdf tmp file!');
84
-
85
- phantom.exit(1);
90
+ phantom_exit(1, 'Failed to render pdf tmp file!');
86
91
  }
87
92
 
88
93
  if (fs.exists(output)) {
@@ -90,17 +95,15 @@ var // PhantomJS CAN NOT handle images in custom header/footer,
90
95
  }
91
96
 
92
97
  try {
93
- fs.move(output + '_tmp.pdf', output);
98
+ fs.move(output_tmp, output);
94
99
 
95
100
  // return pdf file path
96
101
  console.log(output);
97
102
  } catch (e) {
98
- console.log(e.message);
99
-
100
- phantom.exit(1);
103
+ phantom_exit(1, e.message);
101
104
  }
102
105
 
103
- phantom.exit();
106
+ phantom_exit()
104
107
  }, render_timeout);
105
108
  },
106
109
 
@@ -118,21 +121,19 @@ var // PhantomJS CAN NOT handle images in custom header/footer,
118
121
  timeout = system.args[11] || 90000;
119
122
 
120
123
  window.setTimeout(function(){
121
- console.log("Shit's being weird no result within " + timeout + "ms");
122
-
123
- phantom.exit(1);
124
+ phantom_exit(1, "Shit's being weird no result within " + timeout + "ms");
124
125
  }, timeout);
125
126
 
126
127
  page.viewportSize = { width:600, height:600 };
127
128
  if (output.substr(-4) === '.pdf') {
128
129
  var size, header, footer,
129
130
  paper_size_options = {};
130
- if (system_args_length > 3) {
131
+ if (system_args_len > 3) {
131
132
  size = system.args[3].split('*');
132
133
  paper_size_options = size.length === 2 ? {width:size[0], height:size[1], margin:'0px'} : {format:system.args[3], orientation:orientation, margin:margin};
133
134
  }
134
135
 
135
- if (system_args_length > 4) {
136
+ if (system_args_len > 4) {
136
137
  header = system.args[4].split('*');
137
138
  if (header.length >= 2) {
138
139
  extract_images(header.join('*'));
@@ -146,7 +147,7 @@ if (output.substr(-4) === '.pdf') {
146
147
  }
147
148
  }
148
149
 
149
- if (system_args_length > 5) {
150
+ if (system_args_len > 5) {
150
151
  footer = system.args[5].split('*');
151
152
  if (footer.length >= 2) {
152
153
  extract_images(footer.join('*'));
@@ -182,18 +183,17 @@ if (cookie_file) {
182
183
  if (is_html(input)) { // for html string
183
184
  render_pdf(input);
184
185
  } else { // for url resource
185
- var statusCode = null;
186
-
187
- // determine the statusCode
186
+ // determine the resourceStatusCode
187
+ var resourceStatusCode = null;
188
188
  page.onResourceReceived = function(resource){
189
189
  if (new RegExp('^'+input).test(resource.url)) {
190
- statusCode = resource.status;
190
+ resourceStatusCode = resource.status;
191
191
  }
192
192
  };
193
193
 
194
194
  page.open(input, function(status){
195
- if (status !== 'success' || (statusCode !== null && statusCode != 200)) {
196
- console.log(statusCode, 'Failed to load the input!');
195
+ if (status !== 'success' || (resourceStatusCode !== null && resourceStatusCode != 200)) {
196
+ console.log(resourceStatusCode, 'Failed to load the input!');
197
197
 
198
198
  if (fs.exists(output)) {
199
199
  fs.remove(output);
@@ -202,14 +202,12 @@ if (is_html(input)) { // for html string
202
202
  try {
203
203
  fs.touch(output);
204
204
  } catch (e) {
205
- console.log(e.message);
206
-
207
- phantom.exit(1);
205
+ phantom_exit(1, e.message);
208
206
  }
209
207
 
210
- phantom.exit(1);
208
+ phantom_exit(1);
211
209
  } else {
212
- render_pdf(page.content);
210
+ render_pdf(is_http(input) ? null : page.content);
213
211
  }
214
212
  });
215
213
  }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: phantompdf
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Spring MC
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-01 00:00:00.000000000 Z
11
+ date: 2013-10-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: phantomjs
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - '>='
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rack
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: json
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -39,7 +53,7 @@ dependencies:
39
53
  - !ruby/object:Gem::Version
40
54
  version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
- name: rake
56
+ name: rack-test
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
59
  - - '>='
@@ -117,6 +131,7 @@ files:
117
131
  - lib/phantompdf/source.rb
118
132
  - lib/phantompdf/version.rb
119
133
  - phantompdf.gemspec
134
+ - spec/fixtures/google.png
120
135
  - spec/fixtures/phantompdf.html
121
136
  - spec/phantompdf/assets_spec.rb
122
137
  - spec/phantompdf/config_spec.rb
@@ -150,6 +165,7 @@ signing_key:
150
165
  specification_version: 4
151
166
  summary: A PhantomJS based PDF generator
152
167
  test_files:
168
+ - spec/fixtures/google.png
153
169
  - spec/fixtures/phantompdf.html
154
170
  - spec/phantompdf/assets_spec.rb
155
171
  - spec/phantompdf/config_spec.rb
@@ -157,3 +173,4 @@ test_files:
157
173
  - spec/phantompdf/middleware_spec.rb
158
174
  - spec/phantompdf/source_spec.rb
159
175
  - spec/spec_helper.rb
176
+ has_rdoc: