libis-format 1.2.9 → 1.3.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +4 -0
- data/bin/{pdf_copy → pdf_tool} +3 -2
- data/data/types.yml +1 -1
- data/lib/libis/format/command_line.rb +2 -3
- data/lib/libis/format/config.rb +17 -20
- data/lib/libis/format/converter/base.rb +9 -16
- data/lib/libis/format/converter/chain.rb +36 -28
- data/lib/libis/format/converter/email_converter.rb +5 -8
- data/lib/libis/format/converter/fop_pdf_converter.rb +4 -6
- data/lib/libis/format/converter/image_converter.rb +51 -58
- data/lib/libis/format/converter/jp2_converter.rb +33 -35
- data/lib/libis/format/converter/office_converter.rb +19 -23
- data/lib/libis/format/converter/pdf_converter.rb +133 -52
- data/lib/libis/format/converter/repository.rb +7 -13
- data/lib/libis/format/converter/spreadsheet_converter.rb +7 -11
- data/lib/libis/format/converter/video_converter.rb +41 -55
- data/lib/libis/format/converter/xslt_converter.rb +14 -13
- data/lib/libis/format/converter.rb +1 -1
- data/lib/libis/format/identifier.rb +41 -43
- data/lib/libis/format/tool/droid.rb +29 -30
- data/lib/libis/format/tool/ff_mpeg.rb +11 -13
- data/lib/libis/format/tool/fido.rb +1 -1
- data/lib/libis/format/tool/pdf_optimizer.rb +21 -27
- data/lib/libis/format/tool/pdf_to_pdfa.rb +2 -6
- data/lib/libis/format/tool/pdf_tool.rb +52 -0
- data/lib/libis/format/tool/pdfa_validator.rb +2 -3
- data/lib/libis/format/tool/spreadsheet_to_ods.rb +23 -20
- data/lib/libis/format/tool.rb +2 -2
- data/lib/libis/format/type_database.rb +51 -28
- data/lib/libis/format/type_database_impl.rb +57 -24
- data/lib/libis/format/version.rb +1 -1
- data/lib/libis/format.rb +3 -2
- data/lib/libis-format.rb +2 -0
- data/tools/PdfTool.jar +0 -0
- data/tools/pdfbox/pdfbox-app-3.0.3.jar +0 -0
- data/tools/pdfbox/{preflight-app-2.0.13.jar → preflight-app-3.0.3.jar} +0 -0
- metadata +8 -10
- data/lib/libis/format/tool/pdf_copy.rb +0 -57
- data/lib/libis/format/tool/pdf_merge.rb +0 -58
- data/lib/libis/format/tool/pdf_split.rb +0 -56
- data/tools/pdfbox/pdfbox-app-2.0.13.jar +0 -0
@@ -1,4 +1,4 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative 'base'
|
4
4
|
require 'libis/format/identifier'
|
@@ -13,26 +13,26 @@ MiniMagick.configure do |config|
|
|
13
13
|
config.validate_on_create = false
|
14
14
|
config.validate_on_write = false
|
15
15
|
config.whiny = false
|
16
|
+
config.tmpdir = Libis::Format::Config[:tempdir] || Dir.tmpdir
|
16
17
|
end
|
17
18
|
|
18
19
|
module Libis
|
19
20
|
module Format
|
20
21
|
module Converter
|
21
|
-
|
22
22
|
# noinspection RubyTooManyInstanceVariablesInspection
|
23
23
|
class ImageConverter < Libis::Format::Converter::Base
|
24
|
-
|
25
24
|
def self.input_types
|
26
|
-
[
|
25
|
+
%i[TIFF JPG PNG BMP GIF PDF JP2]
|
27
26
|
end
|
28
27
|
|
29
28
|
def self.output_types(format = nil)
|
30
29
|
return [] unless input_types.include?(format)
|
31
|
-
|
30
|
+
|
31
|
+
%i[TIFF JPG PNG BMP GIF PDF JP2]
|
32
32
|
end
|
33
33
|
|
34
34
|
def self.multipage?(format)
|
35
|
-
[
|
35
|
+
%i[PDF TIFF GIF PBM PGM PPM].include?(format)
|
36
36
|
end
|
37
37
|
|
38
38
|
def initialize
|
@@ -41,15 +41,15 @@ module Libis
|
|
41
41
|
end
|
42
42
|
|
43
43
|
def image_convert(_)
|
44
|
-
#force usage of this converter
|
44
|
+
# force usage of this converter
|
45
45
|
end
|
46
46
|
|
47
|
-
def quiet(
|
48
|
-
@quiet = !!
|
47
|
+
def quiet(value)
|
48
|
+
@quiet = !!value
|
49
49
|
end
|
50
50
|
|
51
|
-
def page(
|
52
|
-
@page =
|
51
|
+
def page(number)
|
52
|
+
@page = number
|
53
53
|
end
|
54
54
|
|
55
55
|
def scale(percent)
|
@@ -122,33 +122,33 @@ module Libis
|
|
122
122
|
@wm_gap = ((options[:gap] || 0.2).to_f * 100).to_i
|
123
123
|
rotation = 360 - (options[:rotation] || 30).to_i
|
124
124
|
@wm_image = MiniMagick::Image.new(options[:file]) if options[:file]
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
# noinspection RubyResolve
|
147
|
-
unless @wm_image.valid?
|
148
|
-
error "Problem creating watermark image '#{image}'."
|
149
|
-
@wm_image = nil
|
150
|
-
end
|
125
|
+
return if @wm_image&.valid?
|
126
|
+
|
127
|
+
image = options[:file] || (Dir::Tmpname.create(%w[wm_image .png]) { |_| })
|
128
|
+
# noinspection RubyResolve
|
129
|
+
MiniMagick::Tool::Convert.new do |convert|
|
130
|
+
# noinspection RubyLiteralArrayInspection
|
131
|
+
convert.quiet
|
132
|
+
convert.background 'transparent'
|
133
|
+
convert.size('2000x2000')
|
134
|
+
convert.gravity 'Center'
|
135
|
+
convert.font('Helvetica').fill('black').pointsize(72) # .stroke('black').strokewidth(1)
|
136
|
+
convert << "label:#{text}"
|
137
|
+
convert.rotate rotation
|
138
|
+
convert.trim.repage.+ # rubocop:disable Lint/Void
|
139
|
+
convert << image
|
140
|
+
end
|
141
|
+
if options[:file]
|
142
|
+
@wm_image = MiniMagick::Image.new(image)
|
143
|
+
else
|
144
|
+
@wm_image = MiniMagick::Image.open(image)
|
145
|
+
File.delete(image)
|
151
146
|
end
|
147
|
+
# noinspection RubyResolve
|
148
|
+
return if @wm_image.valid?
|
149
|
+
|
150
|
+
error "Problem creating watermark image '#{image}'."
|
151
|
+
@wm_image = nil
|
152
152
|
end
|
153
153
|
|
154
154
|
def convert(source, target, format, opts = {})
|
@@ -161,34 +161,33 @@ module Libis
|
|
161
161
|
assemble_and_convert(source, target, format)
|
162
162
|
|
163
163
|
elsif File.directory?(source)
|
164
|
-
source_list = Dir[File.join(source, '**', '*')].reject {|p| File.directory? p}
|
164
|
+
source_list = Dir[File.join(source, '**', '*')].reject { |p| File.directory? p }
|
165
165
|
|
166
166
|
assemble_and_convert(source_list, target, format)
|
167
167
|
|
168
168
|
else
|
169
169
|
|
170
|
-
image = MiniMagick::Image.open(source) { |b| b.quiet }
|
170
|
+
image = MiniMagick::Image.open(source) { |b| b.quiet } # rubocop:disable Style/SymbolProc
|
171
171
|
|
172
172
|
if image.pages.size > 1
|
173
173
|
if @page
|
174
174
|
convert_image(image.pages[@page].path, target, format)
|
175
175
|
else
|
176
176
|
# noinspection RubyBlockToMethodReference
|
177
|
-
assemble_and_convert(image.pages.map
|
177
|
+
assemble_and_convert(image.pages.map(&:path), target, format)
|
178
178
|
end
|
179
179
|
else
|
180
180
|
convert_image(source, target, format)
|
181
181
|
end
|
182
182
|
end
|
183
|
-
|
184
|
-
{
|
183
|
+
|
184
|
+
{
|
185
185
|
files: [target],
|
186
186
|
converter: self.class.name
|
187
187
|
}
|
188
188
|
end
|
189
189
|
|
190
190
|
def assemble_and_convert(sources, target, format)
|
191
|
-
|
192
191
|
warn 'Received multiple images as input and single page format as target.' unless self.class.multipage?(format)
|
193
192
|
converted_pages = sources.inject([]) do |list, path|
|
194
193
|
# noinspection RubyArgCount
|
@@ -198,7 +197,7 @@ module Libis
|
|
198
197
|
end
|
199
198
|
MiniMagick::Tool::Convert.new do |b|
|
200
199
|
b.append unless self.class.multipage?(format)
|
201
|
-
converted_pages.each {|page| b << page.path}
|
200
|
+
converted_pages.each { |page| b << page.path }
|
202
201
|
b << target
|
203
202
|
end
|
204
203
|
converted_pages.each do |temp_file|
|
@@ -210,17 +209,16 @@ module Libis
|
|
210
209
|
protected
|
211
210
|
|
212
211
|
def convert_image(source, target, format)
|
213
|
-
|
214
212
|
image_info = nil
|
215
|
-
image_info = MiniMagick::Image::Info.new(source) {|b| b.quiet} if @wm_image
|
213
|
+
image_info = MiniMagick::Image::Info.new(source) { |b| b.quiet } if @wm_image # rubocop:disable Style/SymbolProc
|
216
214
|
|
217
215
|
MiniMagick::Tool::Convert.new do |convert|
|
218
216
|
convert.quiet if @quiet
|
219
217
|
if @wm_image
|
220
218
|
convert << @wm_image.path
|
221
|
-
convert.bordercolor('transparent').border("#{@wm_gap}%") if @wm_gap
|
219
|
+
convert.bordercolor('transparent').border("#{@wm_gap}%") if @wm_gap.positive?
|
222
220
|
convert.filter('Lagrange')
|
223
|
-
convert.resize("#{image_info['width'] / @wm_tiles}x#{image_info['height'] / @wm_tiles}") if @wm_tiles
|
221
|
+
convert.resize("#{image_info['width'] / @wm_tiles}x#{image_info['height'] / @wm_tiles}") if @wm_tiles.positive?
|
224
222
|
convert.resize("#{@wm_resize}%") if @wm_resize
|
225
223
|
convert.write('mpr:watermark').delete.+
|
226
224
|
end
|
@@ -229,7 +227,7 @@ module Libis
|
|
229
227
|
convert << source
|
230
228
|
convert.flatten if @options[:flatten].nil? && format == :JPG
|
231
229
|
if @wm_image
|
232
|
-
if @wm_tiles >= 0
|
230
|
+
if (@wm_tiles >= 0) && (@wm_tiles <= 1)
|
233
231
|
convert << 'mpr:watermark'
|
234
232
|
else
|
235
233
|
convert.stack do |stack|
|
@@ -242,15 +240,13 @@ module Libis
|
|
242
240
|
convert.compose(@wm_composition).gravity(@wm_gravity).define("compose:args=#{@wm_opacity}%").composite
|
243
241
|
end
|
244
242
|
|
245
|
-
@flags.each {|f, v| v.is_a?(TrueClass) ? convert.send(f).+ : convert.send(f)}
|
246
|
-
if @delete_date
|
247
|
-
convert << '+set' << 'modify-date' << '+set' << 'create-date'
|
248
|
-
end
|
243
|
+
@flags.each { |f, v| v.is_a?(TrueClass) ? convert.send(f).+ : convert.send(f) }
|
244
|
+
convert << '+set' << 'modify-date' << '+set' << 'create-date' if @delete_date
|
249
245
|
|
250
246
|
colorspace = @options.delete(:colorspace) || 'sRGB'
|
251
247
|
unless @options.empty?
|
252
248
|
convert.colorspace('RGB')
|
253
|
-
@options.each {|o, v| convert.send(o, v)}
|
249
|
+
@options.each { |o, v| convert.send(o, v) }
|
254
250
|
end
|
255
251
|
convert.colorspace(colorspace)
|
256
252
|
convert.profile @profile if @profile
|
@@ -262,11 +258,8 @@ module Libis
|
|
262
258
|
end
|
263
259
|
|
264
260
|
target
|
265
|
-
|
266
261
|
end
|
267
|
-
|
268
262
|
end
|
269
|
-
|
270
263
|
end
|
271
264
|
end
|
272
|
-
end
|
265
|
+
end
|
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'libis-tools'
|
3
4
|
require 'fileutils'
|
4
5
|
require 'libis/format/config'
|
@@ -7,32 +8,31 @@ require_relative 'base'
|
|
7
8
|
module Libis
|
8
9
|
module Format
|
9
10
|
module Converter
|
10
|
-
|
11
11
|
class Jp2Converter < Libis::Format::Converter::Base
|
12
|
-
|
13
12
|
def self.input_types
|
14
|
-
[
|
13
|
+
%i[TIFF JPG PNG BMP GIF PDF]
|
15
14
|
end
|
16
15
|
|
17
16
|
def self.output_types(format = nil)
|
18
17
|
return [] unless input_types.include?(format)
|
18
|
+
|
19
19
|
[:JP2]
|
20
20
|
end
|
21
21
|
|
22
22
|
def initialize
|
23
23
|
super
|
24
24
|
@options = {
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
25
|
+
color_xform: false,
|
26
|
+
error_resilience: :ALL,
|
27
|
+
lossless: true,
|
28
|
+
progression_order: 'RLCP',
|
29
|
+
tile_size: [1024, 1024],
|
30
|
+
codeblock_size: [6, 6]
|
31
31
|
}
|
32
32
|
end
|
33
33
|
|
34
34
|
def j2kdriver(_)
|
35
|
-
#force usage of this converter
|
35
|
+
# force usage of this converter
|
36
36
|
end
|
37
37
|
|
38
38
|
def color_xform(flag = true)
|
@@ -68,38 +68,36 @@ module Libis
|
|
68
68
|
|
69
69
|
@options.each do |key, value|
|
70
70
|
case key
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
else
|
79
|
-
options << '--set-output-j2k-xform' << 'I97' << '--set-output-j2k-psnr' << '46'
|
80
|
-
end
|
81
|
-
when :progression_order
|
82
|
-
options << '--set-output-j2k-progression-order' << value.to_s
|
83
|
-
when :tile_size
|
84
|
-
options << '--set-output-j2k-tile-size' << value[0].to_s << value[1].to_s
|
85
|
-
when :codeblock_size
|
86
|
-
options << '--set-output-j2k-codeblock-size' << value[0].to_s << value[1].to_s
|
71
|
+
when :color_xform
|
72
|
+
options << '--set-output-j2k-color-xform' << (value ? 'YES' : 'NO')
|
73
|
+
when :error_resilience
|
74
|
+
options << '--set-output-j2k-error-resilience' << value.to_s
|
75
|
+
when :lossless
|
76
|
+
if value
|
77
|
+
options << '--set-output-j2k-xform' << 'R53' << '5' << '--set-output-j2k-ratio' << '0'
|
87
78
|
else
|
88
|
-
|
79
|
+
options << '--set-output-j2k-xform' << 'I97' << '--set-output-j2k-psnr' << '46'
|
80
|
+
end
|
81
|
+
when :progression_order
|
82
|
+
options << '--set-output-j2k-progression-order' << value.to_s
|
83
|
+
when :tile_size
|
84
|
+
options << '--set-output-j2k-tile-size' << value[0].to_s << value[1].to_s
|
85
|
+
when :codeblock_size
|
86
|
+
options << '--set-output-j2k-codeblock-size' << value[0].to_s << value[1].to_s
|
87
|
+
else # rubocop:disable Style/EmptyElse
|
88
|
+
# do nothing
|
89
89
|
end
|
90
90
|
end
|
91
91
|
|
92
|
-
|
93
92
|
result = Libis::Tools::Command.run(
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
93
|
+
Libis::Format::Config[:j2k_cmd],
|
94
|
+
'--input-file-name', source,
|
95
|
+
'--set-output-type', 'JP2',
|
96
|
+
*options,
|
97
|
+
'--output-file-name', target
|
99
98
|
)
|
100
99
|
|
101
100
|
result.merge(files: [target], converter: self.class.name)
|
102
|
-
|
103
101
|
end
|
104
102
|
end
|
105
103
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative 'base'
|
4
4
|
|
@@ -8,47 +8,43 @@ require 'libis/format/type_database'
|
|
8
8
|
module Libis
|
9
9
|
module Format
|
10
10
|
module Converter
|
11
|
-
|
12
11
|
class OfficeConverter < Libis::Format::Converter::Base
|
13
|
-
|
14
12
|
def self.input_types
|
15
|
-
[
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
13
|
+
%i[
|
14
|
+
TXT
|
15
|
+
RTF
|
16
|
+
HTML
|
17
|
+
MSDOC
|
18
|
+
MSDOT
|
19
|
+
MSXLS
|
20
|
+
MSPPT
|
21
|
+
MSDOCX
|
22
|
+
MSDOTX
|
23
|
+
MSXLSX
|
24
|
+
MSPPTX
|
25
|
+
WORDPERFECT
|
26
|
+
OO_WRITER
|
27
|
+
OO_IMPRESS
|
28
|
+
OO_CALC
|
31
29
|
]
|
32
30
|
end
|
33
31
|
|
34
32
|
def self.output_types(format = nil)
|
35
33
|
return [] unless input_types.include?(format)
|
34
|
+
|
36
35
|
[:PDF]
|
37
36
|
end
|
38
37
|
|
39
38
|
def office_convert(_)
|
40
|
-
#force usage of this converter
|
39
|
+
# force usage of this converter
|
41
40
|
end
|
42
41
|
|
43
42
|
def convert(source, target, format, opts = {})
|
44
43
|
super
|
45
44
|
|
46
45
|
Format::Tool::OfficeToPdf.run(source, target)
|
47
|
-
|
48
46
|
end
|
49
|
-
|
50
47
|
end
|
51
|
-
|
52
48
|
end
|
53
49
|
end
|
54
50
|
end
|