libis-format 1.3.0 → 1.3.2

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: b8282db4cf37eea292436474d401bcc2725c31eaa1eb882ea9475be14912f6c9
4
- data.tar.gz: 6eaf1dfe05d24bd0df1ad20f61137a4007f02828b97138601c87afc5215d7454
3
+ metadata.gz: 68f64b7c012a051d6c25eb3cb02fb74d662c0f1da348d4b3b5b4af5b7004d543
4
+ data.tar.gz: 62708947cef69d89540b2dd73b85a546eb012fae7e6565e329e989ab0573949b
5
5
  SHA512:
6
- metadata.gz: 8a242dc0d21da39ec434a7e2f59b2d8ff3c57e427512909c792bce05de5a29a03fdc726484059f13dc0b931f4ec2be13e75dc06f0e06b8736d77c541fd6aeb7e
7
- data.tar.gz: 34a6d942f8fc39392528d03e5d367d8d476c58da12424ba5a8a87b4cf749a85ca485dba6ee1741dd5b865a25aaa57d562c1b97d96f03af83a5485f4c142dcdeb
6
+ metadata.gz: ed3dc449c70eb71f081a6c55f06d8a2b484afb0094a6988aad0ca018ae36e07beb1d9fae3a8fb0a3a026e90c13386f83686b7c66be34b8a028d588ef9412bd99
7
+ data.tar.gz: 44bc49f3315e99974e5c7f992e1f496ec3e59dbd15839f93a0e2f8b20fc73dcbfba0f77e178514f0e78f0f561961f55f31895e843ba217e70e2a3cc79b47cdfb
data/Gemfile CHANGED
@@ -6,10 +6,12 @@ gem 'coveralls', group: :test, require: false
6
6
 
7
7
  gemspec name: 'libis-format', development_group: :test
8
8
 
9
- gem 'gem-release'
10
-
11
9
  group :development do
12
10
  gem 'byebug'
13
11
  gem 'debug'
14
12
  gem 'standard'
15
13
  end
14
+
15
+ # Gem publishing and changelog
16
+ gem 'gem-release'
17
+ gem 'github_changelog_generator'
@@ -5,9 +5,10 @@ require 'libis-tools'
5
5
 
6
6
  ::Libis::Tools::Config.logger.level = :WARN
7
7
 
8
+ command = ARGV.shift
9
+ command = command.split('_')
8
10
  source = ARGV.shift
9
11
  target = ARGV.shift
10
12
  options = ARGV
11
13
 
12
- ::Libis::Format::Tool::PdfCopy.run source, target, options
13
-
14
+ ::Libis::Format::Tool::PdfTool.run command, source, target, *options
@@ -20,7 +20,7 @@ module Libis
20
20
  Config[:ffmpeg_cmd] = 'ffmpeg'
21
21
  Config[:fido_formats] = [File.join(Libis::Format::DATA_DIR, 'lias_formats.xml')]
22
22
  Config[:pdf_tool] = File.join(Libis::Format::TOOL_DIR, 'PdfTool.jar')
23
- Config[:preflight_jar] = File.join(Libis::Format::TOOL_DIR, 'pdfbox', 'preflight-app-2.0.13.jar')
23
+ Config[:preflight_jar] = File.join(Libis::Format::TOOL_DIR, 'pdfbox', 'preflight-app-3.0.3.jar')
24
24
  Config[:wkhtmltopdf] = 'wkhtmltopdf'
25
25
  Config[:xml_validations] = [['archive/ead', File.join(Libis::Format::DATA_DIR, 'ead.xsd')]]
26
26
  Config[:type_database] = File.join(Libis::Format::DATA_DIR, 'types.yml')
@@ -35,10 +35,8 @@ module Libis
35
35
  identification_tool: 5 * 60,
36
36
  office_to_pdf: 5 * 60,
37
37
  email2pdf: 5 * 60,
38
- pdf_copy: 5 * 60,
39
- pdf_merge: 5 * 60,
38
+ pdf_tool: 5 * 60,
40
39
  pdf_optimizer: 5 * 60,
41
- pdf_split: 5 * 60,
42
40
  pdf_to_pdfa: 5 * 60,
43
41
  pdfa_validator: 5 * 60
44
42
  }
@@ -3,7 +3,7 @@
3
3
  require_relative 'base'
4
4
 
5
5
  require 'libis/tools/extend/hash'
6
- require 'libis/format/tool/pdf_copy'
6
+ require 'libis/format/tool/pdf_tool'
7
7
  require 'libis/format/tool/pdf_to_pdfa'
8
8
  require 'libis/format/tool/pdfa_validator'
9
9
  require 'libis/format/tool/pdf_optimizer'
@@ -40,15 +40,14 @@ module Libis
40
40
  values.key_strings_to_symbols!
41
41
  values.each do |k, v|
42
42
  next unless %i[title author creator keywords subject].include?(k)
43
-
44
- @options["md_#{k}"] = v
43
+ (@options[:metadata] ||= {})[k] = v
45
44
  end
46
45
  end
47
46
 
48
47
  # Select a partial list of pages
49
48
  # @param [String] selection as described in com.itextpdf.text.pdf.SequenceList: [!][o][odd][e][even]start-end
50
49
  def range(selection)
51
- @options[:ranges] = selection
50
+ @options[:select] = {range: [selection].flatten.compact.join(',')}
52
51
  end
53
52
 
54
53
  # Create or use a watermark image.
@@ -56,6 +55,7 @@ module Libis
56
55
  # The watermark options are (use symbols):
57
56
  # - text: text to create a watermark from
58
57
  # - file: watermark image to use
58
+ # - image: same as above
59
59
  # - rotation: rotation of the watermark text (in degrees; integer number)
60
60
  # - size: font size of the watermark text
61
61
  # - opacity: opacity of the watermark (fraction 0.0 - 1.0)
@@ -70,16 +70,56 @@ module Libis
70
70
  # @param [Hash] options Hash of options for watermark creation.
71
71
  def watermark(options = {})
72
72
  options.key_strings_to_symbols!
73
- if options[:file] && File.exist?(options[:file])
74
- @options['wm_image'] = options[:file]
75
- else
76
- @options['wm_text'] = (options[:text] || '© LIBIS').split('\n')
77
- @options['wm_text_rotation'] = options[:rotation] if options[:rotation]
78
- @options['wm_font_size'] = options[:size] if options[:size]
73
+ if options[:file] || options[:image]
74
+ watermark_image(options)
75
+ elsif options[:text]
76
+ watermark_text(options)
77
+ elsif options[:banner]
78
+ watermark_banner(options)
79
79
  end
80
- @options['wm_opacity'] = options[:opacity] || '0.3'
81
- @options['wm_gap_ratio'] = options[:gap] if options[:gap].to_s =~ /^\s*(0+\.\d+|1\.0+)\s*$/
82
- @options['wm_gap_size'] = options[:gap] if options[:gap].to_s =~ /^\s*\d+\s*$/
80
+ end
81
+
82
+ def watermark_image(options = {})
83
+ options.key_strings_to_symbols!
84
+ @options[:watermark] = {command: 'image'}
85
+ @options[:watermark][:data] = options[:file] || options[:image]
86
+ @options[:watermark][:opacity] = options[:opacity] || '0.3'
87
+
88
+ end
89
+
90
+ def watermark_text(options = {})
91
+ options.key_strings_to_symbols!
92
+ @options[:watermark] = {command: 'text'}
93
+ @options[:watermark][:data] = (options[:text] || '© LIBIS').split('\n')
94
+ @options[:watermark][:rotation] = options[:rotation] if options[:rotation]
95
+ @options[:watermark][:size] = options[:size] if options[:size]
96
+ @options[:watermark][:gap] = options[:gap] if options[:gap].to_s =~ /^\s*\d+\s*$/
97
+ @options[:watermark][:padding] = options[:gap] if options[:gap].to_s =~ /^\s*(0+\.\d+|1\.0+)\s*$/
98
+ @options[:watermark][:padding] = options[:padding] if options[:padding]
99
+ @options[:watermark][:opacity] = options[:opacity] || '0.3'
100
+ end
101
+
102
+ # Create a vertical banner to the right side of each page
103
+ #
104
+ # The banner options are:
105
+ # - banner: text to put in the banner
106
+ # - add_filename: append filename to the text (use any value to enable)
107
+ # - fontsize: size of the font (in points)
108
+ # - width: width of the banner
109
+ # - (background|text)_color_(red|green|blue): color components of background and text
110
+ def watermark_banner(options = {})
111
+ options.key_strings_to_symbols!
112
+ @options[:watermark] = {command: 'banner'}
113
+ @options[:watermark][:data] = (options[:banner] || '© LIBIS')
114
+ @options[:watermark][:add_filename] = !!options[:add_filename]
115
+ @options[:watermark][:size] = options[:fontsize] if options[:fontsize]
116
+ @options[:watermark][:width] = options[:width] if options[:width]
117
+ @options[:watermark][:background_red] = options[:background_color_red] if options[:background_color_red]
118
+ @options[:watermark][:background_green] = options[:background_color_green] if options[:background_color_green]
119
+ @options[:watermark][:background_blue] = options[:background_color_blue] if options[:background_color_blue]
120
+ @options[:watermark][:text_red] = options[:text_color_red] if options[:text_color_red]
121
+ @options[:watermark][:text_green] = options[:text_color_green] if options[:text_color_green]
122
+ @options[:watermark][:text_blue] = options[:text_color_blue] if options[:text_color_blue]
83
123
  end
84
124
 
85
125
  # Optimize the PDF
@@ -89,7 +129,7 @@ module Libis
89
129
  #
90
130
  # - 0 : lowest quality (Acrobat Distiller 'Screen Optimized' equivalent)
91
131
  # - 1 : medium quality (Acrobat Distiller 'eBook' equivalent)
92
- # - 2 : good quality
132
+ # - 2 : good quality (Acrobat Distiller 'Default' equivalent)
93
133
  # - 3 : high quality (Acrobat Distiller 'Print Optimized' equivalent)
94
134
  # - 4 : highest quality (Acrobat Distiller 'Prepress Optimized' equivalent)
95
135
  #
@@ -97,7 +137,7 @@ module Libis
97
137
  #
98
138
  # @param [Integer] setting quality setting. [0-4]
99
139
  def optimize(setting = 1)
100
- @options['optimize'] = %w[screen ebook default printer prepress][setting] if (0..4).include?(setting)
140
+ @options[:optimize] = %w[screen ebook default printer prepress][setting] if (0..4).include?(setting)
101
141
  end
102
142
 
103
143
  def convert(source, target, format, opts = {})
@@ -105,21 +145,19 @@ module Libis
105
145
 
106
146
  result = nil
107
147
 
108
- if (quality = @options.delete('optimize'))
109
- result = optimize_pdf(source, target, quality)
110
- return nil unless result
111
-
112
- source = result
113
- end
114
-
115
148
  unless @options.empty?
116
149
  result = convert_pdf(source, target)
117
- return nil unless result
150
+ source = result
151
+ end
118
152
 
153
+ if source && (quality = @options.delete(:optimize))
154
+ result = optimize_pdf(source, target, quality)
119
155
  source = result
120
156
  end
121
157
 
122
- result = pdf_to_pdfa(source, target) if (format == :PDFA) && source
158
+ if source && (format == :PDFA)
159
+ result = pdf_to_pdfa(source, target)
160
+ end
123
161
 
124
162
  {
125
163
  files: [result],
@@ -127,32 +165,81 @@ module Libis
127
165
  }
128
166
  end
129
167
 
168
+ protected
169
+
130
170
  def optimize_pdf(source, target, quality)
131
171
  using_temp(target) do |tmpname|
132
172
  result = Libis::Format::Tool::PdfOptimizer.run(source, tmpname, quality)
133
- unless (result[:status]).zero?
173
+ unless result[:err].empty?
134
174
  error("Pdf optimization encountered errors:\n%s", (result[:err] + result[:out]).join("\n"))
135
- next nil
175
+ return nil
136
176
  end
137
177
  tmpname
138
178
  end
139
179
  end
140
180
 
141
181
  def convert_pdf(source, target)
182
+ result = source
183
+ result = add_watermark(result, target, @options[:watermark]) if @options[:watermark]
184
+ result = add_metadata(result, target, @options[:metadata]) if @options[:metadata]
185
+ result = select_range(result, target, @options[:select]) if @options[:select]
186
+ return result
187
+ end
188
+
189
+ def options_to_args(options)
190
+ options.map do |k, v|
191
+ key = "--#{k.to_s.tr_s('_', '-')}"
192
+ value = v
193
+ case value
194
+ when TrueClass
195
+ value = nil
196
+ when FalseClass
197
+ value = key = nil
198
+ when Array
199
+ value = value.map(&:to_s)
200
+ else
201
+ value = v.to_s
202
+ end
203
+ [key, value]
204
+ end.flatten.compact
205
+ end
206
+
207
+ def add_watermark(source, target, options)
208
+ command = options.delete(:command)
209
+ data = [options.delete(:data)].flatten.compact
210
+ args = data + options_to_args(options)
211
+
212
+ using_temp(target) do |tmpname|
213
+ result = Libis::Format::Tool::PdfTool.run(['watermark', command], source, tmpname, *args)
214
+ unless result[:err].empty?
215
+ error("Pdf watermarking encountered errors:\n%s", result[:err].join(join("\n")))
216
+ return nil
217
+ end
218
+ tmpname
219
+ end
220
+ end
221
+
222
+ def add_metadata(source, target, options)
223
+ args = options_to_args(options)
224
+
225
+ using_temp(target) do |tmpname|
226
+ result = Libis::Format::Tool::PdfTool.run('metadata', source, tmpname, *args)
227
+ unless result[:err].empty?
228
+ error("Pdf metadata encountered errors:\n%s", result[:err].join(join("\n")))
229
+ return nil
230
+ end
231
+ tmpname
232
+ end
233
+ end
234
+
235
+ def select_range(source, target, options)
236
+ args = options_to_args(options)
237
+
142
238
  using_temp(target) do |tmpname|
143
- result = Libis::Format::Tool::PdfCopy.run(
144
- source, tmpname,
145
- @options.map do |k, v|
146
- if v.nil?
147
- nil
148
- else
149
- ["--#{k}", (v.is_a?(Array) ? v : v.to_s)]
150
- end
151
- end.flatten
152
- )
239
+ result = Libis::Format::Tool::PdfTool.run('select', source, tmpname, *args)
153
240
  unless result[:err].empty?
154
- error("Pdf conversion encountered errors:\n%s", result[:err].join(join("\n")))
155
- next nil
241
+ error("Pdf select encountered errors:\n%s", result[:err].join(join("\n")))
242
+ return nil
156
243
  end
157
244
  tmpname
158
245
  end
@@ -162,14 +249,14 @@ module Libis
162
249
  using_temp(target) do |tmpname|
163
250
  result = Libis::Format::Tool::PdfToPdfa.run source, tmpname
164
251
 
165
- if result[:command][:status] != 0
166
- error("Pdf/A conversion encountered errors:\n%s", (result[:command][:out] + result[:command][:err]).join("\n"))
167
- next nil
252
+ unless result[:status].zero?
253
+ error("Pdf/A conversion encountered errors:\n%s", (result[:out] + result[:err]).join("\n"))
254
+ return nil
168
255
  else
169
256
  r = Libis::Format::Tool::PdfaValidator.run tmpname
170
257
  if r[:status] != 0
171
258
  error "Pdf/A file failed to validate with following errors:\n%s", (r[:err] || r[:out] || []).join("\n")
172
- next nil
259
+ return nil
173
260
  end
174
261
  end
175
262
  tmpname
@@ -25,7 +25,7 @@ module Libis
25
25
 
26
26
  def run(source, target, quality)
27
27
  timeout = Libis::Format::Config[:timeouts][:pdf_optimizer]
28
- result = Libis::Tools::Command.run(
28
+ args = [
29
29
  Libis::Format::Config[:ghostscript_cmd],
30
30
  '-sDEVICE=pdfwrite',
31
31
  '-dCompatibilityLevel=1.4',
@@ -33,18 +33,14 @@ module Libis
33
33
  '-dNOPAUSE',
34
34
  '-dBATCH',
35
35
  "-sOutputFile=#{target}",
36
- source.to_s,
37
- timeout:,
38
- kill_after: timeout * 2
39
- )
40
-
41
- raise "#{self.class} took too long (> #{timeout} seconds) to complete" if result[:timeout]
42
- raise "#{self.class} errors: #{result[:err].join("\n")}" unless (result[:status]).zero?
43
-
44
- {
45
- command: result,
46
- files: [target]
47
- }
36
+ source.to_s
37
+ ]
38
+
39
+ result = Libis::Tools::Command.run(*args, timeout:, kill_after: timeout * 2)
40
+
41
+ result[:err] << "#{self.class} took too long (> #{timeout} seconds) to complete" if result[:timeout]
42
+
43
+ result
48
44
  end
49
45
  end
50
46
  end
@@ -64,15 +64,11 @@ module Libis
64
64
  kill_after: timeout * 2
65
65
  )
66
66
 
67
- raise "#{self.class} took too long (> #{timeout} seconds) to complete" if result[:timeout]
68
- raise "#{self.class} failed with error #{result[:status]}: \n#{(result[:out] + result[:err]).join("\n")}" if result[:status] != 0
67
+ result[:err] << "#{self.class} took too long (> #{timeout} seconds) to complete" if result[:timeout]
69
68
 
70
69
  FileUtils.rm [icc_file, def_filename].compact, force: true
71
70
 
72
- {
73
- command: result,
74
- files: [target]
75
- }
71
+ result
76
72
  end
77
73
 
78
74
  private
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'os'
4
+
5
+ require 'libis/tools/extend/string'
6
+ require 'libis/tools/logger'
7
+ require 'libis/tools/command'
8
+
9
+ require 'libis/format/config'
10
+
11
+ module Libis
12
+ module Format
13
+ module Tool
14
+ class PdfTool
15
+ include ::Libis::Tools::Logger
16
+
17
+ def self.installed?
18
+ result = Libis::Tools::Command.run(Libis::Format::Config[:java_cmd], '-version')
19
+ return false unless (result[:status]).zero?
20
+
21
+ File.exist?(Libis::Format::Config[:pdf_tool])
22
+ end
23
+
24
+ def self.run(command, source, target, *options)
25
+ new.run command, source, target, *options
26
+ end
27
+
28
+ def run(command, source, target, *options)
29
+ if OS.java?
30
+ # TODO: import library and execute in current VM. For now do exactly as in MRI.
31
+ end
32
+
33
+ timeout = Libis::Format::Config[:timeouts][:pdf_tool]
34
+ args = [
35
+ Libis::Format::Config[:java_cmd],
36
+ '-jar', Libis::Format::Config[:pdf_tool],
37
+ [command],
38
+ '-i', source,
39
+ '-o', target,
40
+ options,
41
+ ].flatten
42
+
43
+ result = Libis::Tools::Command.run(*args, timeout: , kill_after: timeout * 2)
44
+
45
+ result[:err] << "#{self.class} took too long (> #{timeout} seconds) to complete" if result[:timeout]
46
+
47
+ result
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -38,8 +38,7 @@ module Libis
38
38
  kill_after: timeout * 2
39
39
  )
40
40
 
41
- raise "#{self.class} took too long (> #{timeout} seconds) to complete" if result[:timeout]
42
- raise "#{self.class} errors: #{result[:err].join("\n")}" unless (result[:status]).zero? && result[:err].empty?
41
+ result[:err] << "#{self.class} took too long (> #{timeout} seconds) to complete" if result[:timeout]
43
42
 
44
43
  Dir.chdir(previous_wd)
45
44
 
@@ -57,7 +56,7 @@ module Libis
57
56
  kill_after: timeout * 2
58
57
  )
59
58
 
60
- raise "#{self.class} took too long (> #{timeout} seconds) to complete" if result[:timeout]
59
+ result[:err] << "#{self.class} took too long (> #{timeout} seconds) to complete" if result[:timeout]
61
60
 
62
61
  end
63
62
  result
@@ -90,7 +90,7 @@ module Libis
90
90
  end
91
91
 
92
92
  def groups
93
- @types.values.map(&:dig.call(:GROUP)).uniq
93
+ @types.values.map(&:dig.with(:GROUP)).uniq
94
94
  end
95
95
 
96
96
  def export_csv(filename, **options)
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Libis
4
4
  module Format
5
- VERSION = '1.3.0'
5
+ VERSION = '1.3.2'
6
6
  end
7
7
  end
data/tools/PdfTool.jar CHANGED
Binary file
Binary file
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: libis-format
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kris Dekeyser
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-03-16 00:00:00.000000000 Z
11
+ date: 2024-08-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: chromaprint
@@ -229,7 +229,7 @@ executables:
229
229
  - fido_tool
230
230
  - formatinfo
231
231
  - libis_format
232
- - pdf_copy
232
+ - pdf_tool
233
233
  extensions: []
234
234
  extra_rdoc_files: []
235
235
  files:
@@ -240,7 +240,7 @@ files:
240
240
  - bin/fido_tool
241
241
  - bin/formatinfo
242
242
  - bin/libis_format
243
- - bin/pdf_copy
243
+ - bin/pdf_tool
244
244
  - data/AdobeRGB1998.icc
245
245
  - data/ISOcoated_v2_eci.icc
246
246
  - data/PDFA_def.ps
@@ -281,11 +281,9 @@ files:
281
281
  - lib/libis/format/tool/identification_tool.rb
282
282
  - lib/libis/format/tool/msg_to_pdf.rb
283
283
  - lib/libis/format/tool/office_to_pdf.rb
284
- - lib/libis/format/tool/pdf_copy.rb
285
- - lib/libis/format/tool/pdf_merge.rb
286
284
  - lib/libis/format/tool/pdf_optimizer.rb
287
- - lib/libis/format/tool/pdf_split.rb
288
285
  - lib/libis/format/tool/pdf_to_pdfa.rb
286
+ - lib/libis/format/tool/pdf_tool.rb
289
287
  - lib/libis/format/tool/pdfa_validator.rb
290
288
  - lib/libis/format/tool/spreadsheet_to_ods.rb
291
289
  - lib/libis/format/type_database.rb
@@ -346,8 +344,8 @@ files:
346
344
  - tools/fop/lib/xmlgraphics-commons.LICENSE.txt
347
345
  - tools/fop/lib/xmlgraphics-commons.NOTICE.txt
348
346
  - tools/pdf2pdfa
349
- - tools/pdfbox/pdfbox-app-2.0.13.jar
350
- - tools/pdfbox/preflight-app-2.0.13.jar
347
+ - tools/pdfbox/pdfbox-app-3.0.3.jar
348
+ - tools/pdfbox/preflight-app-3.0.3.jar
351
349
  homepage: ''
352
350
  licenses:
353
351
  - MIT
@@ -367,7 +365,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
367
365
  - !ruby/object:Gem::Version
368
366
  version: '0'
369
367
  requirements: []
370
- rubygems_version: 3.5.1
368
+ rubygems_version: 3.5.18
371
369
  signing_key:
372
370
  specification_version: 4
373
371
  summary: LIBIS File format format services.
@@ -1,56 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'os'
4
-
5
- require 'libis/tools/extend/string'
6
- require 'libis/tools/logger'
7
- require 'libis/tools/command'
8
-
9
- require 'libis/format/config'
10
-
11
- module Libis
12
- module Format
13
- module Tool
14
- class PdfCopy
15
- include ::Libis::Tools::Logger
16
-
17
- def self.installed?
18
- result = Libis::Tools::Command.run(Libis::Format::Config[:java_cmd], '-version')
19
- return false unless (result[:status]).zero?
20
-
21
- File.exist?(Libis::Format::Config[:pdf_tool])
22
- end
23
-
24
- def self.run(source, target, options = [])
25
- new.run source, target, options
26
- end
27
-
28
- def run(source, target, options = [])
29
- if OS.java?
30
- # TODO: import library and execute in current VM. For now do exactly as in MRI.
31
- end
32
-
33
- timeout = Libis::Format::Config[:timeouts][:pdf_copy]
34
- result = Libis::Tools::Command.run(
35
- Libis::Format::Config[:java_cmd],
36
- '-cp', Libis::Format::Config[:pdf_tool],
37
- 'CopyPdf',
38
- '--file_input', source,
39
- '--file_output', target,
40
- *options,
41
- timeout:,
42
- kill_after: timeout * 2
43
- )
44
-
45
- raise "#{self.class} took too long (> #{timeout} seconds) to complete" if result[:timeout]
46
- raise "#{self.class} errors: #{result[:err].join("\n")}" unless (result[:status]).zero? && result[:err].empty?
47
-
48
- {
49
- command: result,
50
- files: [target]
51
- }
52
- end
53
- end
54
- end
55
- end
56
- end
@@ -1,58 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'os'
4
-
5
- require 'libis/tools/extend/string'
6
- require 'libis/tools/logger'
7
- require 'libis/tools/command'
8
-
9
- require 'libis/format/config'
10
-
11
- module Libis
12
- module Format
13
- module Tool
14
- class PdfMerge
15
- include ::Libis::Tools::Logger
16
-
17
- def self.installed?
18
- result = Libis::Tools::Command.run(Libis::Format::Config[:java_cmd], '-version')
19
- return false unless (result[:status]).zero?
20
-
21
- File.exist?(Libis::Format::Config[:pdf_tool])
22
- end
23
-
24
- def self.run(source, target, options = [])
25
- new.run source, target, options
26
- end
27
-
28
- def run(source, target, options = [])
29
- source = [source] unless source.is_a?(Array)
30
-
31
- if OS.java?
32
- # TODO: import library and execute in current VM. For now do exactly as in MRI.
33
- end
34
-
35
- timeout = Libis::Format::Config[:timeouts][:pdf_merge]
36
- result = Libis::Tools::Command.run(
37
- Libis::Format::Config[:java_cmd],
38
- '-cp', Libis::Format::Config[:pdf_tool],
39
- 'MergePdf',
40
- '--file_output', target,
41
- *options,
42
- *source,
43
- timeout:,
44
- kill_after: timeout * 2
45
- )
46
-
47
- raise "#{self.class} took too long (> #{timeout} seconds) to complete" if result[:timeout]
48
- raise "#{self.class} errors: #{result[:err].join("\n")}" unless (result[:status]).zero? && result[:err].empty?
49
-
50
- {
51
- command: result,
52
- files: [target]
53
- }
54
- end
55
- end
56
- end
57
- end
58
- end
@@ -1,56 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'os'
4
-
5
- require 'libis/tools/extend/string'
6
- require 'libis/tools/logger'
7
- require 'libis/tools/command'
8
-
9
- require 'libis/format/config'
10
-
11
- module Libis
12
- module Format
13
- module Tool
14
- class PdfSplit
15
- include ::Libis::Tools::Logger
16
-
17
- def self.installed?
18
- result = Libis::Tools::Command.run(Libis::Format::Config[:java_cmd], '-version')
19
- return false unless (result[:status]).zero?
20
-
21
- File.exist?(Libis::Format::Config[:pdf_tool])
22
- end
23
-
24
- def self.run(source, target, *args)
25
- new.run source, target, *args
26
- end
27
-
28
- def run(source, target, *args)
29
- if OS.java?
30
- # TODO: import library and execute in current VM. For now do exactly as in MRI.
31
- end
32
-
33
- timeout = Libis::Format::Config[:timeouts][:pdf_split]
34
- result = Libis::Tools::Command.run(
35
- Libis::Format::Config[:java_cmd],
36
- '-cp', Libis::Format::Config[:pdf_tool],
37
- 'SplitPdf',
38
- '--file_input', source,
39
- '--file_output', target,
40
- *args,
41
- timeout:,
42
- kill_after: timeout * 2
43
- )
44
-
45
- raise "#{self.class} took too long (> #{timeout} seconds) to complete" if result[:timeout]
46
- raise "#{self.class} errors: #{result[:err].join("\n")}" unless (result[:status]).zero? && result[:err].empty?
47
-
48
- {
49
- command: result,
50
- files: [target] # TODO: collect the files
51
- }
52
- end
53
- end
54
- end
55
- end
56
- end
Binary file