libis-format 0.9.13 → 0.9.15

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 019ddfce4675d6d38783c6660d1bfe6a060831a2
4
- data.tar.gz: b1cca1a4b069a4b8fe432647bfcde9175381d2fe
3
+ metadata.gz: f27604dfcb12343adb31e0271fe67c30b5065e89
4
+ data.tar.gz: ff414f39d8bf27a8656cf7d3e2911df1c8d3cd71
5
5
  SHA512:
6
- metadata.gz: 8609acb249e63d87942bee8a559a9d8040407e4acbd22e5b2140c3c62b6457c6551cc3ce91aadae289ba69b94b6e3fb66cbb04fa78adfe9cf4d4c6bd5208c2a5
7
- data.tar.gz: 3e0ad2b766de7bbee4f0a547b6b210f5a63b5b9b9c5d424358d6bdc66ff249be645bc338e3a422100bf1bc5e814cb817d4c22bd06c2e152521a13cdf36d95945
6
+ metadata.gz: 28fb1119f9857c7a2bda2907303c6f044f5506eef371886f24b9a229ef1bbdf5a5a98ed82289b3eedbd590b0de55d8c9eb08f02ced77a2ef5bdcab85d9b4361c
7
+ data.tar.gz: cdca98eefb60e202e0dfa5c9ed6d16e9c63e5ba1127907cd34bf8b198a9b1628b340482fe6bc20c753659c1f9ea6e8842aad5016abc0dfc596d11bfa421cbb7e
@@ -6,7 +6,7 @@ require 'libis/format/identifier'
6
6
  require 'mini_magick'
7
7
  require 'fileutils'
8
8
 
9
- MiniMagick.logger.level = ::Logger::WARN
9
+ MiniMagick.logger.level = ::Logger::ERROR
10
10
 
11
11
  module Libis
12
12
  module Format
@@ -88,6 +88,7 @@ module Libis
88
88
  # noinspection RubyResolve
89
89
  MiniMagick::Tool::Convert.new do |convert|
90
90
  # noinspection RubyLiteralArrayInspection
91
+ convert.quiet
91
92
  convert.background 'transparent'
92
93
  convert.size('2000x2000')
93
94
  convert.gravity 'Center'
@@ -5,6 +5,7 @@ require_relative 'base'
5
5
  require 'libis/tools/extend/hash'
6
6
  require 'libis/format/pdf_copy'
7
7
  require 'libis/format/pdf_to_pdfa'
8
+ require 'libis/format/pdf_optimizer'
8
9
 
9
10
  module Libis
10
11
  module Format
@@ -78,12 +79,37 @@ module Libis
78
79
  @options['wm_gap_size'] = options[:gap] if options[:gap].to_s =~ /^\s*\d+\s*$/
79
80
  end
80
81
 
82
+ # Optimize the PDF
83
+ #
84
+ # This reduces the graphics quality to a level in order to limit file size. This option relies on the
85
+ # presence of ghostscript and takes one argument: the quality level. It should be one of:
86
+ #
87
+ # - 0 : lowest quality (Acrobat Distiller 'Screen Optimized' equivalent)
88
+ # - 1 : medium quality (Acrobat Distiller 'eBook' equivalent)
89
+ # - 2 : good quality
90
+ # - 3 : high quality (Acrobat Distiller 'Print Optimized' equivalent)
91
+ # - 4 : highest quality (Acrobat Distiller 'Prepress Optimized' equivalent)
92
+ #
93
+ # Note that the optimization is intended to be used with PDF's containing high-resolution images.
94
+ #
95
+ # @param [Integer] setting quality setting. [0-4]
96
+ def optimize(setting = 1)
97
+ @options['optimize'] = %w(screen ebook default printer prepress)[setting] if (0..4) === setting
98
+ end
99
+
81
100
  def convert(source, target, format, opts = {})
82
101
  super
83
102
 
84
103
  result = nil
85
104
 
86
105
  unless @options.empty?
106
+
107
+ if (quality = @options.delete('optimize'))
108
+ result = optimize_pdf(source, target, quality)
109
+ return nil unless result
110
+ source = result
111
+ end
112
+
87
113
  result = convert_pdf(source, target)
88
114
  return nil unless result
89
115
  source = result
@@ -97,6 +123,17 @@ module Libis
97
123
 
98
124
  end
99
125
 
126
+ def optimize_pdf(source, target, quality)
127
+
128
+ using_temp(target) do |tmpname|
129
+ result = Libis::Format::PdfOptimizer.run(source, tmpname, quality)
130
+ unless result[:err].empty?
131
+ error("Pdf optimization encountered errors:\n%s", (result[:err] + result[:out]).join('\n'))
132
+ next nil
133
+ end
134
+ tmpname
135
+ end
136
+ end
100
137
 
101
138
  def convert_pdf(source, target)
102
139
 
@@ -110,9 +147,9 @@ module Libis
110
147
  ["--#{k}", (v.is_a?(Array) ? v : v.to_s)]
111
148
  end }.flatten
112
149
  )
113
- result[:err].empty? ? target : begin
150
+ unless result[:err].empty?
114
151
  error("Pdf conversion encountered errors:\n%s", result[:err].join('\n'))
115
- nil
152
+ next nil
116
153
  end
117
154
  tmpname
118
155
  end
@@ -123,9 +160,9 @@ module Libis
123
160
 
124
161
  using_temp(target) do |tmpname|
125
162
  result = Libis::Format::PdfToPdfa.run source, tmpname
126
- result[:status] == 0 ? target : begin
163
+ unless result[:status] == 0
127
164
  error("Pdf/A conversion encountered errors:\n%s", result[:err].join('\n'))
128
- nil
165
+ next nil
129
166
  end
130
167
  tmpname
131
168
  end
@@ -0,0 +1,36 @@
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 PdfOptimizer
13
+ include ::Libis::Tools::Logger
14
+
15
+ def self.run(source, target, quality)
16
+ self.new.run source, target, quality
17
+ end
18
+
19
+ def run(source, target, quality)
20
+
21
+ Libis::Tools::Command.run(
22
+ 'gs',
23
+ '-sDEVICE=prdfwrite',
24
+ '-dCompatibilityLevel=1.4',
25
+ "dPDFSETTINGS=/#{quality}",
26
+ '-dNOPAUSE',
27
+ '-dBATCH',
28
+ "-sOutputFile='#{target}'",
29
+ "'#{source}'"
30
+ )
31
+
32
+ end
33
+ end
34
+
35
+ end
36
+ end
@@ -1,5 +1,5 @@
1
1
  module Libis
2
2
  module Format
3
- VERSION = '0.9.13'
3
+ VERSION = '0.9.15'
4
4
  end
5
5
  end
data/lib/libis/format.rb CHANGED
@@ -5,11 +5,14 @@ module Libis
5
5
  autoload :Config, 'libis/format/config'
6
6
  autoload :TypeDatabase, 'libis/format/type_database'
7
7
  autoload :Identifier, 'libis/format/identifier'
8
+
8
9
  autoload :Fido, 'libis/format/fido'
9
10
  autoload :Droid, 'libis/format/droid'
11
+
10
12
  autoload :OfficeToPdf, 'libis/format/office_to_pdf'
11
13
  autoload :PdfCopy, 'libis/format/pdf_copy'
12
14
  autoload :PdfMerge, 'libis/format/pdf_merge'
15
+ autoload :PdfOptimizer, 'libis/format/pdf_optimizer'
13
16
  autoload :PdfSplit, 'libis/format/pdf_split'
14
17
  autoload :PdfToPdfa, 'libis/format/pdf_to_pdfa'
15
18
  autoload :PdfaValidator, 'libis/format/pdfa_validator'
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.13
4
+ version: 0.9.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kris Dekeyser
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-24 00:00:00.000000000 Z
11
+ date: 2016-04-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -166,6 +166,7 @@ files:
166
166
  - lib/libis/format/office_to_pdf.rb
167
167
  - lib/libis/format/pdf_copy.rb
168
168
  - lib/libis/format/pdf_merge.rb
169
+ - lib/libis/format/pdf_optimizer.rb
169
170
  - lib/libis/format/pdf_split.rb
170
171
  - lib/libis/format/pdf_to_pdfa.rb
171
172
  - lib/libis/format/pdfa_validator.rb