libis-format 0.9.3 → 0.9.4

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
  SHA1:
3
- metadata.gz: d3cd5631909a7f886d895de734e4f3ca542dac4b
4
- data.tar.gz: 80b1a19961bbbd0f1db1bbcfc06f20674b115417
3
+ metadata.gz: 52d5e68539643d115a5666c130f68af4951cf2cf
4
+ data.tar.gz: 231e887b8ef18a2623f7eed16f14ece3ebd304d2
5
5
  SHA512:
6
- metadata.gz: e7dda44c769f213e908745eba06e65d85252c8fbe9b54dd16b61ea9e4ceea2bbaaecf38c2db12c28e0186331fa36ec0a8303f2a5505610b881c90cc8e5e3ee71
7
- data.tar.gz: 2b3df006e9d35f4dc1dd4543790d301a600bb80fabd059bd80b78b1c63f0111430bb3c308f3ef8976a2aa3329b4f1a07bffda79832a5f17a1c8503f989203d28
6
+ metadata.gz: 838b921e071bdbaa16dc140162af0e192551adbc27eca5ce0f7b35ef5f10e01f5beb6822f62a03995310bb77d180bc9f21da5803f72433707358abbeccf01d9e
7
+ data.tar.gz: 2ab0af8ffd4bc2c02e42c7086898101b80558046c5fc20155fa9b5b85ae730b4f559f59c880911449ab0b31c1fee775c43090f2057d2a4861ee4907491dea4fa
@@ -38,8 +38,9 @@ module Libis
38
38
  raise RuntimeError, 'Method #output_types needs to be overridden in converter'
39
39
  end
40
40
 
41
+
41
42
  def using_temp(target)
42
- tempfile = File.join(Dir.tmpdir, Dir::Tmpname.make_tmpname(['convert', File.extname(target)], File.basename(target, '.*')))
43
+ tempfile = File.join(Dir.tmpdir, Dir::Tmpname.make_tmpname(['convert', File.extname(target)], File.basename(target, '.*').gsub(/\s/, '_')))
43
44
  result = yield tempfile
44
45
  return nil unless result
45
46
  FileUtils.move result, target
@@ -4,6 +4,7 @@ require 'fileutils'
4
4
  require 'deep_dive'
5
5
 
6
6
  require 'libis/tools/logger'
7
+ require 'libis/tools/extend/hash'
7
8
  require 'libis/format/type_database'
8
9
 
9
10
  module Libis
@@ -15,9 +16,9 @@ module Libis
15
16
  include DeepDive
16
17
 
17
18
  def initialize(source_format, target_format, operations = {})
18
- @source_format = source_format
19
- @target_format = target_format
20
- @operations = operations
19
+ @source_format = source_format.to_sym
20
+ @target_format = target_format.to_sym
21
+ @operations = operations || {}
21
22
  @converter_chain = []
22
23
  end
23
24
 
@@ -32,8 +33,8 @@ module Libis
32
33
 
33
34
  def closed?
34
35
  !@converter_chain.empty? &&
35
- @converter_chain.first[:input] == @source_format &&
36
- @converter_chain.last[:output] == @target_format
36
+ @converter_chain.first[:input].to_sym == @source_format &&
37
+ @converter_chain.last[:output].to_sym == @target_format
37
38
  end
38
39
 
39
40
  def valid?
@@ -51,21 +52,11 @@ module Libis
51
52
  alias_method :length, :size
52
53
 
53
54
  def to_s
54
- # nodes_string = @converter_chain.map do |node|
55
- # node_name = node[:converter].name.gsub(/^.*::/,'')
56
- # node_operations = '(' + node[:operations].map do |operation|
57
- # op = "#{operation[:method]}:#{operation[:argument]}"
58
- # op
59
- # end.join(', ') + ')' rescue ''
60
- # node_string = "#{node_name}#{node_operations}->-#{node[:output]}"
61
- # node_string
62
- # end.join('->-')
63
- # "#{@source_format}->-#{nodes_string}"
64
55
  "#{@source_format}->-#{@converter_chain.map do |node|
65
- "#{node[:converter].name.gsub(/^.*::/,'')}#{node[:operations] ?
66
- "(#{node[:operations].each { |operation| "#{operation[:method]}:#{operation[:argument]}" }.join(',')})" :
67
- ''
68
- }->-#{node[:output]}"
56
+ "#{node[:converter].name.gsub(/^.*::/, '')}#{node[:operations].empty? ? '' :
57
+ "(#{node[:operations].each do |operation|
58
+ "#{operation[:method]}:#{operation[:argument]}"
59
+ end.join(',')})"}->-#{node[:output]}"
69
60
  end.join('->-')}"
70
61
  end
71
62
 
@@ -87,11 +78,11 @@ module Libis
87
78
 
88
79
  node[:operations].each do |operation|
89
80
  converter.send operation[:method], operation[:argument]
90
- end
81
+ end if node[:operations]
91
82
 
92
83
  target = target_file
93
84
 
94
- if i < size
85
+ if i < size - 1
95
86
  target += ".temp.#{TypeDatabase.type_extentions(target_type).first}"
96
87
  target += ".#{TypeDatabase.type_extentions(target_type).first}" while File.exist? target
97
88
  temp_files << target
@@ -114,7 +105,6 @@ module Libis
114
105
  end
115
106
 
116
107
  def valid_chain_nodes(converter)
117
- return [] if closed?
118
108
  source_format = @converter_chain.last[:output] rescue @source_format
119
109
  nodes = []
120
110
  if converter.input_types.include? source_format
@@ -128,7 +118,6 @@ module Libis
128
118
  end
129
119
 
130
120
  def add_chain_node(node = {})
131
- return nil if closed?
132
121
  last_converter = @converter_chain.last
133
122
  source_format = last_converter ? last_converter[:output] : @source_format
134
123
  node[:input] ||= source_format
@@ -142,12 +131,11 @@ module Libis
142
131
  end
143
132
 
144
133
  def apply_operations
145
- return false unless closed?
146
134
  temp_chain = @converter_chain.reverse.ddup
147
135
  applied = true
148
- operations = @operations.ddup
136
+ operations = @operations && @operations.ddup || {}
149
137
  while (operation = operations.shift)
150
- method = operation.first.to_s.downcase.to_sym
138
+ method = operation.first.to_s.to_sym
151
139
  applied &&= :found == temp_chain.each do |node|
152
140
  next unless node[:converter].instance_methods.include?(method)
153
141
  node[:operations] ||= []
@@ -4,6 +4,7 @@ require_relative 'base'
4
4
  require 'libis/format/identifier'
5
5
 
6
6
  require 'mini_magick'
7
+ require 'fileutils'
7
8
 
8
9
  MiniMagick.configure do |config|
9
10
  config.debug = false
@@ -28,7 +29,7 @@ module Libis
28
29
  super
29
30
  end
30
31
 
31
- def imaginate(_)
32
+ def image_convert(_)
32
33
  #force usage of this converter
33
34
  end
34
35
 
@@ -79,10 +80,10 @@ module Libis
79
80
  def watermark(options = {})
80
81
  text = options[:text] || '© LIBIS'
81
82
  image = options[:file] || (Dir::Tmpname.create(%w(wm_image .png)) { |_|})
82
- @wm_size = (options[:size] || '4').to_int
83
- @wm_opacity = ((options[:opacity] || 0.1).to_f * 100).to_int
83
+ @wm_size = (options[:size] || '4').to_i
84
+ @wm_opacity = ((options[:opacity] || 0.1).to_f * 100).to_i
84
85
  @wm_composition = options[:composition] || 'modulate'
85
- gap = ((options[:gap] || 0.2).to_f * 100).to_int
86
+ gap = ((options[:gap] || 0.2).to_f * 100).to_i
86
87
  rotation = 360 - (options[:rotation] || 30).to_i
87
88
  @wm_image = MiniMagick::Image.new(image)
88
89
  unless @wm_image.valid?
@@ -116,6 +117,8 @@ module Libis
116
117
  def convert(source, target, format, opts = {})
117
118
  super
118
119
 
120
+ FileUtils.mkpath(File.dirname(target))
121
+
119
122
  if source.is_a? Array
120
123
  sources = source
121
124
 
@@ -30,6 +30,10 @@ module Libis
30
30
  [:PDF]
31
31
  end
32
32
 
33
+ def office_convert(_)
34
+ #force usage of this converter
35
+ end
36
+
33
37
  def convert(source, target, format, opts = {})
34
38
  super
35
39
 
@@ -2,6 +2,7 @@
2
2
 
3
3
  require_relative 'base'
4
4
 
5
+ require 'libis/tools/extend/hash'
5
6
  require 'libis/format/pdf_copy'
6
7
  require 'libis/format/pdf_to_pdfa'
7
8
 
@@ -19,6 +20,10 @@ module Libis
19
20
  [:PDF, :PDFA]
20
21
  end
21
22
 
23
+ def pdf_convert(_)
24
+ #force usage of this converter
25
+ end
26
+
22
27
  # Set metadata for Pdf file
23
28
  #
24
29
  # valid metadata keys are):
@@ -30,8 +35,9 @@ module Libis
30
35
  #
31
36
  # @param [Hash] values list of metadata values to set
32
37
  def metadata(values = {})
38
+ values.key_strings_to_symbols!
33
39
  values.each do |k, v|
34
- next unless [:title, :author, :creator, :keywords, :subject].include?(k.to_s.to_sym)
40
+ next unless [:title, :author, :creator, :keywords, :subject].include?(k)
35
41
  @options["md_#{k}"] = v
36
42
  end
37
43
  end
@@ -59,6 +65,7 @@ module Libis
59
65
  #
60
66
  # @param [Hash] options Hash of options for watermark creation.
61
67
  def watermark(options = {})
68
+ options.key_strings_to_symbols!
62
69
  if options[:file] && File.exist?(options[:file])
63
70
  @options['wm_image'] = options[:file]
64
71
  else
@@ -66,7 +73,7 @@ module Libis
66
73
  @options['wm_text_rotation'] = options[:rotation] if options[:rotation]
67
74
  @options['wm_font_size'] = options[:size] if options[:size]
68
75
  end
69
- @options['wm_opacity'] = options[:opacity]
76
+ @options['wm_opacity'] = options[:opacity] || '0.3'
70
77
  @options['wm_gap_ratio'] = options[:gap] if options[:gap].to_s =~ /^\s*(0+\.\d+|1\.0+)\s*$/
71
78
  @options['wm_gap_size'] = options[:gap] if options[:gap].to_s =~ /^\s*\d+\s*$/
72
79
  end
@@ -77,7 +84,7 @@ module Libis
77
84
  result = nil
78
85
 
79
86
  unless @options.empty?
80
- result = convert_pdf(source, target)
87
+ result = convert_pdf(source, target)
81
88
  return nil unless result
82
89
  source = result
83
90
  end
@@ -93,13 +100,35 @@ module Libis
93
100
 
94
101
  def convert_pdf(source, target)
95
102
 
96
- using_temp(target) { |tmpname| Libis::Format::PdfCopy.run source, tmpname, @options.map { |k, v| ["--#{k}", v.to_s] }.flatten }
103
+ using_temp(target) do |tmpname|
104
+ result = Libis::Format::PdfCopy.run(
105
+ source, tmpname,
106
+ @options.map { |k, v|
107
+ if v.nil?
108
+ nil
109
+ else
110
+ ["--#{k}", (v.is_a?(Array) ? v : v.to_s)]
111
+ end }.flatten
112
+ )
113
+ result[:err].empty? ? target : begin
114
+ error("Pdf conversion encountered errors:\n%s", result[:err].join('\n'))
115
+ nil
116
+ end
117
+ tmpname
118
+ end
97
119
 
98
120
  end
99
121
 
100
122
  def pdf_to_pdfa(source, target)
101
123
 
102
- using_temp(target) { |tmpname| Libis::Format::PdfToPdfa.run source, tmpname }
124
+ using_temp(target) do |tmpname|
125
+ result = Libis::Format::PdfToPdfa.run source, tmpname
126
+ result[:status] == 0 ? target : begin
127
+ error("Pdf/A conversion encountered errors:\n%s", result[:err].join('\n'))
128
+ nil
129
+ end
130
+ tmpname
131
+ end
103
132
 
104
133
  end
105
134
 
@@ -49,16 +49,16 @@ module Libis
49
49
  def get_converter_chain(src_type, tgt_type, operations = {})
50
50
  msg = "conversion from #{src_type.to_s} to #{tgt_type.to_s}"
51
51
  chain_list = find_chains src_type, tgt_type, operations
52
- if chain_list.length > 1
53
- warn "Found more than one conversion chain for #{msg}. Picking the first one."
54
- end
52
+ # if chain_list.length > 1
53
+ # warn "Found more than one conversion chain for #{msg}. Picking the first one."
54
+ # end
55
55
  if chain_list.empty?
56
56
  error "No conversion chain found for #{msg}"
57
57
  return nil
58
58
  end
59
- chain_list.each do |chain|
60
- debug "Matched chain: #{chain}"
61
- end
59
+ # chain_list.each do |chain|
60
+ # debug "Matched chain: #{chain}"
61
+ # end
62
62
  chain_list[0]
63
63
  end
64
64
 
@@ -19,30 +19,20 @@ module Libis
19
19
  def run(source, target, options = [])
20
20
  tool_dir = File.absolute_path(File.join(File.dirname(__FILE__), '..', '..', '..', 'tools'))
21
21
  jar_file = File.join(tool_dir, 'PdfTool.jar')
22
+
22
23
  if OS.java?
23
- # TODO: import library and execute in current VM. For now do exactly as in MRI
24
- result = Libis::Tools::Command.run(
25
- Libis::Format::Config[:java_path],
26
- '-jar', jar_file,
27
- 'CopyPdf',
28
- '--file_input', source,
29
- '--file_output', target,
30
- *options
31
- )
32
- warn "PdfCopy errors: #{result[:err].join("\n")}" unless result[:status] == 0
33
- result[:out]
34
- else
35
- result = Libis::Tools::Command.run(
36
- Libis::Format::Config[:java_path],
37
- '-jar', jar_file,
38
- 'CopyPdf',
39
- '--file_input', source,
40
- '--file_output', target,
41
- *options
42
- )
43
- warn "PdfCopy errors: #{result[:err].join("\n")}" unless result[:status] == 0
44
- result[:out]
24
+ # TODO: import library and execute in current VM. For now do exactly as in MRI.
45
25
  end
26
+
27
+ Libis::Tools::Command.run(
28
+ Libis::Format::Config[:java_path],
29
+ '-cp', jar_file,
30
+ 'CopyPdf',
31
+ '--file_input', source,
32
+ '--file_output', target,
33
+ *options
34
+ )
35
+
46
36
  end
47
37
  end
48
38
 
@@ -0,0 +1,41 @@
1
+ require 'os'
2
+
3
+ require 'libis/tools/extend/string'
4
+ require 'libis/tools/logger'
5
+ require 'libis/tools/command'
6
+
7
+ require 'libis/format/config'
8
+
9
+ module Libis
10
+ module Format
11
+
12
+ class PdfMerge
13
+ include ::Libis::Tools::Logger
14
+
15
+ def self.run(source, target, options = [])
16
+ self.new.run source, target, options
17
+ end
18
+
19
+ def run(source, target, options = [])
20
+ tool_dir = File.absolute_path(File.join(File.dirname(__FILE__), '..', '..', '..', 'tools'))
21
+ jar_file = File.join(tool_dir, 'PdfTool.jar')
22
+ source = [source] unless source.is_a?(Array)
23
+
24
+ if OS.java?
25
+ # TODO: import library and execute in current VM. For now do exactly as in MRI.
26
+ end
27
+
28
+ Libis::Tools::Command.run(
29
+ Libis::Format::Config[:java_path],
30
+ '-cp', jar_file,
31
+ 'MergePdf',
32
+ '--file_output', target,
33
+ *options,
34
+ *source,
35
+ )
36
+
37
+ end
38
+ end
39
+
40
+ end
41
+ end
@@ -0,0 +1,39 @@
1
+ require 'os'
2
+
3
+ require 'libis/tools/extend/string'
4
+ require 'libis/tools/logger'
5
+ require 'libis/tools/command'
6
+
7
+ require 'libis/format/config'
8
+
9
+ module Libis
10
+ module Format
11
+
12
+ class PdfSplit
13
+ include ::Libis::Tools::Logger
14
+
15
+ def self.run(source, target, options = [])
16
+ self.new.run source, target, options
17
+ end
18
+
19
+ def run(source, target, options = [])
20
+ tool_dir = File.absolute_path(File.join(File.dirname(__FILE__), '..', '..', '..', 'tools'))
21
+ jar_file = File.join(tool_dir, 'PdfTool.jar')
22
+ if OS.java?
23
+ # TODO: import library and execute in current VM. For now do exactly as in MRI.
24
+ end
25
+
26
+ Libis::Tools::Command.run(
27
+ Libis::Format::Config[:java_path],
28
+ '-cp', jar_file,
29
+ 'SplitPdf',
30
+ '--file_input', source,
31
+ '--file_output', target,
32
+ *options
33
+ )
34
+
35
+ end
36
+ end
37
+
38
+ end
39
+ end
@@ -49,16 +49,13 @@ module Libis
49
49
  )
50
50
 
51
51
  FileUtils.rm [icc_file, def_filename].compact, force: true
52
- unless result[:status] == 0
53
- warn (['Pdf2PdfA errors:'] + result[:err] + result[:out]).join("\n").gsub('%', '%%')
54
- end
55
52
 
56
53
  unless PdfaValidator.run(target)
57
- error "Failed to generate correct PDF/A file from '%s'", source
58
- return nil
54
+ result[:status] = -999
55
+ result[:err] << 'Failed to validate generated PDF/A file.'
59
56
  end
60
57
 
61
- target
58
+ result
62
59
  end
63
60
 
64
61
 
@@ -1,5 +1,5 @@
1
1
  module Libis
2
2
  module Format
3
- VERSION = '0.9.3'
3
+ VERSION = '0.9.4'
4
4
  end
5
5
  end
data/lib/libis/format.rb CHANGED
@@ -9,6 +9,8 @@ module Libis
9
9
  autoload :Droid, 'libis/format/droid'
10
10
  autoload :OfficeToPdf, 'libis/format/office_to_pdf'
11
11
  autoload :PdfCopy, 'libis/format/pdf_copy'
12
+ autoload :PdfMerge, 'libis/format/pdf_merge'
13
+ autoload :PdfSplit, 'libis/format/pdf_split'
12
14
  autoload :PdfToPdfa, 'libis/format/pdf_to_pdfa'
13
15
  autoload :PdfaValidator, 'libis/format/pdfa_validator'
14
16
 
data/tools/PdfTool.jar CHANGED
Binary file
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: 0.9.3
4
+ version: 0.9.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kris Dekeyser
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-07 00:00:00.000000000 Z
11
+ date: 2015-12-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -164,6 +164,8 @@ files:
164
164
  - lib/libis/format/identifier.rb
165
165
  - lib/libis/format/office_to_pdf.rb
166
166
  - lib/libis/format/pdf_copy.rb
167
+ - lib/libis/format/pdf_merge.rb
168
+ - lib/libis/format/pdf_split.rb
167
169
  - lib/libis/format/pdf_to_pdfa.rb
168
170
  - lib/libis/format/pdfa_validator.rb
169
171
  - lib/libis/format/type_database.rb
@@ -202,6 +204,8 @@ files:
202
204
  - spec/test_types.yml
203
205
  - spec/type_database_spec.rb
204
206
  - tools/PdfTool.jar
207
+ - tools/bcpkix-jdk15on-1.49.jar
208
+ - tools/bcprov-jdk15on-1.49.jar
205
209
  - tools/droid/DROID_SignatureFile_V82.xml
206
210
  - tools/droid/container-signature-20150307.xml
207
211
  - tools/droid/droid-command-line-6.1.5.jar
@@ -354,7 +358,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
354
358
  version: '0'
355
359
  requirements: []
356
360
  rubyforge_project:
357
- rubygems_version: 2.5.0
361
+ rubygems_version: 2.2.2
358
362
  signing_key:
359
363
  specification_version: 4
360
364
  summary: LIBIS File format format services.