libis-format 1.0.7 → 2.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/.travis.yml +32 -24
  4. data/README.md +2 -2
  5. data/base/Dockerfile +5 -3
  6. data/base/rework_path +5 -10
  7. data/bin/{droid → droid_tool} +0 -0
  8. data/bin/{fido → fido_tool} +0 -0
  9. data/lib/libis/format.rb +12 -3
  10. data/lib/libis/format/cli/convert.rb +4 -4
  11. data/lib/libis/format/config.rb +16 -12
  12. data/lib/libis/format/converter/audio_converter.rb +2 -36
  13. data/lib/libis/format/converter/base.rb +22 -8
  14. data/lib/libis/format/converter/chain.rb +3 -3
  15. data/lib/libis/format/converter/image_assembler.rb +82 -0
  16. data/lib/libis/format/converter/image_converter.rb +20 -138
  17. data/lib/libis/format/converter/image_splitter.rb +84 -0
  18. data/lib/libis/format/converter/image_watermarker.rb +261 -0
  19. data/lib/libis/format/converter/jp2_converter.rb +1 -1
  20. data/lib/libis/format/converter/office_converter.rb +2 -2
  21. data/lib/libis/format/converter/pdf_assembler.rb +66 -0
  22. data/lib/libis/format/converter/pdf_converter.rb +6 -132
  23. data/lib/libis/format/converter/pdf_metadata.rb +82 -0
  24. data/lib/libis/format/converter/pdf_optimizer.rb +67 -0
  25. data/lib/libis/format/converter/pdf_protecter.rb +147 -0
  26. data/lib/libis/format/converter/pdf_selecter.rb +83 -0
  27. data/lib/libis/format/converter/pdf_splitter.rb +70 -0
  28. data/lib/libis/format/converter/pdf_watermarker_header.rb +71 -0
  29. data/lib/libis/format/converter/pdf_watermarker_image.rb +76 -0
  30. data/lib/libis/format/converter/pdf_watermarker_text.rb +93 -0
  31. data/lib/libis/format/converter/spreadsheet_converter.rb +2 -2
  32. data/lib/libis/format/converter/video_converter.rb +1 -1
  33. data/lib/libis/format/identifier.rb +3 -3
  34. data/lib/libis/format/info.rb +27 -0
  35. data/lib/libis/format/library.rb +147 -0
  36. data/lib/libis/format/tool.rb +4 -1
  37. data/lib/libis/format/tool/extension_identification.rb +4 -4
  38. data/lib/libis/format/tool/identification_tool.rb +6 -6
  39. data/lib/libis/format/tool/pdf_merge.rb +3 -3
  40. data/lib/libis/format/tool/{pdf_copy.rb → pdf_metadata.rb} +5 -5
  41. data/lib/libis/format/tool/pdf_protect.rb +47 -0
  42. data/lib/libis/format/tool/pdf_select.rb +47 -0
  43. data/lib/libis/format/tool/pdf_split.rb +4 -4
  44. data/lib/libis/format/tool/pdf_watermark.rb +47 -0
  45. data/lib/libis/format/tool/spreadsheet_to_ods.rb +1 -0
  46. data/lib/libis/format/version.rb +1 -1
  47. data/lib/libis/format/yaml_loader.rb +71 -0
  48. data/libis-format.gemspec +3 -2
  49. data/tools/PdfTool.jar +0 -0
  50. data/tools/bcpkix-jdk15on-167.jar +0 -0
  51. data/tools/bcprov-jdk15on-167.jar +0 -0
  52. data/tools/fop/fop.bat +75 -75
  53. data/tools/fop/fop.cmd +31 -31
  54. data/tools/fop/fop.js +341 -341
  55. data/tools/fop/lib/avalon-framework.NOTICE.TXT +11 -11
  56. data/tools/fop/lib/xml-apis.LICENSE-SAX.html +17 -17
  57. data/tools/fop/lib/xml-apis.LICENSE.DOM-documentation.html +74 -74
  58. data/tools/fop/lib/xml-apis.LICENSE.DOM-software.html +66 -66
  59. metadata +32 -19
  60. data/bin/pdf_copy +0 -13
  61. data/lib/libis/format/type_database.rb +0 -133
  62. data/lib/libis/format/type_database_impl.rb +0 -120
  63. data/tools/bcpkix-jdk15on-1.49.jar +0 -0
  64. data/tools/bcprov-jdk15on-1.49.jar +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '09143d3be9aca7d01b5c6ba3512e4b106d4ee2f0e370fad9c565bf0724c61846'
4
- data.tar.gz: 5c9f5fb67527e828a2b293ffe6e4bf8616d7a08f67780b963e5f292bb50ae385
3
+ metadata.gz: 43d209bde1a85973e528730bb3ec4c9cffc58db02f916936fa2144d4e91b81f7
4
+ data.tar.gz: 04315d80c7e20b6302f9d6d10906f4ec7d5b6046a47902fbeff95ec97bf7732a
5
5
  SHA512:
6
- metadata.gz: cbf99230e3566a2aacdfd02e97f2622cd83d32601cb772fec50a94c04054754e367ea1a09276e7cdee6d9bc564f8642a63967159a2d3290769c368945fe3c233
7
- data.tar.gz: c0f33d0d7d0208ea7ed8678da52dea0dd30ee54438c321a4be0a1b5ccc01f2451591251615775074639b03e4548d9a97cf4218e4ae0b8ce0aa2819e70f12a964
6
+ metadata.gz: d581e3ac51fc290ba57e27d2bf6bfe5dcfa8f269a8dbdfa656954bff2af7efd8d963177ec1cb309db481bd7b84603df20e8b34bb1800f7c88d93e91e31722532
7
+ data.tar.gz: 867208ce1766cb4bdec0efc648c7b5a1e1dd9883ffd5818f82324ea3a783b21e50cb81fafdbc04bad1c1da75adb75503c63d9be3936baeeac436a5a92ac9a791
data/.gitignore CHANGED
@@ -18,3 +18,5 @@ mkmf.log
18
18
  *.pyc
19
19
  tools/pdf/
20
20
  /test*
21
+ /*~
22
+ /*.pdf
data/.travis.yml CHANGED
@@ -1,41 +1,45 @@
1
+ dist: bionic
1
2
  language: ruby
2
- sudo: false
3
- dist: trusty
4
3
  cache: bundler
4
+ sudo: false
5
5
  rvm:
6
- - 2.1.10
7
- - 2.2.8
8
- - 2.3.5
9
- - 2.4.2
6
+ - 2.3
7
+ - 2.4
8
+ - 2.5
9
+ - 2.6
10
10
  - ruby-head
11
- - jruby-9.0.5.0
12
- - jruby-9.1.9.0
11
+ - jruby-9.1
12
+ - jruby-9.2
13
13
  - jruby-head
14
14
  jdk:
15
- - openjdk8
16
- - oraclejdk8
15
+ - openjdk10
16
+ - openjdk11
17
17
  matrix:
18
18
  exclude:
19
- - rvm: 2.1.10
20
- jdk: oraclejdk8
21
- - rvm: 2.2.8
22
- jdk: oraclejdk8
23
- - rvm: 2.3.5
24
- jdk: oraclejdk8
25
- - rvm: 2.4.2
26
- jdk: oraclejdk8
19
+ - rvm: 2.3
20
+ jdk: openjdk10
21
+ - rvm: 2.4
22
+ jdk: openjdk10
23
+ - rvm: 2.5
24
+ jdk: openjdk10
25
+ - rvm: 2.6
26
+ jdk: openjdk10
27
27
  - rvm: ruby-head
28
- jdk: oraclejdk8
28
+ jdk: openjdk10
29
29
  allow_failures:
30
30
  - rvm: ruby-head
31
31
  - rvm: jruby-head
32
32
  branches:
33
33
  only:
34
- - master
34
+ - master
35
+ - v2
35
36
  before_install:
36
- - 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
37
40
  - sudo apt-get update -y -q
38
- - 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
39
43
  - sudo pip install --upgrade pip
40
44
  - sudo pip install --upgrade --ignore-installed opf-fido six
41
45
  - sudo wget -O droid.zip -q http://www.nationalarchives.gov.uk/documents/information-management/droid-binary-6.4-bin.zip
@@ -43,8 +47,12 @@ before_install:
43
47
  - sudo unzip droid.zip -d /opt/droid
44
48
  - sudo chmod 755 /opt/droid/droid.sh
45
49
  - sudo locale-gen "en_US.UTF-8"
46
- - sudo dpkg-reconfigure locales
47
- - 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
48
56
  env:
49
57
  - LC_ALL=en_US.UTF-8
50
58
  - LANG=en_US.UTF-8
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[@]}"
File without changes
File without changes
data/lib/libis/format.rb CHANGED
@@ -3,8 +3,11 @@ require 'libis/format/version'
3
3
  module Libis
4
4
  module Format
5
5
  autoload :Config, 'libis/format/config'
6
- autoload :TypeDatabase, 'libis/format/type_database'
7
- autoload :TypeDatabaseImpl, 'libis/format/type_database_impl'
6
+
7
+ autoload :Info, 'libis/format/info'
8
+ autoload :Library, 'libis/format/library'
9
+ autoload :YamlLoader, 'libis/format/yaml_loader'
10
+
8
11
  autoload :Identifier, 'libis/format/identifier'
9
12
 
10
13
  autoload :Tool, 'libis/format/tool'
@@ -15,4 +18,10 @@ module Libis
15
18
  TOOL_DIR = File.join(ROOT_DIR, 'tools')
16
19
 
17
20
  end
18
- end
21
+ end
22
+
23
+ class Object
24
+ def blank?
25
+ respond_to?(:empty?) ? !!empty? : !self
26
+ end unless defined? :blank?
27
+ end
@@ -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
@@ -23,23 +24,26 @@ module Libis
23
24
  Config[:preflight_jar] = File.join(Libis::Format::TOOL_DIR, 'pdfbox', 'preflight-app-2.0.13.jar')
24
25
  # noinspection RubyStringKeysInHashInspection
25
26
  Config[:xml_validations] = [['archive/ead', File.join(Libis::Format::DATA_DIR, 'ead.xsd')]]
26
- 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')
27
29
  Config[:raw_audio_convert_cmd] = 'sox -V1 %s -e signed -b 16 -t wav %s rate %d channels %d'
28
30
  Config[:watermark_font] = '/usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf'
29
31
  Config[:timeouts] = {
30
32
  droid: 20 * 60,
31
- ffmpeg: 5 * 60,
33
+ ffmpeg: 500 * 60,
32
34
  fido: 20 * 60,
33
- file_tool: 5 * 60,
34
- fop: 5 * 60,
35
- identification_tool: 5 * 60,
36
- office_to_pdf: 5 * 60,
37
- pdf_copy: 5 * 60,
38
- pdf_merge: 5 * 60,
39
- pdf_optimizer: 5 * 60,
40
- pdf_split: 5 * 60,
41
- pdf_to_pdfa: 5 * 60,
42
- pdfa_validator: 5 * 60,
35
+ file_tool: 20 * 60,
36
+ fop: 50 * 60,
37
+ identification_tool: 50 * 60,
38
+ office_to_pdf: 50 * 60,
39
+ pdf_select: 50 * 60,
40
+ pdf_copy: 50 * 60,
41
+ pdf_merge: 50 * 60,
42
+ pdf_optimizer: 50 * 60,
43
+ pdf_split: 50 * 60,
44
+ pdf_watermark: 50 * 60,
45
+ pdf_to_pdfa: 50 * 60,
46
+ pdfa_validator: 50 * 60,
43
47
  }
44
48
 
45
49
  end
@@ -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,47 +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)
77
+ convert_file(source, target)
93
78
 
94
- else
95
-
96
- convert_file(source, target)
97
-
98
- end
99
-
100
- target
101
-
102
- end
103
-
104
- def assemble_and_convert(sources, target)
105
- Tempfile.create(%w(list .txt)) do |f|
106
- sources.each {|src| f.puts src}
107
- opts[:global] ||= []
108
- opts[:global] += %w(-f concat)
109
- f.close
110
- target = convert_file(f.to_path, target)
111
- end
112
- target
113
79
  end
114
80
 
115
81
  def self.sounds_like(file1, file2, threshold, rate, channels)
@@ -4,7 +4,8 @@
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/tools/extend/string'
8
+ require 'libis/format/library'
8
9
 
9
10
  require_relative 'repository'
10
11
 
@@ -22,10 +23,23 @@ module Libis
22
23
  @flags = {}
23
24
  end
24
25
 
26
+ def self.category
27
+ :converter
28
+ end
29
+
30
+ def check_file_exist(file)
31
+ unless File.exist? file
32
+ error "Cannot find file '#{file}'."
33
+ return false
34
+ end
35
+ true
36
+ end
37
+
25
38
  def convert(source, target, format, opts = {})
26
- unless File.exist? source
27
- error "Cannot find file '#{source}'."
28
- return nil
39
+ if source.is_a?(Array)
40
+ return nil unless source.map { |f| check_file_exist(f) }.reduce(:&)
41
+ else
42
+ return nil unless check_file_exist(source)
29
43
  end
30
44
  @options.merge!(opts[:options]) if opts[:options]
31
45
  @flags.merge!(opts[:flags]) if opts[:flags]
@@ -51,7 +65,7 @@ module Libis
51
65
  target
52
66
  end
53
67
 
54
- def Base.inherited( klass )
68
+ def Base.inherited(klass)
55
69
 
56
70
  Repository.register klass
57
71
 
@@ -73,12 +87,12 @@ module Libis
73
87
  end
74
88
 
75
89
  def input_mimetype?(mimetype)
76
- type_id = TypeDatabase.instance.mime_types(mimetype).first
90
+ type_id = Libis::Format::Library.get_field_by(:mimetype, mimetype, :format)
77
91
  input_type? type_id
78
92
  end
79
93
 
80
94
  def output_mimetype?(mimetype)
81
- type_id = TypeDatabase.instance.mime_types(mimetype).first
95
+ type_id = Libis::Format::Library.get_field_by(:mimetype, mimetype, :format)
82
96
  output_type? type_id
83
97
  end
84
98
 
@@ -91,7 +105,7 @@ module Libis
91
105
  end
92
106
 
93
107
  def extension?(extension)
94
- !TypeDatabase.ext_types(extension).first.nil?
108
+ !Libis::Format::Library.get_field_by(:extension, extension, :format).nil?
95
109
  end
96
110
 
97
111
  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
@@ -83,8 +83,8 @@ module Libis
83
83
  target = target_file
84
84
 
85
85
  if i < size - 1
86
- target += ".temp.#{TypeDatabase.type_extentions(target_type).first}"
87
- 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
88
88
  temp_files << target
89
89
  end
90
90
 
@@ -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