nswtopo 3.0 → 3.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 505b2d8c4c44965fcad1403d1c2a266f7ce22f64225e97d6be2e7b2057ad2791
4
- data.tar.gz: 9ba473cddff584981acaee0efe47b8fe8095681792da886f08a3979e8f9807b4
3
+ metadata.gz: cbc36bc0fcdc3467aad475f9ff3757bab270bba4fe81e7bed3c34b0c34a3b4f2
4
+ data.tar.gz: fb02ea3f103222c9424bbe9f1c750caa608f73e4e5815687f40c1a383f6fa8d9
5
5
  SHA512:
6
- metadata.gz: dfccb5d8112650a894378967d6d67fe42b5a303ce3140bfd6ced96ca74472f96df2303fe15d69b3da710277e62eba38e8307be374b4cef7e730253fce6c10f1e
7
- data.tar.gz: b707d3f3a619f7001ea2f3a5dbcf8f0ac603ce080f49cd44b614b385bab8a080f922c629172cefb63b13ab1e27e79bb538a887abb88a56ea2648cb8950a69a10
6
+ metadata.gz: 06a794c2eaa6949d4754c62408d6d3358ee1d84c9dcfb10a2ab90ec9833b3916a84f5873f06657b5bca4e328765848d53ff1dafb150a58e42cd15085808e1e43
7
+ data.tar.gz: 83325ab407ea8a7fcc6675cfcb747a8d1f08932d228dbdcb18fa8dec48d328a38690dcbb0766be975f03d7b872caf6e60ef0706a5429713c8a86b09df16cecaa
@@ -177,9 +177,14 @@ module NSWTopo
177
177
  raise Error
178
178
  end
179
179
 
180
- def print_to_pdf(pdf_path)
180
+ def print_to_pdf(pdf_path, &block)
181
181
  data = command("Page.printToPDF", timeout: nil, preferCSSPageSize: true).fetch("data")
182
- pdf_path.binwrite Base64.decode64(data)
182
+ pdf = Base64.decode64 data
183
+ if defined? HexaPDF
184
+ HexaPDF::Document.new(io: StringIO.new(pdf)).tap(&block).write(pdf_path.to_s)
185
+ else
186
+ pdf_path.binwrite(pdf)
187
+ end
183
188
  rescue KeyError
184
189
  raise Error
185
190
  end
@@ -10,7 +10,7 @@ module NSWTopo
10
10
 
11
11
  REXML::Document.new(svg_path.read).tap do |xml|
12
12
  xml.elements["svg"].tap do |svg|
13
- style = "@media print { @page { margin: 0; size: %s %s; } }"
13
+ style = "@media print { @page { margin: 0 0 -1mm 0; size: %s %s; } }"
14
14
  svg.add_element("style").text = style % svg.attributes.values_at("width", "height")
15
15
  end
16
16
 
@@ -83,11 +83,40 @@ module NSWTopo
83
83
  svg_path.write xml
84
84
  end
85
85
 
86
- FileUtils.rm pdf_path if pdf_path.exist?
87
86
  log_update "chrome: rendering PDF"
88
-
89
87
  Chrome.with_browser("file://#{svg_path}") do |browser|
90
- browser.print_to_pdf pdf_path
88
+ browser.print_to_pdf(pdf_path) do |doc|
89
+ bbox = [0, 0, *dimensions.times(72/25.4)]
90
+ bounds = cutline.coordinates[0][...-1].map do |coords|
91
+ coords.zip(dimensions).map { |coord, dimension| coord / dimension }
92
+ end.flatten
93
+ lpts = [0, 0].zip( [1, 1]).inject(&:product).values_at(0,1,3,2).flatten
94
+ gpts = [0, 0].zip(dimensions).inject(&:product).values_at(0,1,3,2).then do |corners|
95
+ # corners.map(&:reverse) # ISO 32000-2 specifies this, but not observed in practice
96
+ GeoJSON.multipoint(corners, projection: projection).reproject_to_wgs84.coordinates.map(&:reverse)
97
+ end.flatten
98
+ pcsm = [25.4/72, 0, 0, 0, 25.4/72, 0, 0, 0, 1, 0, 0, 0]
99
+
100
+ doc.pages.first[:VP] = [doc.add({
101
+ Type: :Viewport,
102
+ BBox: bbox,
103
+ Measure: doc.add({
104
+ Type: :Measure,
105
+ Subtype: :GEO,
106
+ Bounds: bounds,
107
+ GCS: doc.add({
108
+ Type: :PROJCS,
109
+ WKT: projection.wkt2
110
+ }),
111
+ GPTS: gpts,
112
+ LPTS: lpts,
113
+ PCSM: pcsm
114
+ })
115
+ })]
116
+
117
+ doc.trailer.info[:Creator] = "nswtopo"
118
+ doc.version = "1.7"
119
+ end
91
120
  end
92
121
  end
93
122
  end
data/lib/nswtopo/map.rb CHANGED
@@ -130,10 +130,12 @@ module NSWTopo
130
130
  def self.from_svg(archive, svg_path)
131
131
  xml = REXML::Document.new(svg_path.read)
132
132
 
133
- creator_tool = xml.elements["svg/metadata/rdf:RDF/rdf:Description[@xmp:CreatorTool]/@xmp:CreatorTool"]&.value
134
- version = Version[creator_tool]
135
- raise "SVG nswtopo version too old: %s" % svg_path unless version >= MIN_VERSION
136
- raise "SVG nswtopo version too new: %s" % svg_path unless version <= VERSION
133
+ unless false == Config["versioning"]
134
+ creator_tool = xml.elements["svg/metadata/rdf:RDF/rdf:Description[@xmp:CreatorTool]/@xmp:CreatorTool"]&.value
135
+ version = Version[creator_tool]
136
+ raise "SVG nswtopo version too old: %s" % svg_path unless version >= MIN_VERSION
137
+ raise "SVG nswtopo version too new: %s" % svg_path unless version <= VERSION
138
+ end
137
139
 
138
140
  /^0\s+0\s+(?<width>\S+)\s+(?<height>\S+)$/ =~ xml.elements["svg[@viewBox]/@viewBox"]&.value
139
141
  width && xml.elements["svg[ @width='#{ width}mm']"] || raise(Version::Error)
@@ -24,6 +24,6 @@ module NSWTopo
24
24
  end
25
25
  end
26
26
 
27
- VERSION = Version["nswtopo 3.0"]
27
+ VERSION = Version["nswtopo 3.0.1"]
28
28
  MIN_VERSION = Version["nswtopo 3.0"]
29
29
  end
data/lib/nswtopo.rb CHANGED
@@ -19,6 +19,10 @@ require 'forwardable'
19
19
  require 'rubygems/package'
20
20
  require 'zlib'
21
21
  require 'io/nonblock'
22
+ begin
23
+ require 'hexapdf'
24
+ rescue LoadError
25
+ end
22
26
 
23
27
  require_relative 'nswtopo/helpers'
24
28
  require_relative 'nswtopo/avl_tree'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nswtopo
3
3
  version: !ruby/object:Gem::Version
4
- version: '3.0'
4
+ version: 3.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew Hollingworth
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-08-03 00:00:00.000000000 Z
11
+ date: 2023-08-05 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email: