prawn-svg 0.12.0.2 → 0.12.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -16,9 +16,13 @@ Prawn::Document.generate("svg.pdf") do
16
16
  end
17
17
  ```
18
18
 
19
- <tt>:at</tt> must be specified. <tt>:width</tt>, <tt>:height</tt>, or neither may be specified; if neither is present,
19
+ <tt>:at</tt> must be specified.
20
+
21
+ <tt>:width</tt>, <tt>:height</tt>, or neither may be specified; if neither is present,
20
22
  the resolution specified in the SVG will be used.
21
23
 
24
+ <tt>:cache_images</tt>, if set to true, will cache images per document based on their URL.
25
+
22
26
  Supported features
23
27
  ------------------
24
28
 
@@ -46,7 +50,7 @@ prawn-svg is in its infancy and does not support the full SVG specifications. I
46
50
 
47
51
  - <tt>style</tt> tag, if css_parser gem is installed on the system (see CSS section below)
48
52
 
49
- - <tt>image</tt> tag, only with http/https schemes and preserveAspectRatio of 'xMidYMid' (default) or 'none'
53
+ - <tt>image</tt> tag, only with http/https schemes; does not support 'slice' preserveAspectRatio
50
54
 
51
55
  - attributes/styles: <tt>fill</tt>, <tt>stroke</tt>, <tt>stroke-width</tt>, <tt>opacity</tt>, <tt>fill-opacity</tt>, <tt>stroke-opacity</tt>, <tt>transform</tt>
52
56
 
@@ -74,7 +78,7 @@ so do not expect too much of it.
74
78
  Not supported
75
79
  -------------
76
80
 
77
- prawn-svg does NOT support external references, measurements in en or em, gradients/patterns or markers.
81
+ prawn-svg does NOT support external references, measurements in en or em, sub-viewports, gradients/patterns or markers.
78
82
 
79
83
  --
80
84
  Copyright Roger Nesbitt <roger@seriousorange.com>. MIT licence.
@@ -18,7 +18,7 @@ class Prawn::Svg::Document
18
18
  attr_accessor :scale
19
19
 
20
20
  attr_reader :root,
21
- :actual_width, :actual_height, :width, :height, :x_offset, :y_offset,
21
+ :actual_width, :actual_height, :width, :height, :x_offset, :y_offset, :cache_images,
22
22
  :css_parser
23
23
 
24
24
  def initialize(data, bounds, options)
@@ -27,6 +27,7 @@ class Prawn::Svg::Document
27
27
  @root = REXML::Document.new(data).root
28
28
  @warnings = []
29
29
  @options = options
30
+ @cache_images = options[:cache_images]
30
31
  @actual_width, @actual_height = bounds # set this first so % width/heights can be used
31
32
 
32
33
  if vb = @root.attributes['viewBox']
@@ -141,7 +141,7 @@ class Prawn::Svg::Parser
141
141
  # ignore
142
142
  do_not_append_calls = true
143
143
 
144
- when 'font-face'
144
+ when 'font-face', 'clipPath'
145
145
  # not supported
146
146
  do_not_append_calls = true
147
147
 
@@ -167,6 +167,8 @@ class Prawn::Svg::Parser
167
167
  @document.warnings << e.message
168
168
  end
169
169
 
170
+ element.add_call 'join_style', :bevel
171
+
170
172
  commands.collect do |command, args|
171
173
  if args && args.length > 0
172
174
  point_to = [x(args[0]), y(args[1])]
@@ -14,6 +14,7 @@ class Prawn::Svg::Parser::Image
14
14
 
15
15
  def initialize(document)
16
16
  @document = document
17
+ @url_cache = {}
17
18
  end
18
19
 
19
20
  def parse(element)
@@ -27,7 +28,7 @@ class Prawn::Svg::Parser::Image
27
28
  end
28
29
 
29
30
  image = begin
30
- open(url).read
31
+ retrieve_data_from_url(url)
31
32
  rescue => e
32
33
  raise Error, "Error retrieving URL #{url}: #{e.message}"
33
34
  end
@@ -36,36 +37,38 @@ class Prawn::Svg::Parser::Image
36
37
  y = y(attrs['y'] || 0)
37
38
  width = distance(attrs['width'])
38
39
  height = distance(attrs['height'])
39
- options = {}
40
40
 
41
41
  return if width.zero? || height.zero?
42
42
  raise Error, "width and height must be 0 or higher" if width < 0 || height < 0
43
43
 
44
44
  par = (attrs['preserveAspectRatio'] || "xMidYMid meet").strip.split(/\s+/)
45
- par.unshift if par.first == "defer"
45
+ par.shift if par.first == "defer"
46
+ align, meet_or_slice = par
47
+ raise Error, "slice preserveAspectRatio not supported by Prawn" if meet_or_slice == "slice"
46
48
 
47
- case par.first
48
- when 'xMidYMid'
49
+ options = {}
50
+ case align
51
+ when /\Ax(Min|Mid|Max)Y(Min|Mid|Max)\z/
52
+ options[:fit] = [width, height]
49
53
  ratio = image_ratio(image)
50
- if width < height
51
- options[:width] = width
52
- y -= height/2 - width/ratio/2
53
- elsif width > height
54
- options[:height] = height
55
- x += width/2 - height*ratio/2
54
+ if width/height < ratio
55
+ y -= case $2
56
+ when "Min" then 0
57
+ when "Mid" then (height - width/ratio)/2
58
+ when "Max" then height - width/ratio
59
+ end
56
60
  else
57
- options[:fit] = [width, height]
58
- if ratio >= 1
59
- y -= height/2 - width/ratio/2
60
- else
61
- x += width/2 - height*ratio/2
62
- end
61
+ x += case $1
62
+ when "Min" then 0
63
+ when "Mid" then (width - height*ratio)/2
64
+ when "Max" then width - height*ratio
65
+ end
63
66
  end
64
67
  when 'none'
65
68
  options[:width] = width
66
69
  options[:height] = height
67
70
  else
68
- raise Error, "image tag only support preserveAspectRatio with xMidYMid or none; ignoring"
71
+ raise Error, "unknown preserveAspectRatio align keyword; ignoring image"
69
72
  end
70
73
 
71
74
  options[:at] = [x, y]
@@ -95,6 +98,14 @@ class Prawn::Svg::Parser::Image
95
98
  w.to_f / h.to_f
96
99
  end
97
100
 
101
+ def retrieve_data_from_url(url)
102
+ @url_cache[url] || begin
103
+ data = open(url).read
104
+ @url_cache[url] = data if @document.cache_images
105
+ data
106
+ end
107
+ end
108
+
98
109
  %w(x y distance).each do |method|
99
110
  define_method(method) {|*a| @document.send(method, *a)}
100
111
  end
@@ -1,5 +1,5 @@
1
1
  module Prawn
2
2
  module Svg
3
- VERSION = '0.12.0.2'
3
+ VERSION = '0.12.0.3'
4
4
  end
5
5
  end
data/spec/lib/svg_spec.rb CHANGED
@@ -11,11 +11,12 @@ describe Prawn::Svg::Interface do
11
11
 
12
12
  files.each do |file|
13
13
  it "renders the #{File.basename file} sample file without warnings or crashing" do
14
+ warnings = nil
14
15
  Prawn::Document.generate("#{root}/spec/sample_output/#{File.basename file}.pdf") do
15
- r = svg IO.read(file), :at => [0, y], :width => 612 - 72
16
+ r = svg IO.read(file), :at => [0, y], :width => 612 - 72, :cache_images => true
16
17
  warnings = r[:warnings].reject {|w| w =~ /Verdana/ && w =~ /is not a known font/ }
17
- warnings.should == []
18
18
  end
19
+ warnings.should == []
19
20
  end
20
21
  end
21
22
  end
@@ -0,0 +1,181 @@
1
+ <svg width="944" height="500" style="overflow-x: hidden; overflow-y: hidden;" xmlns="http://www.w3.org/2000/svg" version="1.1">
2
+ <defs id="defs">
3
+ <clipPath id="_ABSTRACT_RENDERER_ID_0">
4
+ <rect x="40" y="40" width="868" height="400"></rect>
5
+ </clipPath>
6
+ </defs>
7
+ <g>
8
+ <rect x="40" y="40" width="868" height="400" stroke="none" stroke-width="0" fill-opacity="0" fill="#ffffff"></rect>
9
+ <g clip-path="url(#_ABSTRACT_RENDERER_ID_0)">
10
+ <g>
11
+ <rect x="40" y="439" width="868" height="1" stroke="none" stroke-width="0" fill="#eeeeee"></rect>
12
+ <rect x="40" y="382" width="868" height="1" stroke="none" stroke-width="0" fill="#eeeeee"></rect>
13
+ <rect x="40" y="325" width="868" height="1" stroke="none" stroke-width="0" fill="#eeeeee"></rect>
14
+ <rect x="40" y="268" width="868" height="1" stroke="none" stroke-width="0" fill="#eeeeee"></rect>
15
+ <rect x="40" y="211" width="868" height="1" stroke="none" stroke-width="0" fill="#eeeeee"></rect>
16
+ <rect x="40" y="154" width="868" height="1" stroke="none" stroke-width="0" fill="#eeeeee"></rect>
17
+ <rect x="40" y="97" width="868" height="1" stroke="none" stroke-width="0" fill="#eeeeee"></rect>
18
+ <rect x="40" y="40" width="868" height="1" stroke="none" stroke-width="0" fill="#eeeeee"></rect>
19
+ </g>
20
+ <g>
21
+ <g>
22
+ <path d="M40.5,439.5L40.5,401.5L59.35,420.5L78.2,420.5L97.04,287.5L115.89,363.5L134.74,382.5L153.59,420.5L172.43,401.5L191.28,420.5L210.13,344.5L228.98,97.5L247.83,363.5L266.67,287.5L285.52,363.5L304.37,401.5L323.22,344.5L342.07,420.5L360.91,420.5L379.76,325.5L398.61,363.5L417.46,268.5L436.3,420.5L455.15,363.5L474,420.5L492.85,420.5L511.7,382.5L530.54,401.5L549.39,420.5L568.24,401.5L587.09,382.5L605.93,230.5L624.78,420.5L643.63,382.5L662.48,401.5L681.33,363.5L700.17,382.5L719.02,325.5L737.87,420.5L756.72,420.5L775.57,420.5L794.41,382.5L813.26,268.5L832.11,154.5L850.96,382.5L869.8,382.5L888.65,325.5L907.5,382.5L907.5,439.5Z" stroke="none" stroke-width="0" fill-opacity="0.1" fill="#0088cc"></path>
23
+ </g>
24
+ </g>
25
+ <g>
26
+ <rect x="40" y="439" width="868" height="1" stroke="none" stroke-width="0" fill="#333333"></rect>
27
+ </g>
28
+ <g>
29
+ <path d="M40.5,401.5L59.35,420.5L78.2,420.5L97.04,287.5L115.89,363.5L134.74,382.5L153.59,420.5L172.43,401.5L191.28,420.5L210.13,344.5L228.98,97.5L247.83,363.5L266.67,287.5L285.52,363.5L304.37,401.5L323.22,344.5L342.07,420.5L360.91,420.5L379.76,325.5L398.61,363.5L417.46,268.5L436.3,420.5L455.15,363.5L474,420.5L492.85,420.5L511.7,382.5L530.54,401.5L549.39,420.5L568.24,401.5L587.09,382.5L605.93,230.5L624.78,420.5L643.63,382.5L662.48,401.5L681.33,363.5L700.17,382.5L719.02,325.5L737.87,420.5L756.72,420.5L775.57,420.5L794.41,382.5L813.26,268.5L832.11,154.5L850.96,382.5L869.8,382.5L888.65,325.5L907.5,382.5" stroke="#0088cc" stroke-width="4" fill-opacity="1" fill="none"></path>
30
+ </g>
31
+ </g>
32
+ <g>
33
+ <circle cx="40.5" cy="401.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
34
+ <circle cx="59.34782608695652" cy="420.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
35
+ <circle cx="78.19565217391305" cy="420.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
36
+ <circle cx="97.04347826086956" cy="287.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
37
+ <circle cx="115.8913043478261" cy="363.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
38
+ <circle cx="134.73913043478262" cy="382.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
39
+ <circle cx="153.58695652173913" cy="420.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
40
+ <circle cx="172.43478260869566" cy="401.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
41
+ <circle cx="191.2826086956522" cy="420.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
42
+ <circle cx="210.13043478260872" cy="344.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
43
+ <circle cx="228.97826086956525" cy="97.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
44
+ <circle cx="247.82608695652175" cy="363.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
45
+ <circle cx="266.67391304347825" cy="287.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
46
+ <circle cx="285.5217391304348" cy="363.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
47
+ <circle cx="304.3695652173913" cy="401.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
48
+ <circle cx="323.21739130434787" cy="344.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
49
+ <circle cx="342.0652173913044" cy="420.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
50
+ <circle cx="360.9130434782609" cy="420.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
51
+ <circle cx="379.76086956521743" cy="325.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
52
+ <circle cx="398.60869565217394" cy="363.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
53
+ <circle cx="417.4565217391305" cy="268.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
54
+ <circle cx="436.304347826087" cy="420.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
55
+ <circle cx="455.1521739130435" cy="363.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
56
+ <circle cx="474.00000000000006" cy="420.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
57
+ <circle cx="492.84782608695656" cy="420.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
58
+ <circle cx="511.69565217391306" cy="382.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
59
+ <circle cx="530.5434782608696" cy="401.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
60
+ <circle cx="549.3913043478261" cy="420.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
61
+ <circle cx="568.2391304347826" cy="401.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
62
+ <circle cx="587.0869565217391" cy="382.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
63
+ <circle cx="605.9347826086957" cy="230.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
64
+ <circle cx="624.7826086956522" cy="420.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
65
+ <circle cx="643.6304347826087" cy="382.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
66
+ <circle cx="662.4782608695652" cy="401.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
67
+ <circle cx="681.3260869565217" cy="363.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
68
+ <circle cx="700.1739130434784" cy="382.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
69
+ <circle cx="719.0217391304349" cy="325.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
70
+ <circle cx="737.8695652173914" cy="420.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
71
+ <circle cx="756.7173913043479" cy="420.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
72
+ <circle cx="775.5652173913044" cy="420.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
73
+ <circle cx="794.413043478261" cy="382.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
74
+ <circle cx="813.2608695652175" cy="268.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
75
+ <circle cx="832.108695652174" cy="154.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
76
+ <circle cx="850.9565217391305" cy="382.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
77
+ <circle cx="869.804347826087" cy="382.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
78
+ <circle cx="888.6521739130435" cy="325.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
79
+ <circle cx="907.5000000000001" cy="382.5" r="5" stroke="none" stroke-width="0" fill="#0088cc"></circle>
80
+ </g>
81
+ <g>
82
+ <g>
83
+ <text text-anchor="end" x="45.6" y="455.8334591186013" font-size="12" transform="rotate(-30 45.6 455.8334591186013)" stroke="none" stroke-width="0" fill="#666666">03/03/12</text>
84
+ </g>
85
+ <g>
86
+ <text text-anchor="end" x="83.29565217391304" y="455.8334591186013" font-size="12" transform="rotate(-30 83.29565217391304 455.8334591186013)" stroke="none" stroke-width="0" fill="#666666">05/03/12</text>
87
+ </g>
88
+ <g>
89
+ <text text-anchor="end" x="120.99130434782609" y="455.8334591186013" font-size="12" transform="rotate(-30 120.99130434782609 455.8334591186013)" stroke="none" stroke-width="0" fill="#666666">07/03/12</text>
90
+ </g>
91
+ <g>
92
+ <text text-anchor="end" x="158.68695652173912" y="455.8334591186013" font-size="12" transform="rotate(-30 158.68695652173912 455.8334591186013)" stroke="none" stroke-width="0" fill="#666666">09/03/12</text>
93
+ </g>
94
+ <g>
95
+ <text text-anchor="end" x="196.38260869565218" y="455.8334591186013" font-size="12" transform="rotate(-30 196.38260869565218 455.8334591186013)" stroke="none" stroke-width="0" fill="#666666">11/03/12</text>
96
+ </g>
97
+ <g>
98
+ <text text-anchor="end" x="234.07826086956524" y="455.8334591186013" font-size="12" transform="rotate(-30 234.07826086956524 455.8334591186013)" stroke="none" stroke-width="0" fill="#666666">16/03/12</text>
99
+ </g>
100
+ <g>
101
+ <text text-anchor="end" x="271.7739130434783" y="455.8334591186013" font-size="12" transform="rotate(-30 271.7739130434783 455.8334591186013)" stroke="none" stroke-width="0" fill="#666666">20/03/12</text>
102
+ </g>
103
+ <g>
104
+ <text text-anchor="end" x="309.46956521739133" y="455.8334591186013" font-size="12" transform="rotate(-30 309.46956521739133 455.8334591186013)" stroke="none" stroke-width="0" fill="#666666">22/03/12</text>
105
+ </g>
106
+ <g>
107
+ <text text-anchor="end" x="347.1652173913044" y="455.8334591186013" font-size="12" transform="rotate(-30 347.1652173913044 455.8334591186013)" stroke="none" stroke-width="0" fill="#666666">24/03/12</text>
108
+ </g>
109
+ <g>
110
+ <text text-anchor="end" x="384.86086956521746" y="455.8334591186013" font-size="12" transform="rotate(-30 384.86086956521746 455.8334591186013)" stroke="none" stroke-width="0" fill="#666666">26/03/12</text>
111
+ </g>
112
+ <g>
113
+ <text text-anchor="end" x="422.5565217391305" y="455.8334591186013" font-size="12" transform="rotate(-30 422.5565217391305 455.8334591186013)" stroke="none" stroke-width="0" fill="#666666">28/03/12</text>
114
+ </g>
115
+ <g>
116
+ <text text-anchor="end" x="460.2521739130435" y="455.8334591186013" font-size="12" transform="rotate(-30 460.2521739130435 455.8334591186013)" stroke="none" stroke-width="0" fill="#666666">30/03/12</text>
117
+ </g>
118
+ <g>
119
+ <text text-anchor="end" x="497.9478260869566" y="455.8334591186013" font-size="12" transform="rotate(-30 497.9478260869566 455.8334591186013)" stroke="none" stroke-width="0" fill="#666666">02/04/12</text>
120
+ </g>
121
+ <g>
122
+ <text text-anchor="end" x="535.6434782608696" y="455.8334591186013" font-size="12" transform="rotate(-30 535.6434782608696 455.8334591186013)" stroke="none" stroke-width="0" fill="#666666">04/04/12</text>
123
+ </g>
124
+ <g>
125
+ <text text-anchor="end" x="573.3391304347826" y="455.8334591186013" font-size="12" transform="rotate(-30 573.3391304347826 455.8334591186013)" stroke="none" stroke-width="0" fill="#666666">11/04/12</text>
126
+ </g>
127
+ <g>
128
+ <text text-anchor="end" x="611.0347826086958" y="455.8334591186013" font-size="12" transform="rotate(-30 611.0347826086958 455.8334591186013)" stroke="none" stroke-width="0" fill="#666666">13/04/12</text>
129
+ </g>
130
+ <g>
131
+ <text text-anchor="end" x="648.7304347826088" y="455.8334591186013" font-size="12" transform="rotate(-30 648.7304347826088 455.8334591186013)" stroke="none" stroke-width="0" fill="#666666">16/04/12</text>
132
+ </g>
133
+ <g>
134
+ <text text-anchor="end" x="686.4260869565218" y="455.8334591186013" font-size="12" transform="rotate(-30 686.4260869565218 455.8334591186013)" stroke="none" stroke-width="0" fill="#666666">18/04/12</text>
135
+ </g>
136
+ <g>
137
+ <text text-anchor="end" x="724.1217391304349" y="455.8334591186013" font-size="12" transform="rotate(-30 724.1217391304349 455.8334591186013)" stroke="none" stroke-width="0" fill="#666666">20/04/12</text>
138
+ </g>
139
+ <g>
140
+ <text text-anchor="end" x="761.8173913043479" y="455.8334591186013" font-size="12" transform="rotate(-30 761.8173913043479 455.8334591186013)" stroke="none" stroke-width="0" fill="#666666">22/04/12</text>
141
+ </g>
142
+ <g>
143
+ <text text-anchor="end" x="799.513043478261" y="455.8334591186013" font-size="12" transform="rotate(-30 799.513043478261 455.8334591186013)" stroke="none" stroke-width="0" fill="#666666">25/04/12</text>
144
+ </g>
145
+ <g>
146
+ <text text-anchor="end" x="837.208695652174" y="455.8334591186013" font-size="12" transform="rotate(-30 837.208695652174 455.8334591186013)" stroke="none" stroke-width="0" fill="#666666">27/04/12</text>
147
+ </g>
148
+ <g>
149
+ <text text-anchor="end" x="874.904347826087" y="455.8334591186013" font-size="12" transform="rotate(-30 874.904347826087 455.8334591186013)" stroke="none" stroke-width="0" fill="#666666">01/05/12</text>
150
+ </g>
151
+ <g>
152
+ <text text-anchor="end" x="912.6000000000001" y="455.8334591186013" font-size="12" transform="rotate(-30 912.6000000000001 455.8334591186013)" stroke="none" stroke-width="0" fill="#666666">03/05/12</text>
153
+ </g>
154
+ <g>
155
+ <text text-anchor="end" x="28" y="443.7" font-size="12" stroke="none" stroke-width="0" fill="#666666">0</text>
156
+ </g>
157
+ <g>
158
+ <text text-anchor="end" x="28" y="386.7" font-size="12" stroke="none" stroke-width="0" fill="#666666">3</text>
159
+ </g>
160
+ <g>
161
+ <text text-anchor="end" x="28" y="329.7" font-size="12" stroke="none" stroke-width="0" fill="#666666">6</text>
162
+ </g>
163
+ <g>
164
+ <text text-anchor="end" x="28" y="272.7" font-size="12" stroke="none" stroke-width="0" fill="#666666">9</text>
165
+ </g>
166
+ <g>
167
+ <text text-anchor="end" x="28" y="215.7" font-size="12" stroke="none" stroke-width="0" fill="#666666">12</text>
168
+ </g>
169
+ <g>
170
+ <text text-anchor="end" x="28" y="158.7" font-size="12" stroke="none" stroke-width="0" fill="#666666">15</text>
171
+ </g>
172
+ <g>
173
+ <text text-anchor="end" x="28" y="101.7" font-size="12" stroke="none" stroke-width="0" fill="#666666">18</text>
174
+ </g>
175
+ <g>
176
+ <text text-anchor="end" x="28" y="44.7" stroke-width="0" fill="#666666">21</text>
177
+ </g>
178
+ </g>
179
+ </g>
180
+ <g></g>
181
+ </svg>
@@ -1,39 +1,64 @@
1
1
  <?xml version="1.0" standalone="no"?>
2
2
  <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
3
3
  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
- <svg width="12cm" height="8cm" viewBox="0 0 1200 800"
4
+ <svg width="210mm" height="297mm" viewBox="0 0 1050 1485"
5
5
  xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
6
- <desc>Example rect01 - rectangle with sharp corners</desc>
7
- <!-- Show outline of canvas using 'rect' element -->
8
- <rect x="1" y="1" width="1198" height="798"
9
- fill="none" stroke="blue" stroke-width="2"/>
10
6
 
11
- <rect x="50" y="50" width="100" height="100" fill="none" stroke="blue" stroke-width="2"/>
12
- <image x="50" y="50" width="100" height="100" preserveAspectRatio="xMidYMid" xlink:href="http://files.myopera.com/baby2u/albums/423302/smiley-cool.jpg"></image>
7
+ <g transform="translate(50 0)">
8
+ <rect y="50" width="100" height="100" fill="none" stroke="blue" stroke-width="2"/>
9
+ <image y="50" width="100" height="100" preserveAspectRatio="xMidYMid" xlink:href="http://files.myopera.com/baby2u/albums/423302/smiley-cool.jpg"></image>
13
10
 
14
- <rect x="50" y="200" width="150" height="100" fill="none" stroke="blue" stroke-width="2"/>
15
- <image x="50" y="200" width="150" height="100" xlink:href="http://files.myopera.com/baby2u/albums/423302/smiley-cool.jpg"></image>
11
+ <rect y="200" width="150" height="100" fill="none" stroke="blue" stroke-width="2"/>
12
+ <image y="200" width="150" height="100" xlink:href="http://files.myopera.com/baby2u/albums/423302/smiley-cool.jpg"></image>
16
13
 
17
- <rect x="50" y="350" width="100" height="150" fill="none" stroke="blue" stroke-width="2"/>
18
- <image x="50" y="350" width="100" height="150" xlink:href="http://files.myopera.com/baby2u/albums/423302/smiley-cool.jpg"></image>
14
+ <rect y="350" width="100" height="150" fill="none" stroke="blue" stroke-width="2"/>
15
+ <image y="350" width="100" height="150" xlink:href="http://files.myopera.com/baby2u/albums/423302/smiley-cool.jpg"></image>
19
16
 
20
- <rect x="250" y="50" width="100" height="100" fill="none" stroke="blue" stroke-width="2"/>
21
- <image x="250" y="50" width="100" height="100" xlink:href="http://imalbum.aufeminin.com/album/D20090809/583007_KWWH1ZQ8FU5ATJXSR84C5MRBUWW33L_989174388_H143954_L.jpg"></image>
17
+ <rect y="550" width="150" height="100" fill="none" stroke="blue" stroke-width="2"/>
18
+ <image y="550" width="150" height="100" preserveAspectRatio="xMinYMin" xlink:href="http://files.myopera.com/baby2u/albums/423302/smiley-cool.jpg"></image>
22
19
 
23
- <rect x="250" y="200" width="150" height="100" fill="none" stroke="blue" stroke-width="2"/>
24
- <image x="250" y="200" width="150" height="100" xlink:href="http://imalbum.aufeminin.com/album/D20090809/583007_KWWH1ZQ8FU5ATJXSR84C5MRBUWW33L_989174388_H143954_L.jpg"></image>
20
+ <rect y="700" width="100" height="150" fill="none" stroke="blue" stroke-width="2"/>
21
+ <image y="700" width="100" height="150" preserveAspectRatio="xMinYMin" xlink:href="http://files.myopera.com/baby2u/albums/423302/smiley-cool.jpg"></image>
25
22
 
26
- <rect x="250" y="350" width="100" height="200" fill="none" stroke="blue" stroke-width="2"/>
27
- <image x="250" y="350" width="100" height="200" xlink:href="http://imalbum.aufeminin.com/album/D20090809/583007_KWWH1ZQ8FU5ATJXSR84C5MRBUWW33L_989174388_H143954_L.jpg"></image>
23
+ <rect y="900" width="150" height="100" fill="none" stroke="blue" stroke-width="2"/>
24
+ <image y="900" width="150" height="100" preserveAspectRatio="xMaxYMax" xlink:href="http://files.myopera.com/baby2u/albums/423302/smiley-cool.jpg"></image>
28
25
 
29
- <rect x="450" y="50" width="100" height="100" fill="none" stroke="blue" stroke-width="2"/>
30
- <image x="450" y="50" width="100" height="100" preserveAspectRatio="none" xlink:href="http://imalbum.aufeminin.com/album/D20090809/583007_KWWH1ZQ8FU5ATJXSR84C5MRBUWW33L_989174388_H143954_L.jpg"></image>
26
+ <rect y="1050" width="100" height="150" fill="none" stroke="blue" stroke-width="2"/>
27
+ <image y="1050" width="100" height="150" preserveAspectRatio="xMaxYMax" xlink:href="http://files.myopera.com/baby2u/albums/423302/smiley-cool.jpg"></image>
28
+ </g>
31
29
 
32
- <rect x="450" y="200" width="150" height="100" fill="none" stroke="blue" stroke-width="2"/>
33
- <image x="450" y="200" width="150" height="100" preserveAspectRatio="none" xlink:href="http://imalbum.aufeminin.com/album/D20090809/583007_KWWH1ZQ8FU5ATJXSR84C5MRBUWW33L_989174388_H143954_L.jpg"></image>
30
+ <g transform="translate(250 0)">
31
+ <rect y="50" width="100" height="100" fill="none" stroke="blue" stroke-width="2"/>
32
+ <image y="50" width="100" height="100" xlink:href="http://imalbum.aufeminin.com/album/D20090809/583007_KWWH1ZQ8FU5ATJXSR84C5MRBUWW33L_989174388_H143954_L.jpg"></image>
34
33
 
35
- <rect x="450" y="350" width="100" height="200" fill="none" stroke="blue" stroke-width="2"/>
36
- <image x="450" y="350" width="100" height="200" preserveAspectRatio="none" xlink:href="http://imalbum.aufeminin.com/album/D20090809/583007_KWWH1ZQ8FU5ATJXSR84C5MRBUWW33L_989174388_H143954_L.jpg"></image>
34
+ <rect y="200" width="150" height="100" fill="none" stroke="blue" stroke-width="2"/>
35
+ <image y="200" width="150" height="100" xlink:href="http://imalbum.aufeminin.com/album/D20090809/583007_KWWH1ZQ8FU5ATJXSR84C5MRBUWW33L_989174388_H143954_L.jpg"></image>
37
36
 
38
- </svg>
37
+ <rect y="350" width="100" height="200" fill="none" stroke="blue" stroke-width="2"/>
38
+ <image y="350" width="100" height="200" xlink:href="http://imalbum.aufeminin.com/album/D20090809/583007_KWWH1ZQ8FU5ATJXSR84C5MRBUWW33L_989174388_H143954_L.jpg"></image>
39
+
40
+ <rect y="550" width="150" height="100" fill="none" stroke="blue" stroke-width="2"/>
41
+ <image y="550" width="150" height="100" preserveAspectRatio="xMinYMin" xlink:href="http://imalbum.aufeminin.com/album/D20090809/583007_KWWH1ZQ8FU5ATJXSR84C5MRBUWW33L_989174388_H143954_L.jpg"></image>
42
+
43
+ <rect y="700" width="100" height="200" fill="none" stroke="blue" stroke-width="2"/>
44
+ <image y="700" width="100" height="200" preserveAspectRatio="xMinYMin" xlink:href="http://imalbum.aufeminin.com/album/D20090809/583007_KWWH1ZQ8FU5ATJXSR84C5MRBUWW33L_989174388_H143954_L.jpg"></image>
45
+
46
+ <rect y="900" width="150" height="100" fill="none" stroke="blue" stroke-width="2"/>
47
+ <image y="900" width="150" height="100" preserveAspectRatio="xMaxYMax" xlink:href="http://imalbum.aufeminin.com/album/D20090809/583007_KWWH1ZQ8FU5ATJXSR84C5MRBUWW33L_989174388_H143954_L.jpg"></image>
48
+
49
+ <rect y="1050" width="100" height="200" fill="none" stroke="blue" stroke-width="2"/>
50
+ <image y="1050" width="100" height="200" preserveAspectRatio="xMaxYMax" xlink:href="http://imalbum.aufeminin.com/album/D20090809/583007_KWWH1ZQ8FU5ATJXSR84C5MRBUWW33L_989174388_H143954_L.jpg"></image>
51
+ </g>
39
52
 
53
+ <g transform="translate(450 0)">
54
+ <rect y="50" width="100" height="100" fill="none" stroke="blue" stroke-width="2"/>
55
+ <image y="50" width="100" height="100" preserveAspectRatio="none" xlink:href="http://imalbum.aufeminin.com/album/D20090809/583007_KWWH1ZQ8FU5ATJXSR84C5MRBUWW33L_989174388_H143954_L.jpg"></image>
56
+
57
+ <rect y="200" width="150" height="100" fill="none" stroke="blue" stroke-width="2"/>
58
+ <image y="200" width="150" height="100" preserveAspectRatio="none" xlink:href="http://imalbum.aufeminin.com/album/D20090809/583007_KWWH1ZQ8FU5ATJXSR84C5MRBUWW33L_989174388_H143954_L.jpg"></image>
59
+
60
+ <rect y="350" width="100" height="200" fill="none" stroke="blue" stroke-width="2"/>
61
+ <image y="350" width="100" height="200" preserveAspectRatio="none" xlink:href="http://imalbum.aufeminin.com/album/D20090809/583007_KWWH1ZQ8FU5ATJXSR84C5MRBUWW33L_989174388_H143954_L.jpg"></image>
62
+ </g>
63
+
64
+ </svg>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prawn-svg
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.0.2
4
+ version: 0.12.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-12 00:00:00.000000000 Z
12
+ date: 2012-10-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: prawn
@@ -98,6 +98,7 @@ files:
98
98
  - spec/sample_svg/cubic01a.svg
99
99
  - spec/sample_svg/cubic02.svg
100
100
  - spec/sample_svg/ellipse01.svg
101
+ - spec/sample_svg/google_charts.svg
101
102
  - spec/sample_svg/image01.svg
102
103
  - spec/sample_svg/line01.svg
103
104
  - spec/sample_svg/maths.svg
@@ -158,6 +159,7 @@ test_files:
158
159
  - spec/sample_svg/cubic01a.svg
159
160
  - spec/sample_svg/cubic02.svg
160
161
  - spec/sample_svg/ellipse01.svg
162
+ - spec/sample_svg/google_charts.svg
161
163
  - spec/sample_svg/image01.svg
162
164
  - spec/sample_svg/line01.svg
163
165
  - spec/sample_svg/maths.svg