dragonfly_phantomjs 0.0.1 → 0.0.3

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: 6f6f61fe6650d4c2159f5dc77c215fa45eaa386d
4
- data.tar.gz: dcc9104b633d05f4a9a8646f9438016b36d8ea04
3
+ metadata.gz: f10f860936a87eb0db8c933b363f6533e6d79b88
4
+ data.tar.gz: f13237acf25cdbae2095a4c73e5440dc36318e3e
5
5
  SHA512:
6
- metadata.gz: ca6c5ab9973d7588acaa5e07c5054c56e5aff5b04ced61c97f02fb592b53c2aebb2acd387a123d4a0ceae6a2195565ee194d6268d7651503abc0b5867e2f3553
7
- data.tar.gz: 405f6c7735019483a156b9cb229fd07b991da9ae952ae0a70c3a0d8c6473f729d12ac989f427c3f2879e40bcca9d10b039eb1cbc8922a78bf72891f3fc48875d
6
+ metadata.gz: 48ee7327877f0704ffc7fac84b15907c90629a0d061275416ac162464439b60f080d9eca5720d9198f6f53477cf6eda97dd4ff405d6a771c832245e32be5b7b8
7
+ data.tar.gz: abf665d554a9e35117384565891402b783f088408ecdaede38fc3552c51b82f43600e787ae98432d216cf240eb0d5c9720100173c48d4a7815d9818bbdcfab39
data/README.md CHANGED
@@ -48,8 +48,12 @@ Options:
48
48
  :paper_size - {string}, 'width*height', '300mm*300mm', supported units are 'mm', 'cm', 'in', 'px'
49
49
  :viewport_size - {string}, 'width*height', '1440*900'
50
50
  :zoom_factor - {number}, defaults to 1
51
+ :header - {hash}, {height: '10mm', content: 'Header content'}
52
+ :footer - {hash}, {height: '10mm', content: 'Footer content'}
51
53
  ```
52
54
 
55
+ For now refer to the phantomjs [api](http://phantomjs.org/api/webpage/property/paper-size.html) for more details on how to construct the string for the header/footer. You can use `pageNum` and `numPages` as variables.
56
+
53
57
  ## Contributing
54
58
 
55
59
  1. Fork it ( https://github.com/tomasc/dragonfly_phantomjs/fork )
@@ -10,4 +10,4 @@ module DragonflyPhantomjs
10
10
  end
11
11
  end
12
12
 
13
- Dragonfly::App.register_plugin(:phantomjs) { DragonflyPhantomjs::Plugin.new }
13
+ Dragonfly::App.register_plugin(:phantomjs){ DragonflyPhantomjs::Plugin.new }
@@ -11,28 +11,28 @@ module DragonflyPhantomjs
11
11
  # Incase of .svg file, the viewport_size is automatically set to the
12
12
  # dimensions in the .svg file, unless explicitly specified in options
13
13
  #
14
- # IMPORTANT: Requires +phantomjs+
14
+ # IMPORTANT: Requires +phantomjs (~> 1.9)+
15
15
 
16
16
  class Rasterize
17
17
 
18
18
  class UnsupportedFormat < RuntimeError; end
19
19
 
20
- # :border - {number, string}, defaults to 0, supported units are 'mm', 'cm', 'in', 'px'
21
- # :format - {string}, defaults to 'A4', supported formats are 'A4', 'A3', 'A5', 'Legal', 'Letter', 'Tabloid'
22
- # :paper_size - {string}, 'width*height', '300mm*300mm', supported units are 'mm', 'cm', 'in', 'px'
23
- # :viewport_size - {string}, 'width*height', '1440*900'
24
- # :zoom_factor - {number}, defaults to 1
20
+ # :margin - {number, string}, defaults to 0, supported units are 'mm', 'cm', 'in', 'px'
21
+ # :format - {string}, defaults to 'A4', supported formats are 'A4', 'A3', 'A5', 'Legal', 'Letter', 'Tabloid'
22
+ # :paper_size - {string}, 'width*height', '300mm*300mm', supported units are 'mm', 'cm', 'in', 'px'
23
+ # :viewport_size - {string}, 'width*height', '1440*900'
24
+ # :zoom_factor - {number}, defaults to 1
25
+ # :header - {hash}, {height: '10mm', contents: 'foo'}
26
+ # :footer - {hash}, {height: '10mm', contents: 'foo'}
25
27
 
26
28
  def call content, format=:pdf, options={}
27
29
  raise UnsupportedFormat unless %w(gif jpeg pdf png).include?(format.to_s)
28
-
29
30
  content.shell_update(ext: format) do |old_path, new_path|
30
31
  if File.extname(old_path) == 'svg' && options[:viewport_size].blank?
31
32
  width = Dragonfly::Analysers::SvgAnalyser.new(content)[:width]
32
33
  height = Dragonfly::Analysers::SvgAnalyser.new.(content)[:height]
33
34
  options[:viewport_size] = "#{width.to_i}*#{height.to_i}"
34
35
  end
35
-
36
36
  "#{phantomjs_command} #{rasterize_script} #{old_path} #{new_path} '#{options.to_json}'"
37
37
  end
38
38
  end
@@ -1,3 +1,3 @@
1
1
  module DragonflyPhantomjs
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -24,6 +24,7 @@ else
24
24
 
25
25
 
26
26
 
27
+ margin = options['margin'] || 0
27
28
  border = options['border'] || 0
28
29
  format = options['format'] || 'A4'
29
30
  paper_size = options['paper_size']
@@ -33,6 +34,24 @@ user_agent = options['user_agent']
33
34
  referer = options['referer']
34
35
  element_id = options['element_id']
35
36
 
37
+ header =
38
+ if options['header']
39
+ height: options['header']['height']
40
+ contents: phantom.callback((pageNum, numPages) ->
41
+ eval options['header']['content']
42
+ )
43
+ else
44
+ null
45
+
46
+ footer =
47
+ if options['footer']
48
+ height: options['footer']['height']
49
+ contents: phantom.callback((pageNum, numPages) ->
50
+ eval options['footer']['content']
51
+ )
52
+ else
53
+ null
54
+
36
55
 
37
56
 
38
57
  # ---------------------------------------------------------------------
@@ -53,10 +72,10 @@ if output.substr(-4) is ".pdf"
53
72
  if paper_size != undefined
54
73
  page_width = paper_size.split('*')[0]
55
74
  page_height = paper_size.split('*')[1]
56
- page.paperSize = { width: page_width, height: page_height, border: border }
75
+ page.paperSize = { width: page_width, height: page_height, margin: margin, border: border, header: header, footer: footer }
57
76
 
58
77
  else if format != undefined
59
- page.paperSize = { format: format, border: border }
78
+ page.paperSize = { format: format, margin: margin, border: border, header: header, footer: footer }
60
79
 
61
80
  if viewport_size != undefined
62
81
  viewport_width = viewport_size.split('*')[0]
@@ -4,68 +4,95 @@ module DragonflyPhantomjs
4
4
  module Processors
5
5
  describe Rasterize do
6
6
 
7
- let(:app) { test_app.configure_with(:svg) }
7
+ let(:app) { test_app.configure_with(:phantomjs) }
8
8
  let(:processor) { DragonflyPhantomjs::Processors::Rasterize.new }
9
9
 
10
10
  let(:html) { Dragonfly::Content.new(app, SAMPLES_DIR.join('sample.html')) }
11
11
  let(:svg) { Dragonfly::Content.new(app, SAMPLES_DIR.join('sample.svg')) }
12
12
 
13
+ let(:html_string) { Dragonfly::Content.new(app, '<html><head></head><body>foo</body></html>', name: 'foo.html') }
14
+
13
15
  let(:options) {
14
16
  {
15
- border: 0,
17
+ margin: 0,
16
18
  format: 'A4',
17
19
  paper_size: '210mm*297mm',
18
20
  viewport_size: '1440*900',
19
- zoom_factor: 1
21
+ zoom_factor: 1,
22
+ header: {
23
+ height: '10mm',
24
+ content: 'foo'
25
+ },
26
+ footer: {
27
+ height: '10mm',
28
+ content: 'foo'
29
+ }
20
30
  }
21
31
  }
22
32
 
23
33
  describe 'html' do
24
34
  it 'returns PDF' do
25
- result = processor.call(html, :pdf, options)
26
- get_mime_type(result.path).must_include "application/pdf"
35
+ processor.call(html, :pdf)
36
+ get_mime_type(html.path).must_include "application/pdf"
37
+ assert is_pdf(html.data)
27
38
  end
28
39
 
29
40
  it 'returns PNG' do
30
- result = processor.call(html, :png, options)
31
- get_mime_type(result.path).must_include "image/png"
41
+ processor.call(html, :png, options)
42
+ get_mime_type(html.path).must_include "image/png"
32
43
  end
33
44
 
34
45
  it 'returns GIF' do
35
- result = processor.call(html, :gif, options)
36
- get_mime_type(result.path).must_include "image/gif"
46
+ processor.call(html, :gif, options)
47
+ get_mime_type(html.path).must_include "image/gif"
37
48
  end
38
49
 
39
50
  it 'returns JPEG' do
40
- result = processor.call(html, :jpeg, options)
41
- get_mime_type(result.path).must_include "image/jpeg"
51
+ processor.call(html, :jpeg, options)
52
+ get_mime_type(html.path).must_include "image/jpeg"
42
53
  end
43
54
  end
44
55
 
45
56
  describe 'svg' do
46
57
  it 'returns PDF' do
47
- result = processor.call(svg, :pdf, options)
48
- get_mime_type(result.path).must_include "application/pdf"
58
+ processor.call(svg, :pdf, options)
59
+ get_mime_type(svg.path).must_include "application/pdf"
60
+ assert is_pdf(svg.data)
49
61
  end
50
62
 
51
63
  it 'returns PNG' do
52
- result = processor.call(svg, :png, options)
53
- get_mime_type(result.path).must_include "image/png"
64
+ processor.call(svg, :png, options)
65
+ get_mime_type(svg.path).must_include "image/png"
54
66
  end
55
67
 
56
68
  it 'returns GIF' do
57
- result = processor.call(svg, :gif, options)
58
- get_mime_type(result.path).must_include "image/gif"
69
+ processor.call(svg, :gif, options)
70
+ get_mime_type(svg.path).must_include "image/gif"
59
71
  end
60
72
 
61
73
  it 'returns JPEG' do
62
- result = processor.call(svg, :jpeg, options)
63
- get_mime_type(result.path).must_include "image/jpeg"
74
+ processor.call(svg, :jpeg, options)
75
+ get_mime_type(svg.path).must_include "image/jpeg"
76
+ end
77
+ end
78
+
79
+ describe 'string' do
80
+ it 'returns PDF' do
81
+ obj = '<html><head></head><body>foo</body></html>'
82
+ def obj.original_filename; 'something.html'; end
83
+ html_string.update(obj)
84
+ processor.call(html_string, :pdf)
85
+ get_mime_type(html_string.path).must_include "application/pdf"
86
+ assert is_pdf(html_string.data)
64
87
  end
65
88
  end
66
89
 
67
90
  # ---------------------------------------------------------------------
68
91
 
92
+ def is_pdf data
93
+ data =~ /\A%PDF-1.4/
94
+ end
95
+
69
96
  def get_mime_type file_path
70
97
  `file --mime-type #{file_path}`.gsub(/\n/, "")
71
98
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dragonfly_phantomjs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tomas Celizna
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-03 00:00:00.000000000 Z
11
+ date: 2014-12-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dragonfly