libis-format 1.2.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +0 -1
  3. data/.travis.yml +19 -23
  4. data/Gemfile +0 -2
  5. data/README.md +2 -2
  6. data/base/Dockerfile +5 -3
  7. data/base/rework_path +5 -10
  8. data/data/PDFA_def.ps +3 -3
  9. data/data/eciRGB_v2.icc +0 -0
  10. data/lib/libis/format/cli/convert.rb +4 -4
  11. data/lib/libis/format/config.rb +3 -3
  12. data/lib/libis/format/converter/audio_converter.rb +6 -38
  13. data/lib/libis/format/converter/base.rb +21 -8
  14. data/lib/libis/format/converter/chain.rb +7 -19
  15. data/lib/libis/format/converter/fop_pdf_converter.rb +2 -0
  16. data/lib/libis/format/converter/image_assembler.rb +82 -0
  17. data/lib/libis/format/converter/image_converter.rb +21 -141
  18. data/lib/libis/format/converter/image_splitter.rb +80 -0
  19. data/lib/libis/format/converter/image_watermarker.rb +261 -0
  20. data/lib/libis/format/converter/jp2_converter.rb +4 -4
  21. data/lib/libis/format/converter/office_converter.rb +5 -3
  22. data/lib/libis/format/converter/pdf_assembler.rb +66 -0
  23. data/lib/libis/format/converter/pdf_converter.rb +31 -98
  24. data/lib/libis/format/converter/pdf_optimizer.rb +70 -0
  25. data/lib/libis/format/converter/pdf_splitter.rb +65 -0
  26. data/lib/libis/format/converter/pdf_watermarker.rb +110 -0
  27. data/lib/libis/format/converter/spreadsheet_converter.rb +5 -3
  28. data/lib/libis/format/converter/video_converter.rb +3 -6
  29. data/lib/libis/format/converter/xslt_converter.rb +14 -15
  30. data/lib/libis/format/identifier.rb +3 -3
  31. data/lib/libis/format/info.rb +27 -0
  32. data/lib/libis/format/library.rb +147 -0
  33. data/lib/libis/format/tool/extension_identification.rb +4 -4
  34. data/lib/libis/format/tool/{ff_mpeg.rb → ffmpeg.rb} +1 -10
  35. data/lib/libis/format/tool/fop_pdf.rb +0 -12
  36. data/lib/libis/format/tool/identification_tool.rb +6 -6
  37. data/lib/libis/format/tool/office_to_pdf.rb +1 -10
  38. data/lib/libis/format/tool/pdf_copy.rb +1 -11
  39. data/lib/libis/format/tool/pdf_merge.rb +1 -11
  40. data/lib/libis/format/tool/pdf_optimizer.rb +2 -11
  41. data/lib/libis/format/tool/pdf_split.rb +1 -11
  42. data/lib/libis/format/tool/pdf_to_pdfa.rb +43 -59
  43. data/lib/libis/format/tool/pdfa_validator.rb +35 -28
  44. data/lib/libis/format/tool/spreadsheet_to_ods.rb +2 -10
  45. data/lib/libis/format/tool.rb +1 -1
  46. data/lib/libis/format/version.rb +1 -1
  47. data/lib/libis/format/yaml_loader.rb +71 -0
  48. data/lib/libis/format.rb +5 -2
  49. data/libis-format.gemspec +3 -5
  50. data/tools/fop/fop.bat +75 -75
  51. data/tools/fop/fop.cmd +31 -31
  52. data/tools/fop/fop.js +341 -341
  53. data/tools/fop/lib/avalon-framework.NOTICE.TXT +11 -11
  54. data/tools/fop/lib/xml-apis.LICENSE-SAX.html +17 -17
  55. data/tools/fop/lib/xml-apis.LICENSE.DOM-documentation.html +74 -74
  56. data/tools/fop/lib/xml-apis.LICENSE.DOM-software.html +66 -66
  57. metadata +19 -29
  58. data/data/AdobeRGB1998.icc +0 -0
  59. data/lib/libis/format/converter/email_converter.rb +0 -38
  60. data/lib/libis/format/tool/email_to_pdf.rb +0 -75
  61. data/lib/libis/format/type_database.rb +0 -133
  62. data/lib/libis/format/type_database_impl.rb +0 -120
  63. data/tools/emailconverter.jar +0 -0
  64. data/tools/pdf2pdfa +0 -395
  65. /data/bin/{droid_tool → droid} +0 -0
  66. /data/bin/{fido_tool → fido} +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dbe8adef471b584bc6f960aed0263bd0a7656bfe209722bb2d334bbfda33a4a7
4
- data.tar.gz: 58cb1a9a9691e863fe57f55ac6517d70f70c30ff9056d0cb18b3221c7b8b3246
3
+ metadata.gz: f563ad694fd3d0c9e4a9f0da3309c99ac4b103e6027fcc9cda1606f0f67549c2
4
+ data.tar.gz: 5cee3f4b3bb1e51db492ee14bf919b0ce0fa69e267292380364c32b4eec40b4e
5
5
  SHA512:
6
- metadata.gz: a56125fed2ab49a892839060d965baeaff4089f57386c73d42e4bf1cd18ca3b9fc8728d579cc00ababe2276100f187f55e4170dbdad059a7cf899e59593507bb
7
- data.tar.gz: b54c535d65d95a0f3e37fc3bfa4b47ad7d5f0fd14b007718946071987c543fde5c251a440ddc7e161a9f8e6c83d375f48b5ac240b5cc31bd13c06e678c0b8e75
6
+ metadata.gz: 409ea1fac8f8be4d2519f189090207b6a550a1b1ce174a71fa1886c69b667001459d4bdccd850dd55373199ae5553ebd02183e15eebc88a73d0ac3f8093f7d12
7
+ data.tar.gz: d3e4d77ddcaab1f5050aaf4acb02e74a221566abedb94062254efbc24d18703c8fdd739644b1cd5435b54a4497e77c82bdcbcb218d121bfaf135e483662aca06
data/.gitignore CHANGED
@@ -18,4 +18,3 @@ mkmf.log
18
18
  *.pyc
19
19
  tools/pdf/
20
20
  /test*
21
- .rake_tasks~
data/.travis.yml CHANGED
@@ -1,8 +1,7 @@
1
+ dist: bionic
1
2
  language: ruby
2
- sudo: false
3
- dist: trusty
4
3
  cache: bundler
5
-
4
+ sudo: false
6
5
  rvm:
7
6
  - 2.3
8
7
  - 2.4
@@ -10,47 +9,37 @@ rvm:
10
9
  - 2.6
11
10
  - ruby-head
12
11
  - jruby-9.1
12
+ - jruby-9.2
13
13
  - jruby-head
14
14
  jdk:
15
- - openjdk8
16
15
  - openjdk10
17
16
  - openjdk11
18
17
  matrix:
19
18
  exclude:
20
19
  - rvm: 2.3
21
20
  jdk: openjdk10
22
- - rvm: 2.3
23
- jdk: openjdk11
24
21
  - rvm: 2.4
25
22
  jdk: openjdk10
26
- - rvm: 2.4
27
- jdk: openjdk11
28
23
  - rvm: 2.5
29
24
  jdk: openjdk10
30
- - rvm: 2.5
31
- jdk: openjdk11
32
25
  - rvm: 2.6
33
26
  jdk: openjdk10
34
- - rvm: 2.6
35
- jdk: openjdk11
36
27
  - rvm: ruby-head
37
28
  jdk: openjdk10
38
- - rvm: ruby-head
39
- jdk: openjdk11
40
29
  allow_failures:
41
30
  - rvm: ruby-head
42
31
  - rvm: jruby-head
43
32
  branches:
44
33
  only:
45
- - master
46
-
47
- env:
48
- - LC_ALL=en_IE.UTF-8
49
-
34
+ - master
35
+ - v2
50
36
  before_install:
51
- - sudo add-apt-repository ppa:mc3man/trusty-media -y
37
+ - gem update --system
38
+ - gem --version
39
+ - sudo add-apt-repository ppa:mc3man/bionic-media -y
52
40
  - sudo apt-get update -y -q
53
- - sudo apt-get install -y -q ffmpeg gstreamer0.10-ffmpeg
41
+ - sudo apt-get install
42
+ - sudo apt-get install -y -q ffmpeg ubuntu-restricted-extras
54
43
  - sudo pip install --upgrade pip
55
44
  - sudo pip install --upgrade --ignore-installed opf-fido six
56
45
  - sudo wget -O droid.zip -q http://www.nationalarchives.gov.uk/documents/information-management/droid-binary-6.4-bin.zip
@@ -58,8 +47,15 @@ before_install:
58
47
  - sudo unzip droid.zip -d /opt/droid
59
48
  - sudo chmod 755 /opt/droid/droid.sh
60
49
  - sudo locale-gen "en_US.UTF-8"
61
- - sudo dpkg-reconfigure locales
62
- - echo "8\n9\n" | sudo dpkg-reconfigure tzdata
50
+ - echo 'Europe/Brussels' | sudo tee /etc/timezone
51
+ - export TZ=Europe/Brussels
52
+ - sudo dpkg-reconfigure --frontend noninteractive tzdata
53
+ - date
54
+ before_script:
55
+ - export TZ=Europe/Brussels
56
+ env:
57
+ - LC_ALL=en_US.UTF-8
58
+ - LANG=en_US.UTF-8
63
59
  addons:
64
60
  apt:
65
61
  packages:
data/Gemfile CHANGED
@@ -3,5 +3,3 @@ source 'https://rubygems.org'
3
3
  gem 'coveralls', group: :test, require: false
4
4
 
5
5
  gemspec name: 'libis-format', development_group: :test
6
-
7
- gem 'standard'
data/README.md CHANGED
@@ -26,9 +26,9 @@ Or install it yourself as:
26
26
 
27
27
  ## Usage
28
28
 
29
- ### ::Libis::Format::TypeDatabase
29
+ ### ::Libis::Format::Library
30
30
 
31
- The type database is the core of the format services. It stores information about all the known formats.
31
+ The format database is the core of the format services. It stores information about all the known formats.
32
32
 
33
33
  ### ::Libis::Format::Identifier
34
34
 
data/base/Dockerfile CHANGED
@@ -27,7 +27,9 @@ RUN wget -q -O fop.tar.gz "http://www.apache.org/dyn/closer.cgi?filename=/xmlgra
27
27
  && rm fop.tar.gz
28
28
 
29
29
  RUN echo "8\n9\n" | apt-get install tzdata
30
- ADD ./tools /tools
31
- ADD ./data /config
32
- ADD ./spec/data /data
30
+ RUN mkdir -p /teneo/format/spec
31
+ ADD ./tools /teneo/format/tools
32
+ ADD ./data /teneo/format/data
33
+ ADD ./spec/data /teneo/format/spec/data
34
+ ADD ./base/rework_path /teneo/format/rework_path
33
35
  CMD /bin/bash
data/base/rework_path CHANGED
@@ -1,25 +1,20 @@
1
1
  #!/bin/bash
2
2
 
3
- #file=${1/$SRC_PATH/$TGT_PATH}
4
- #echo "$1 -> $file"
5
-
6
3
  CMD=$1
7
4
  shift
8
5
 
9
6
  readarray -d ',' -t mapping <<< "$VOLUME_MAPPING"
10
7
 
11
8
  args=("$@")
12
- echo "args: ${args[@]}"
13
- #args="${args[@]/$SRC_PATH/$TGT_PATH}"
14
- #args="${args[@]/$SRC_TMP/$TGT_TMP}"
9
+ #echo "args: ${args[@]}"
15
10
  for map in "${mapping[@]}"
16
11
  do
17
12
  map="${map//[$'\t\r\n ']}"
18
13
  readarray -d '=' -t m <<< "$map"
19
14
  src="${m[0]//[$'\t\r\n ']}"
20
15
  tgt="${m[1]//[$'\t\r\n ']}"
21
- echo "$src -> $tgt"
22
- args="${args[@]/$src/$tgt}"
23
- echo "args: ${args[@]}"
16
+ # echo "$src -> $tgt"
17
+ args=("${args[@]/$src/$tgt}")
18
+ # echo "args: ${args[@]}"
24
19
  done
25
- echo $CMD "${args[@]}"
20
+ ${CMD} "${args[@]}"
data/data/PDFA_def.ps CHANGED
@@ -5,10 +5,10 @@
5
5
  % unless the user modifies the corresponding line below.
6
6
 
7
7
  % Define entries in the document Info dictionary :
8
- /ICCProfile ([**ICC profile**])
8
+ /ICCProfile ([** Fill in ICC profile location **])
9
9
  def
10
10
 
11
- [ [**METADATA**]
11
+ [ /Title (Title)
12
12
  /DOCINFO pdfmark
13
13
 
14
14
  % Define an ICC profile :
@@ -35,6 +35,6 @@ def
35
35
  /Type /OutputIntent % Must be so (the standard requires).
36
36
  /S /GTS_PDFA1 % Must be so (the standard requires).
37
37
  /DestOutputProfile {icc_PDFA} % Must be so (see above).
38
- /OutputConditionIdentifier ([**ICC reference**])
38
+ /OutputConditionIdentifier ([** Fill in ICC reference name **])
39
39
  >> /PUT pdfmark
40
40
  [{Catalog} <</OutputIntents [ {OutputIntent_PDFA} ]>> /PUT pdfmark
Binary file
@@ -67,7 +67,7 @@ module Libis
67
67
  arguments that any of the targetted converters support.
68
68
 
69
69
  The source file's format will be identified by the Libis::Format::Identifier and the target file's format
70
- will be derived from the file's extension. The Libis::Format::TypeDatabase is used to relate extensions
70
+ will be derived from the file's extension. The Libis::Format::Library is used to relate extensions
71
71
  with formats.
72
72
 
73
73
  DESC
@@ -89,7 +89,7 @@ module Libis
89
89
  A source file name and target file name should be supplied. The source file should exist and be readable.
90
90
  The target file should be writable, but should not exist.
91
91
 
92
- The target file's format will be derived from the file's extension. The Libis::Format::TypeDatabase is used
92
+ The target file's format will be derived from the file's extension. The Libis::Format::Library is used
93
93
  to relate extensions with formats.
94
94
 
95
95
  DESC
@@ -265,11 +265,11 @@ module Libis
265
265
  end
266
266
 
267
267
  def extname(format)
268
- Libis::Format::TypeDatabase.type_extentions(format).first
268
+ Libis::Format::Library.get_field(format, :extensions)
269
269
  end
270
270
 
271
271
  def get_format(file_name)
272
- Libis::Format::TypeDatabase.ext_types(File.extname(file_name)).first
272
+ Libis::Format::Library.get_field_by(:extension, File.extname(file_name), :format)
273
273
  end
274
274
 
275
275
  def format_identifier(file)
@@ -1,5 +1,6 @@
1
1
  # encoding: utf-8
2
2
  require 'os'
3
+ require 'libis-tools'
3
4
 
4
5
  module Libis
5
6
  module Format
@@ -21,10 +22,10 @@ module Libis
21
22
  Config[:fido_formats] = [(File.join(Libis::Format::DATA_DIR, 'lias_formats.xml'))]
22
23
  Config[:pdf_tool] = File.join(Libis::Format::TOOL_DIR, 'PdfTool.jar')
23
24
  Config[:preflight_jar] = File.join(Libis::Format::TOOL_DIR, 'pdfbox', 'preflight-app-2.0.13.jar')
24
- Config[:email2pdf_jar] = File.join(Libis::Format::TOOL_DIR, 'emailconverter.jar')
25
25
  # noinspection RubyStringKeysInHashInspection
26
26
  Config[:xml_validations] = [['archive/ead', File.join(Libis::Format::DATA_DIR, 'ead.xsd')]]
27
- Config[:type_database] = File.join(Libis::Format::DATA_DIR, 'types.yml')
27
+ Config[:format_library_implementation] = 'Libis::Format::YamlLoader.instance'
28
+ Config[:format_library_database] = File.join(Libis::Format::DATA_DIR, 'types.yml')
28
29
  Config[:raw_audio_convert_cmd] = 'sox -V1 %s -e signed -b 16 -t wav %s rate %d channels %d'
29
30
  Config[:watermark_font] = '/usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf'
30
31
  Config[:timeouts] = {
@@ -35,7 +36,6 @@ module Libis
35
36
  fop: 5 * 60,
36
37
  identification_tool: 5 * 60,
37
38
  office_to_pdf: 5 * 60,
38
- email2pdf: 5 * 60,
39
39
  pdf_copy: 5 * 60,
40
40
  pdf_merge: 5 * 60,
41
41
  pdf_optimizer: 5 * 60,
@@ -15,7 +15,7 @@ module Libis
15
15
  end
16
16
 
17
17
  def self.output_types(format = nil)
18
- return [] unless input_types.include?(format)
18
+ return [] unless format.nil? || input_types.include?(format)
19
19
  [:MP3, :FLAC, :AC3, :AAC, :WMA, :ALAC, :WAV, :AIFF, :AMR, :AU, :M4A]
20
20
  end
21
21
 
@@ -69,46 +69,13 @@ module Libis
69
69
  (@options[:preset] ||= {})[stream] = name
70
70
  end
71
71
 
72
- # def encoder(value)
73
- # @options[:encoder] = value
74
- # end
75
- #
76
- # def encoder_options(value)
77
- # @options[:encoder_options] = value
78
- # end
79
-
80
72
  def convert(source, target, _format, opts = {})
81
73
  super
82
74
 
83
75
  FileUtils.mkpath(File.dirname(target))
84
76
 
85
- if source.is_a? Array
86
-
87
- assemble_and_convert(source, target)
88
-
89
- elsif File.directory?(source)
90
-
91
- sources = Dir[File.join(source, '**', '*')].reject {|p| File.directory? p}
92
- assemble_and_convert(sources, target)
93
-
94
- else
95
-
96
- convert_file(source, target)
97
-
98
- end
99
-
100
- end
77
+ convert_file(source, target)
101
78
 
102
- def assemble_and_convert(sources, target)
103
- result = {}
104
- Tempfile.create(%w(list .txt)) do |f|
105
- sources.each {|src| f.puts src}
106
- opts[:global] ||= []
107
- opts[:global] += %w(-f concat)
108
- f.close
109
- result = convert_file(f.to_path, target)
110
- end
111
- result
112
79
  end
113
80
 
114
81
  def self.sounds_like(file1, file2, threshold, rate, channels)
@@ -154,7 +121,6 @@ module Libis
154
121
 
155
122
  def convert_file(source, target)
156
123
  opts = {global: [], input: [], filter: [], output: []}
157
-
158
124
  opts[:global] << '-hide_banner'
159
125
  opts[:global] << '-loglevel' << (@options[:quiet] ? 'fatal' : 'warning')
160
126
  opts[:output] << '-vn' # disable input video stream in case it exists
@@ -168,8 +134,10 @@ module Libis
168
134
  opts[:output] << '-ar' << @options[:sampling_freq] if @options[:sampling_freq]
169
135
  opts[:output] << '-ac' << @options[:channels] if @options[:channels]
170
136
  opts[:output] << '-f' << @options[:format] if @options[:format]
171
-
172
- Libis::Format::Tool::FFMpeg.run(source, target, opts)
137
+ result = Libis::Format::Tool::FFMpeg.run(source, target, opts)
138
+ info "FFMpeg output: #{result}"
139
+ result
140
+ target
173
141
  end
174
142
 
175
143
  end
@@ -4,7 +4,7 @@
4
4
  require 'tmpdir'
5
5
  require 'libis/tools/logger'
6
6
  require 'libis/tools/temp_file'
7
- require 'libis/format/type_database'
7
+ require 'libis/format/library'
8
8
 
9
9
  require_relative 'repository'
10
10
 
@@ -22,10 +22,23 @@ module Libis
22
22
  @flags = {}
23
23
  end
24
24
 
25
+ def self.category
26
+ :converter
27
+ end
28
+
29
+ def check_file_exist(file)
30
+ unless File.exist? file
31
+ error "Cannot find file '#{file}'."
32
+ return false
33
+ end
34
+ true
35
+ end
36
+
25
37
  def convert(source, target, format, opts = {})
26
- unless File.exist? source
27
- error "Cannot find file '#{source}'."
28
- return nil
38
+ if source.is_a?(Array)
39
+ return nil unless source.map { |f| check_file_exist(f) }.reduce(:&)
40
+ else
41
+ return nil unless check_file_exist(source)
29
42
  end
30
43
  @options.merge!(opts[:options]) if opts[:options]
31
44
  @flags.merge!(opts[:flags]) if opts[:flags]
@@ -51,7 +64,7 @@ module Libis
51
64
  target
52
65
  end
53
66
 
54
- def Base.inherited( klass )
67
+ def Base.inherited(klass)
55
68
 
56
69
  Repository.register klass
57
70
 
@@ -73,12 +86,12 @@ module Libis
73
86
  end
74
87
 
75
88
  def input_mimetype?(mimetype)
76
- type_id = TypeDatabase.instance.mime_types(mimetype).first
89
+ type_id = Libis::Format::Library.get_field_by(:mimetype, mimetype, :format)
77
90
  input_type? type_id
78
91
  end
79
92
 
80
93
  def output_mimetype?(mimetype)
81
- type_id = TypeDatabase.instance.mime_types(mimetype).first
94
+ type_id = Libis::Format::Library.get_field_by(:mimetype, mimetype, :format)
82
95
  output_type? type_id
83
96
  end
84
97
 
@@ -91,7 +104,7 @@ module Libis
91
104
  end
92
105
 
93
106
  def extension?(extension)
94
- !TypeDatabase.ext_types(extension).first.nil?
107
+ !Libis::Format::Library.get_field_by(:extension, extension, :format).nil?
95
108
  end
96
109
 
97
110
  end
@@ -5,7 +5,7 @@ require 'deep_dive'
5
5
 
6
6
  require 'libis/tools/logger'
7
7
  require 'libis/tools/extend/hash'
8
- require 'libis/format/type_database'
8
+ require 'libis/format/library'
9
9
 
10
10
  module Libis
11
11
  module Format
@@ -68,18 +68,14 @@ module Libis
68
68
  end
69
69
 
70
70
  temp_files = []
71
- xtra_files = []
72
-
73
- result = { commands: [] }
74
71
 
75
72
  # noinspection RubyParenthesesAroundConditionInspection
76
- conversion_success = converter_chain.each_with_index do |node, i|
73
+ result = @converter_chain.each_with_index do |node, i|
77
74
 
78
75
  target_type = node[:output]
79
76
  converter_class = node[:converter]
80
77
  converter = converter_class.new
81
78
 
82
-
83
79
  node[:operations].each do |operation|
84
80
  converter.send operation[:method], operation[:argument]
85
81
  end if node[:operations]
@@ -87,32 +83,24 @@ module Libis
87
83
  target = target_file
88
84
 
89
85
  if i < size - 1
90
- target += ".temp.#{TypeDatabase.type_extentions(target_type).first}"
91
- target += ".#{TypeDatabase.type_extentions(target_type).first}" while File.exist? target
86
+ target += ".temp.#{Libis::Format::Library.get_field(target_type, :extensions).first}"
87
+ target += ".#{Libis::Format::Library.get_field(target_type, :extensions).first}" while File.exist? target
92
88
  temp_files << target
93
89
  end
94
90
 
95
91
  FileUtils.mkdir_p File.dirname(target)
96
92
 
97
- r = converter.convert(src_file, target, target_type)
98
-
99
- src_file = r[:files].first
100
- xtra_files += r[:files][1..]
101
- break :failed unless src_file1
93
+ src_file = converter.convert(src_file, target, target_type)
102
94
 
103
- result[:commands] << r.merge(converter: converter_class.name)
104
-
105
- :success
95
+ break :failed unless src_file
106
96
 
107
97
  end
108
98
 
109
- result[:files] = [src_file] + xtra_files
110
-
111
99
  temp_files.each do |f|
112
100
  FileUtils.rm(f, force: true)
113
101
  end
114
102
 
115
- conversion_success == :failed ? nil : result
103
+ result == :failed ? nil : target_file
116
104
 
117
105
  end
118
106
 
@@ -31,6 +31,8 @@ module Libis
31
31
 
32
32
  Libis::Format::Tool::FopPdf.run(source, target)
33
33
 
34
+ target
35
+
34
36
  end
35
37
 
36
38
  end
@@ -0,0 +1,82 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative 'base'
4
+ require 'libis/format/identifier'
5
+
6
+ require 'mini_magick'
7
+
8
+ MiniMagick.logger.level = ::Logger::UNKNOWN
9
+
10
+ MiniMagick.configure do |config|
11
+ # config.cli = :graphicsmagick
12
+ config.validate_on_create = false
13
+ config.validate_on_write = false
14
+ config.whiny = false
15
+ end
16
+
17
+ module Libis
18
+ module Format
19
+ module Converter
20
+
21
+ # noinspection RubyTooManyInstanceVariablesInspection,DuplicatedCode
22
+ class ImageAssembler < Libis::Format::Converter::Base
23
+
24
+ def self.input_types
25
+ [:TIFF, :JPG, :PNG, :BMP, :GIF, :PDF, :JP2]
26
+ end
27
+
28
+ def self.output_types(format = nil)
29
+ return [] unless input_types.include?(format) if format
30
+ [:PDF, :TIFF, :GIF, :PBM, :PGM, :PPM]
31
+ end
32
+
33
+ def self.category
34
+ :assembler
35
+ end
36
+
37
+ def image_assemble(_)
38
+ #force usage of this converter
39
+ end
40
+
41
+ def quiet(v)
42
+ @quiet = !!v
43
+ end
44
+
45
+ def convert(source, target, format, opts = {})
46
+ super
47
+
48
+ FileUtils.mkpath(File.dirname(target))
49
+
50
+ if source.is_a? Array
51
+ assemble(source, target, format)
52
+ elsif File.directory?(source)
53
+ source_list = Dir[File.join(source, '**', '*')].reject {|p| File.directory? p}
54
+ assemble(source_list, target, format)
55
+ else
56
+ image = MiniMagick::Image.open(source) {|b| b.quiet}
57
+ if image.pages.size > 1
58
+ assemble(image.pages.map {|page| page.path}, target, format)
59
+ else
60
+ assemble([source], target, format)
61
+ end
62
+ end
63
+
64
+ target
65
+
66
+ end
67
+
68
+ private
69
+
70
+ def assemble(sources, target, format)
71
+ MiniMagick::Tool::Convert.new do |b|
72
+ sources.each {|source| b << source}
73
+ convert.format(format)
74
+ b << target
75
+ end
76
+ end
77
+
78
+ end
79
+
80
+ end
81
+ end
82
+ end