libis-format 1.0.1 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.gitignore +3 -1
- data/.travis.yml +43 -25
- data/README.md +2 -2
- data/base/Dockerfile +35 -0
- data/base/Dockerfile.alpine +20 -0
- data/base/Dockerfile.rvm +56 -0
- data/base/rework_path +20 -0
- data/bin/libis_format +8 -0
- data/docker_cfg.yml +1 -0
- data/lib/libis/format.rb +5 -1
- data/lib/libis/format/cli/convert.rb +310 -0
- data/lib/libis/format/cli/format.rb +77 -0
- data/lib/libis/format/cli/prompt_helper.rb +87 -0
- data/lib/libis/format/cli/sub_command.rb +22 -0
- data/lib/libis/format/command_line.rb +25 -0
- data/lib/libis/format/config.rb +14 -10
- data/lib/libis/format/converter/audio_converter.rb +3 -37
- data/lib/libis/format/converter/base.rb +21 -8
- data/lib/libis/format/converter/chain.rb +3 -3
- data/lib/libis/format/converter/image_assembler.rb +82 -0
- data/lib/libis/format/converter/image_converter.rb +36 -134
- data/lib/libis/format/converter/image_splitter.rb +80 -0
- data/lib/libis/format/converter/image_watermarker.rb +261 -0
- data/lib/libis/format/converter/jp2_converter.rb +2 -2
- data/lib/libis/format/converter/office_converter.rb +2 -2
- data/lib/libis/format/converter/pdf_assembler.rb +66 -0
- data/lib/libis/format/converter/pdf_converter.rb +33 -89
- data/lib/libis/format/converter/pdf_optimizer.rb +70 -0
- data/lib/libis/format/converter/pdf_splitter.rb +65 -0
- data/lib/libis/format/converter/pdf_watermarker.rb +110 -0
- data/lib/libis/format/converter/spreadsheet_converter.rb +2 -2
- data/lib/libis/format/converter/video_converter.rb +1 -1
- data/lib/libis/format/identifier.rb +7 -7
- data/lib/libis/format/info.rb +27 -0
- data/lib/libis/format/library.rb +147 -0
- data/lib/libis/format/tool/droid.rb +2 -2
- data/lib/libis/format/tool/extension_identification.rb +4 -4
- data/lib/libis/format/tool/ffmpeg.rb +1 -1
- data/lib/libis/format/tool/fido.rb +1 -1
- data/lib/libis/format/tool/fop_pdf.rb +1 -1
- data/lib/libis/format/tool/identification_tool.rb +6 -6
- data/lib/libis/format/tool/office_to_pdf.rb +1 -1
- data/lib/libis/format/tool/pdf_copy.rb +1 -1
- data/lib/libis/format/tool/pdf_merge.rb +1 -1
- data/lib/libis/format/tool/pdf_split.rb +1 -1
- data/lib/libis/format/tool/pdf_to_pdfa.rb +1 -2
- data/lib/libis/format/tool/pdfa_validator.rb +3 -4
- data/lib/libis/format/tool/spreadsheet_to_ods.rb +2 -1
- data/lib/libis/format/version.rb +1 -1
- data/lib/libis/format/yaml_loader.rb +71 -0
- data/libis-format.gemspec +4 -4
- data/tools/fop/build/fop.jar +0 -0
- data/tools/fop/conf/fop.xconf +466 -0
- data/tools/fop/fop +258 -0
- data/tools/fop/fop.bat +75 -0
- data/tools/fop/fop.cmd +31 -0
- data/tools/fop/fop.js +341 -0
- data/tools/fop/lib/README.txt +243 -0
- data/tools/fop/lib/avalon-framework-api-4.3.1.jar +0 -0
- data/tools/fop/lib/avalon-framework-impl-4.3.1.jar +0 -0
- data/tools/fop/lib/avalon-framework.LICENSE.txt +175 -0
- data/tools/fop/lib/avalon-framework.NOTICE.TXT +11 -0
- data/tools/fop/lib/batik-all-1.10.jar +0 -0
- data/tools/fop/lib/batik.LICENSE.txt +201 -0
- data/tools/fop/lib/batik.NOTICE.txt +18 -0
- data/tools/fop/lib/commons-io-1.3.1.jar +0 -0
- data/tools/fop/lib/commons-io.LICENSE.txt +203 -0
- data/tools/fop/lib/commons-io.NOTICE.txt +6 -0
- data/tools/fop/lib/commons-logging-1.0.4.jar +0 -0
- data/tools/fop/lib/commons-logging.LICENSE.txt +202 -0
- data/tools/fop/lib/commons-logging.NOTICE.txt +3 -0
- data/tools/fop/lib/fontbox-2.0.7.jar +0 -0
- data/tools/fop/lib/serializer-2.7.2.jar +0 -0
- data/tools/fop/lib/serializer.LICENSE.txt +201 -0
- data/tools/fop/lib/serializer.NOTICE.txt +15 -0
- data/tools/fop/lib/xalan-2.7.2.jar +0 -0
- data/tools/fop/lib/xalan.BCEL.LICENSE.txt +52 -0
- data/tools/fop/lib/xalan.LICENSE.txt +202 -0
- data/tools/fop/lib/xalan.NOTICE.txt +44 -0
- data/tools/fop/lib/xalan.regexp.LICENSE.txt +52 -0
- data/tools/fop/lib/xalan.runtime.LICENSE.txt +20 -0
- data/tools/fop/lib/xerces.LICENSE.txt +56 -0
- data/tools/fop/lib/xercesImpl-2.9.1.jar +0 -0
- data/tools/fop/lib/xercesImpl.LICENSE.txt +201 -0
- data/tools/fop/lib/xercesImpl.NOTICE.txt +14 -0
- data/tools/fop/lib/xml-apis-1.3.04.jar +0 -0
- data/tools/fop/lib/xml-apis-ext-1.3.04.jar +0 -0
- data/tools/fop/lib/xml-apis-ext.LICENSE.dom-documentation.txt +73 -0
- data/tools/fop/lib/xml-apis-ext.LICENSE.dom-software.txt +61 -0
- data/tools/fop/lib/xml-apis-ext.LICENSE.sac.html +75 -0
- data/tools/fop/lib/xml-apis-ext.LICENSE.txt +202 -0
- data/tools/fop/lib/xml-apis-ext.NOTICE.txt +16 -0
- data/tools/fop/lib/xml-apis-ext.README.dom.txt +56 -0
- data/tools/fop/lib/xml-apis.LICENSE-SAX.html +17 -0
- data/tools/fop/lib/xml-apis.LICENSE.DOM-documentation.html +74 -0
- data/tools/fop/lib/xml-apis.LICENSE.DOM-software.html +66 -0
- data/tools/fop/lib/xml-apis.LICENSE.txt +201 -0
- data/tools/fop/lib/xml-apis.NOTICE.txt +13 -0
- data/tools/fop/lib/xmlgraphics-commons-2.3.jar +0 -0
- data/tools/fop/lib/xmlgraphics-commons.LICENSE.txt +202 -0
- data/tools/fop/lib/xmlgraphics-commons.NOTICE.txt +5 -0
- data/tools/pdfbox/pdfbox-app-2.0.13.jar +0 -0
- data/tools/pdfbox/{pdfbox-app-1.8.10.jar → preflight-app-2.0.13.jar} +0 -0
- metadata +78 -252
- data/lib/libis/format/type_database.rb +0 -201
- data/spec/converter_audio_spec.rb +0 -66
- data/spec/converter_fop_spec.rb +0 -37
- data/spec/converter_image_spec.rb +0 -166
- data/spec/converter_office_spec.rb +0 -84
- data/spec/converter_pdf_spec.rb +0 -30
- data/spec/converter_repository_spec.rb +0 -97
- data/spec/converter_spreadsheet_spec.rb +0 -39
- data/spec/converter_video_spec.rb +0 -97
- data/spec/converter_xsl_spec.rb +0 -56
- data/spec/data/Cevennes2.bmp +0 -0
- data/spec/data/Cevennes2.jp2 +0 -0
- data/spec/data/Cevennes2.ppm +0 -22492
- data/spec/data/NikonRaw-CameraRaw.TIF +0 -0
- data/spec/data/NikonRaw-CaptureOne.tif +0 -0
- data/spec/data/audio/carlin_disappointed.aac +0 -0
- data/spec/data/audio/carlin_disappointed.ac3 +0 -0
- data/spec/data/audio/carlin_disappointed.aiff +0 -0
- data/spec/data/audio/carlin_disappointed.au +0 -0
- data/spec/data/audio/carlin_disappointed.flac +0 -0
- data/spec/data/audio/carlin_disappointed.m4a +0 -0
- data/spec/data/audio/carlin_disappointed.mka +0 -0
- data/spec/data/audio/carlin_disappointed.mp3 +0 -0
- data/spec/data/audio/carlin_disappointed.ogg +0 -0
- data/spec/data/audio/carlin_disappointed.ra +0 -0
- data/spec/data/audio/carlin_disappointed.voc +0 -0
- data/spec/data/audio/carlin_disappointed.wav +0 -0
- data/spec/data/audio/carlin_disappointed.wma +0 -0
- data/spec/data/audio/greensleeves.aac +0 -0
- data/spec/data/audio/greensleeves.ac3 +0 -0
- data/spec/data/audio/greensleeves.aiff +0 -0
- data/spec/data/audio/greensleeves.au +0 -0
- data/spec/data/audio/greensleeves.flac +0 -0
- data/spec/data/audio/greensleeves.m4a +0 -0
- data/spec/data/audio/greensleeves.mka +0 -0
- data/spec/data/audio/greensleeves.mp3 +0 -0
- data/spec/data/audio/greensleeves.ogg +0 -0
- data/spec/data/audio/greensleeves.ra +0 -0
- data/spec/data/audio/greensleeves.voc +0 -0
- data/spec/data/audio/greensleeves.wav +0 -0
- data/spec/data/audio/greensleeves.wma +0 -0
- data/spec/data/audio/king_nonviolence.aac +0 -0
- data/spec/data/audio/king_nonviolence.ac3 +0 -0
- data/spec/data/audio/king_nonviolence.aiff +0 -0
- data/spec/data/audio/king_nonviolence.au +0 -0
- data/spec/data/audio/king_nonviolence.flac +0 -0
- data/spec/data/audio/king_nonviolence.m4a +0 -0
- data/spec/data/audio/king_nonviolence.mka +0 -0
- data/spec/data/audio/king_nonviolence.mp3 +0 -0
- data/spec/data/audio/king_nonviolence.ogg +0 -0
- data/spec/data/audio/king_nonviolence.ra +0 -0
- data/spec/data/audio/king_nonviolence.voc +0 -0
- data/spec/data/audio/king_nonviolence.wav +0 -0
- data/spec/data/audio/king_nonviolence.wma +0 -0
- data/spec/data/audio/top_gun_secret.aac +0 -0
- data/spec/data/audio/top_gun_secret.ac3 +0 -0
- data/spec/data/audio/top_gun_secret.aiff +0 -0
- data/spec/data/audio/top_gun_secret.au +0 -0
- data/spec/data/audio/top_gun_secret.flac +0 -0
- data/spec/data/audio/top_gun_secret.m4a +0 -0
- data/spec/data/audio/top_gun_secret.mka +0 -0
- data/spec/data/audio/top_gun_secret.mp3 +0 -0
- data/spec/data/audio/top_gun_secret.ogg +0 -0
- data/spec/data/audio/top_gun_secret.ra +0 -0
- data/spec/data/audio/top_gun_secret.voc +0 -0
- data/spec/data/audio/top_gun_secret.wav +0 -0
- data/spec/data/audio/top_gun_secret.wma +0 -0
- data/spec/data/multipage.tif +0 -0
- data/spec/data/multipage.tif.jp2 +0 -0
- data/spec/data/test-ead.xml +0 -392
- data/spec/data/test-jpg.tif +0 -0
- data/spec/data/test-lzw.tif +0 -0
- data/spec/data/test-options.jpg +0 -0
- data/spec/data/test-options.png +0 -0
- data/spec/data/test.bmp +0 -0
- data/spec/data/test.doc +0 -0
- data/spec/data/test.docx +0 -0
- data/spec/data/test.gif +0 -0
- data/spec/data/test.jpg +0 -0
- data/spec/data/test.ods +0 -0
- data/spec/data/test.odt +0 -0
- data/spec/data/test.pdf +0 -0
- data/spec/data/test.pdf.tif +0 -0
- data/spec/data/test.png +0 -0
- data/spec/data/test.ps +0 -8631
- data/spec/data/test.psd +0 -0
- data/spec/data/test.rtf +0 -1455
- data/spec/data/test.tif +0 -0
- data/spec/data/test.txt +0 -12
- data/spec/data/test.xcf +0 -0
- data/spec/data/test.xls +0 -0
- data/spec/data/test.xlsx +0 -0
- data/spec/data/test.xml +0 -4
- data/spec/data/test_pdfa.pdf +0 -0
- data/spec/data/video/SampleVideo_1080x720_2mb.flv +0 -0
- data/spec/data/video/SampleVideo_1080x720_2mb.mkv +0 -0
- data/spec/data/video/SampleVideo_1080x720_2mb.mp4 +0 -0
- data/spec/data/video/SampleVideo_176x144_2mb.3gp +0 -0
- data/spec/data/video/SampleVideo_320x240_2mb.3gp +0 -0
- data/spec/data/video/SampleVideo_360x240_2mb.flv +0 -0
- data/spec/data/video/SampleVideo_360x240_2mb.mkv +0 -0
- data/spec/data/video/SampleVideo_360x240_2mb.mp4 +0 -0
- data/spec/data/video/copyright.png +0 -0
- data/spec/data/xml/134476_ead.XML +0 -1
- data/spec/data/xml/134476_ead.pdf +0 -0
- data/spec/data/xml/134476_fo.XML +0 -383
- data/spec/data/xml/134476_raw.XML +0 -141
- data/spec/data/xml/ead2fo_pdf.xsl +0 -1453
- data/spec/data/xml/header_nolink_pdf.xsl +0 -120
- data/spec/data/xml/lookupLists.xsl +0 -488
- data/spec/data/xml/scope_eadToHTML.xsl +0 -2376
- data/spec/data/xml/scope_xmlToEAD_dom.xsl +0 -952
- data/spec/identifier_spec.rb +0 -161
- data/spec/spec_helper.rb +0 -58
- data/spec/test_types.yml +0 -12
- data/spec/type_database_spec.rb +0 -140
- data/tools/pdfbox/preflight-app-1.8.10.jar +0 -0
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
require_relative 'base'
|
|
4
4
|
|
|
5
5
|
require 'libis/format/tool/spreadsheet_to_ods'
|
|
6
|
-
require 'libis/format/
|
|
6
|
+
require 'libis/format/library'
|
|
7
7
|
|
|
8
8
|
module Libis
|
|
9
9
|
module Format
|
|
@@ -20,7 +20,7 @@ module Libis
|
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
def self.output_types(format = nil)
|
|
23
|
-
return [] unless input_types.include?(format)
|
|
23
|
+
return [] unless input_types.include?(format) if format
|
|
24
24
|
[:OO_CALC]
|
|
25
25
|
end
|
|
26
26
|
|
|
@@ -14,7 +14,7 @@ module Libis
|
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
def self.output_types(format = nil)
|
|
17
|
-
return [] unless input_types.include?(format)
|
|
17
|
+
return [] unless input_types.include?(format) if format
|
|
18
18
|
[:GIF, :WEBM, :MP4, :MPG, :MKV, :MJP2, :QTFF, :AVI, :OGGV, :WMV, :DV, :FLV, :SWF]
|
|
19
19
|
end
|
|
20
20
|
|
|
@@ -9,7 +9,7 @@ require 'libis/tools/extend/string'
|
|
|
9
9
|
require 'libis/tools/extend/empty'
|
|
10
10
|
require 'nori/core_ext/object'
|
|
11
11
|
|
|
12
|
-
require 'libis/format/
|
|
12
|
+
require 'libis/format/library'
|
|
13
13
|
|
|
14
14
|
require_relative 'config'
|
|
15
15
|
require_relative 'tool/fido'
|
|
@@ -42,10 +42,10 @@ module Libis
|
|
|
42
42
|
|
|
43
43
|
def get(file, options = {})
|
|
44
44
|
|
|
45
|
-
options[:droid] = true unless options.keys.include?(:droid)
|
|
46
|
-
options[:fido] = true unless options.keys.include?(:fido)
|
|
47
|
-
options[:file] = true unless options.keys.include?(:file)
|
|
48
|
-
options[:xml_validation] = true
|
|
45
|
+
options[:droid] = true unless options.keys.include?(:droid) or (options[:tool] and options[:tool] != :droid)
|
|
46
|
+
options[:fido] = true unless options.keys.include?(:fido) or (options[:tool] and options[:tool] != :fido)
|
|
47
|
+
options[:file] = true unless options.keys.include?(:file) or (options[:tool] and options[:tool] != :file)
|
|
48
|
+
options[:xml_validation] = true if options[:xml_validation].nil?
|
|
49
49
|
|
|
50
50
|
result = {messages: [], output: {}, formats: {}}
|
|
51
51
|
|
|
@@ -132,7 +132,7 @@ module Libis
|
|
|
132
132
|
if doc.validates_against?(xsd_file)
|
|
133
133
|
log_msg result, :debug, "XML file validated against XML Schema: #{xsd_file}"
|
|
134
134
|
info = {mimetype: mime, tool_raw: file_result[:tool], tool: :xsd_validation, match_type: 'xsd_validation', format_version: '', }
|
|
135
|
-
file_result.merge! Libis::Format::
|
|
135
|
+
file_result.merge! Libis::Format::Library.enrich(info, puid: :puid, mimetype: :mimetype, name: :format_name)
|
|
136
136
|
end
|
|
137
137
|
rescue => e
|
|
138
138
|
# Do nothing - probably Nokogiri chrashed during validation. Could have many causes
|
|
@@ -208,7 +208,7 @@ module Libis
|
|
|
208
208
|
end
|
|
209
209
|
|
|
210
210
|
def get_mimetype(puid)
|
|
211
|
-
::Libis::Format::
|
|
211
|
+
::Libis::Format::Library.get_field_by(:puid, puid, :mimetypes)
|
|
212
212
|
end
|
|
213
213
|
|
|
214
214
|
def get_best_result(results)
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
module Libis
|
|
2
|
+
module Format
|
|
3
|
+
class Info
|
|
4
|
+
attr_reader :name, :category, :description, :puids, :mimetypes, :extensions
|
|
5
|
+
|
|
6
|
+
def initialize(name:, category:, description: '', puids: [], mimetypes: [], extensions: [])
|
|
7
|
+
@name = name
|
|
8
|
+
@category = category
|
|
9
|
+
@description = description
|
|
10
|
+
@puids = puids
|
|
11
|
+
@mimetypes = mimetypes
|
|
12
|
+
@extensions = extensions
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def to_hash
|
|
16
|
+
{
|
|
17
|
+
name: name,
|
|
18
|
+
description: description.dup,
|
|
19
|
+
category: category,
|
|
20
|
+
puids: puids.dup,
|
|
21
|
+
mimetypes: mimetypes.dup,
|
|
22
|
+
extensions: extensions.dup
|
|
23
|
+
}
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# froze_string_litteral: true
|
|
2
|
+
# coding: utf-8
|
|
3
|
+
require 'singleton'
|
|
4
|
+
|
|
5
|
+
module Libis
|
|
6
|
+
module Format
|
|
7
|
+
|
|
8
|
+
class Library
|
|
9
|
+
include Singleton
|
|
10
|
+
|
|
11
|
+
class << self
|
|
12
|
+
def implementation=(impl)
|
|
13
|
+
instance.implementation = impl
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def get_info(format)
|
|
17
|
+
instance.get_info(format)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def get_info_by(key, value)
|
|
21
|
+
instance.get_info_by(key, value)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def get_infos_by(key, value)
|
|
25
|
+
instance.get_infos_by(key, value)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def get_field(format, field)
|
|
29
|
+
instance.get_field(format, field)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def get_field_by(key, value, field)
|
|
33
|
+
instance.get_field_by(key, value, field)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def get_fields_by(key, value, field)
|
|
37
|
+
instance.get_fields_by(key, value, field)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def known?(key, value)
|
|
41
|
+
instance.known?(key, value)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def enrich(info, map_keys = {})
|
|
45
|
+
instance.enrich(info, map_keys)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def normalize(info, map_keys = {})
|
|
49
|
+
instance.normalize(info, map_keys)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def implementation=(impl)
|
|
54
|
+
@implementation = impl
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def get_field(format, field)
|
|
58
|
+
get_field_by(:name, format, field)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def get_field_by(key, value, field)
|
|
62
|
+
info = get_info_by(key, value)
|
|
63
|
+
return nil unless info
|
|
64
|
+
case field
|
|
65
|
+
when :mimetype
|
|
66
|
+
info[:mimetypes]&.first
|
|
67
|
+
when :puid
|
|
68
|
+
info[:puids]&.first
|
|
69
|
+
when :extension
|
|
70
|
+
info[:extensions]&.first
|
|
71
|
+
else
|
|
72
|
+
info[field]
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def get_fields_by(key, value, field)
|
|
77
|
+
get_infos_by(key, value)&.map { |info| info[field] }.compact
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def get_info(format)
|
|
81
|
+
get_info_by(:name, format)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def get_info_by(key, value)
|
|
85
|
+
get_infos_by(key, value)&.first
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def get_infos_by(key, value)
|
|
89
|
+
result = @implementation.query(key, value)
|
|
90
|
+
result.map(&:to_hash)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def known?(key, value)
|
|
94
|
+
!get_info_by(key, value).nil?
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def enrich(info, map_keys = {})
|
|
98
|
+
info = normalize(info, map_keys)
|
|
99
|
+
mapper = Hash.new { |hash, key| hash[key] = key }.merge(map_keys)
|
|
100
|
+
unless (format = info[mapper[:name]]).nil?
|
|
101
|
+
lib_info = get_info(format)
|
|
102
|
+
mapper.keys.each do |key|
|
|
103
|
+
case key
|
|
104
|
+
when :mimetype
|
|
105
|
+
info[mapper[key]] = lib_info[:mimetypes].first if lib_info[:mimetypes].first
|
|
106
|
+
when :puid
|
|
107
|
+
info[mapper[key]] = lib_info[:puids].first if lib_info[:puids].first
|
|
108
|
+
when :extension
|
|
109
|
+
info[mapper[key]] = lib_info[:extensions].first if lib_info[:extensions].first
|
|
110
|
+
else
|
|
111
|
+
info[mapper[key]] = lib_info[key] if lib_info[key]
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
info
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
# Derive name from the available info
|
|
119
|
+
def normalize(info, map_keys = {})
|
|
120
|
+
return {} unless info.is_a? Hash
|
|
121
|
+
mapper = Hash.new { |hash, key| hash[key] = key }.merge(map_keys)
|
|
122
|
+
# fill format from looking up by puid
|
|
123
|
+
unless (puid = info[mapper[:puid]]).blank?
|
|
124
|
+
info[mapper[:name]] ||= get_field_by(:puid, puid, :name)
|
|
125
|
+
end
|
|
126
|
+
# fill format from looking up by mimetype
|
|
127
|
+
unless (mime = info[mapper[:mimetype]]).blank?
|
|
128
|
+
info[mapper[:name]] ||= get_field_by(:mimetype, mime, :name)
|
|
129
|
+
end
|
|
130
|
+
# finally complete the information from looking up by format name
|
|
131
|
+
unless (format = info[mapper[:name]]).nil?
|
|
132
|
+
info[mapper[:mimetype]] = get_field(format, :mimetype)
|
|
133
|
+
info[mapper[:category]] = get_field(format, :category)
|
|
134
|
+
end
|
|
135
|
+
info
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
private
|
|
139
|
+
|
|
140
|
+
def initialize
|
|
141
|
+
@implementation = eval(Libis::Format::Config[:format_library_implementation])
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
end
|
|
147
|
+
end
|
|
@@ -76,7 +76,7 @@ module Libis
|
|
|
76
76
|
]
|
|
77
77
|
timeout = Libis::Format::Config[:timeouts][:droid]
|
|
78
78
|
result = Libis::Tools::Command.run(
|
|
79
|
-
Libis::Format::Config[:
|
|
79
|
+
Libis::Format::Config[:droid_cmd], *args,
|
|
80
80
|
timeout: timeout,
|
|
81
81
|
kill_after: timeout * 2
|
|
82
82
|
)
|
|
@@ -96,7 +96,7 @@ module Libis
|
|
|
96
96
|
args << '-R' if recursive
|
|
97
97
|
timeout = Libis::Format::Config[:timeouts][:droid]
|
|
98
98
|
result = Libis::Tools::Command.run(
|
|
99
|
-
Libis::Format::Config[:
|
|
99
|
+
Libis::Format::Config[:droid_cmd], *args,
|
|
100
100
|
timeout: timeout,
|
|
101
101
|
kill_after: timeout * 2
|
|
102
102
|
)
|
|
@@ -37,14 +37,14 @@ module Libis
|
|
|
37
37
|
def runner(*args)
|
|
38
38
|
|
|
39
39
|
args.map do |file|
|
|
40
|
-
info = ::Libis::Format::
|
|
40
|
+
info = ::Libis::Format::Library.get_info_by(:extension, File.extname(file))
|
|
41
41
|
if info
|
|
42
42
|
{
|
|
43
43
|
filepath: file,
|
|
44
|
-
mimetype: (info[:
|
|
45
|
-
puid: (info[:
|
|
44
|
+
mimetype: (info[:mimetypes].first rescue nil),
|
|
45
|
+
puid: (info[:puids].first rescue nil),
|
|
46
46
|
matchtype: 'extension',
|
|
47
|
-
tool: :
|
|
47
|
+
tool: :format_library
|
|
48
48
|
}
|
|
49
49
|
end
|
|
50
50
|
end.cleanup
|
|
@@ -76,7 +76,7 @@ module Libis
|
|
|
76
76
|
# Run command and capture results
|
|
77
77
|
timeout = Libis::Format::Config[:timeouts][:fido]
|
|
78
78
|
result = ::Libis::Tools::Command.run(
|
|
79
|
-
Libis::Format::Config[:
|
|
79
|
+
Libis::Format::Config[:fido_cmd], *args,
|
|
80
80
|
timeout: timeout,
|
|
81
81
|
kill_after: timeout * 2
|
|
82
82
|
)
|
|
@@ -25,7 +25,7 @@ module Libis
|
|
|
25
25
|
|
|
26
26
|
timeout = Libis::Format::Config[:timeouts][:fop]
|
|
27
27
|
result = Libis::Tools::Command.run(
|
|
28
|
-
Libis::Format::Config[:
|
|
28
|
+
Libis::Format::Config[:java_cmd],
|
|
29
29
|
"-Dfop.home=#{File.dirname(Libis::Format::Config[:fop_jar])}",
|
|
30
30
|
'-jar', Libis::Format::Config[:fop_jar],
|
|
31
31
|
'-fo', xml,
|
|
@@ -7,7 +7,7 @@ require 'libis/tools/logger'
|
|
|
7
7
|
require 'libis/tools/command'
|
|
8
8
|
|
|
9
9
|
require 'libis/format/config'
|
|
10
|
-
require 'libis/format/
|
|
10
|
+
require 'libis/format/library'
|
|
11
11
|
|
|
12
12
|
module Libis
|
|
13
13
|
module Format
|
|
@@ -99,7 +99,7 @@ module Libis
|
|
|
99
99
|
end
|
|
100
100
|
|
|
101
101
|
# Normalize the mimetype
|
|
102
|
-
Libis::Format::
|
|
102
|
+
Libis::Format::Library.normalize(result)
|
|
103
103
|
|
|
104
104
|
# Default score is 5
|
|
105
105
|
result[:score] = 5
|
|
@@ -117,14 +117,14 @@ module Libis
|
|
|
117
117
|
# Signature match increases score with 2
|
|
118
118
|
when 'signature'
|
|
119
119
|
result[:score] += 2
|
|
120
|
-
# typeinfo = ::Libis::Format::
|
|
120
|
+
# typeinfo = ::Libis::Format::Library.get_info_by(:puid, result[:puid])
|
|
121
121
|
# ext = File.extname(result[:filename])
|
|
122
122
|
# result[:score] += 1 if typeinfo and typeinfo[:EXTENSIONS].include?(ext)
|
|
123
123
|
|
|
124
124
|
# Container match increases score with 4
|
|
125
125
|
when 'container'
|
|
126
126
|
result[:score] += 4
|
|
127
|
-
# typeinfo = ::Libis::Format::
|
|
127
|
+
# typeinfo = ::Libis::Format::Library.get_info_by(:puid, result[:puid])
|
|
128
128
|
# ext = File.extname(result[:filename])
|
|
129
129
|
# result[:score] += 1 if typeinfo and typeinfo[:EXTENSIONS].include?(ext)
|
|
130
130
|
|
|
@@ -152,11 +152,11 @@ module Libis
|
|
|
152
152
|
end
|
|
153
153
|
|
|
154
154
|
def get_mimetype(puid)
|
|
155
|
-
::Libis::Format::
|
|
155
|
+
::Libis::Format::Library.get_field_by(:puid, puid, :mimetype) rescue nil
|
|
156
156
|
end
|
|
157
157
|
|
|
158
158
|
def get_puid(mimetype)
|
|
159
|
-
::Libis::Format::
|
|
159
|
+
::Libis::Format::Library.get_field_by(:mimetype, mimetype, :puid) rescue nil
|
|
160
160
|
end
|
|
161
161
|
|
|
162
162
|
attr_accessor :bad_mimetypes, :bad_puids
|
|
@@ -33,7 +33,7 @@ module Libis
|
|
|
33
33
|
|
|
34
34
|
timeout = Libis::Format::Config[:timeouts][:office_to_pdf]
|
|
35
35
|
result = Libis::Tools::Command.run(
|
|
36
|
-
Libis::Format::Config[:
|
|
36
|
+
Libis::Format::Config[:soffice_cmd], '--headless',
|
|
37
37
|
"-env:UserInstallation=file://#{workdir}",
|
|
38
38
|
'--convert-to', export_filter,
|
|
39
39
|
'--outdir', workdir, src_file,
|
|
@@ -25,7 +25,7 @@ module Libis
|
|
|
25
25
|
|
|
26
26
|
timeout = Libis::Format::Config[:timeouts][:pdf_copy]
|
|
27
27
|
result = Libis::Tools::Command.run(
|
|
28
|
-
Libis::Format::Config[:
|
|
28
|
+
Libis::Format::Config[:java_cmd],
|
|
29
29
|
'-cp', Libis::Format::Config[:pdf_tool],
|
|
30
30
|
'CopyPdf',
|
|
31
31
|
'--file_input', source,
|
|
@@ -26,7 +26,7 @@ module Libis
|
|
|
26
26
|
|
|
27
27
|
timeout = Libis::Format::Config[:timeouts][:pdf_merge]
|
|
28
28
|
result = Libis::Tools::Command.run(
|
|
29
|
-
Libis::Format::Config[:
|
|
29
|
+
Libis::Format::Config[:java_cmd],
|
|
30
30
|
'-cp', Libis::Format::Config[:pdf_tool],
|
|
31
31
|
'MergePdf',
|
|
32
32
|
'--file_output', target,
|
|
@@ -25,7 +25,7 @@ module Libis
|
|
|
25
25
|
|
|
26
26
|
timeout = Libis::Format::Config[:timeouts][:pdf_split]
|
|
27
27
|
result = Libis::Tools::Command.run(
|
|
28
|
-
Libis::Format::Config[:
|
|
28
|
+
Libis::Format::Config[:java_cmd],
|
|
29
29
|
'-cp', Libis::Format::Config[:pdf_tool],
|
|
30
30
|
'SplitPdf',
|
|
31
31
|
'--file_input', source,
|
|
@@ -39,7 +39,7 @@ module Libis
|
|
|
39
39
|
|
|
40
40
|
timeout = Libis::Format::Config[:timeouts][:pdf_to_pdfa]
|
|
41
41
|
result = Libis::Tools::Command.run(
|
|
42
|
-
Libis::Format::Config[:
|
|
42
|
+
Libis::Format::Config[:ghostscript_cmd],
|
|
43
43
|
'-dBATCH', '-dNOPAUSE', '-dNOOUTERSAVE',
|
|
44
44
|
'-sColorConversionStrategy=/UseDeviceIndependentColor',
|
|
45
45
|
"-sProcessColorModel=#{icc_info[:device]}",
|
|
@@ -53,7 +53,6 @@ module Libis
|
|
|
53
53
|
)
|
|
54
54
|
|
|
55
55
|
raise RuntimeError, "#{self.class} took too long (> #{timeout} seconds) to complete" if result[:timeout]
|
|
56
|
-
raise RuntimeError, "#{self.class} errors: #{result[:err].join("\n")}" unless result[:status] == 0 && result[:err].empty?
|
|
57
56
|
|
|
58
57
|
FileUtils.rm [icc_file, def_filename].compact, force: true
|
|
59
58
|
|
|
@@ -22,7 +22,7 @@ module Libis
|
|
|
22
22
|
src_file = File.absolute_path(source)
|
|
23
23
|
|
|
24
24
|
timeout = Libis::Format::Config[:timeouts][:pdfa_validator]
|
|
25
|
-
if (pdfa = Libis::Format::Config[:
|
|
25
|
+
if (pdfa = Libis::Format::Config[:pdfa_cmd])
|
|
26
26
|
# Keep it clean: tool generates fontconfig/ cache dir in current working dir
|
|
27
27
|
previous_wd = Dir.getwd
|
|
28
28
|
Dir.chdir(Dir.tmpdir)
|
|
@@ -48,16 +48,15 @@ module Libis
|
|
|
48
48
|
return false
|
|
49
49
|
end
|
|
50
50
|
else
|
|
51
|
-
jar =
|
|
51
|
+
jar = Libis::Format::Config[:preflight_jar]
|
|
52
52
|
result = Libis::Tools::Command.run(
|
|
53
|
-
Libis::Format::Config[:
|
|
53
|
+
Libis::Format::Config[:java_cmd],
|
|
54
54
|
'-jar', jar,
|
|
55
55
|
src_file,
|
|
56
56
|
timeout: timeout,
|
|
57
57
|
kill_after: timeout * 2
|
|
58
58
|
)
|
|
59
59
|
raise RuntimeError, "#{self.class} took too long (> #{timeout} seconds) to complete" if result[:timeout]
|
|
60
|
-
raise RuntimeError, "#{self.class} errors: #{result[:err].join("\n")}" unless result[:err].empty?
|
|
61
60
|
|
|
62
61
|
unless result[:status] == 0
|
|
63
62
|
warn "Validator failed to validate the PDF file '%s' against PDF/A-1B constraints:\n%s", source,
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# noinspection RubyResolve
|
|
1
2
|
require 'fileutils'
|
|
2
3
|
|
|
3
4
|
require 'libis/tools/extend/string'
|
|
@@ -34,7 +35,7 @@ module Libis
|
|
|
34
35
|
timeout = Libis::Format::Config[:timeouts][:spreadsheet_to_ods] ||
|
|
35
36
|
Libis::Format::Config[:timeouts][:office_to_pdf]
|
|
36
37
|
result = Libis::Tools::Command.run(
|
|
37
|
-
Libis::Format::Config[:
|
|
38
|
+
Libis::Format::Config[:soffice_cmd], '--headless',
|
|
38
39
|
"-env:UserInstallation=file://#{workdir}",
|
|
39
40
|
'--convert-to', export_filter,
|
|
40
41
|
'--outdir', workdir, src_file,
|