Class: Libis::Format::Converter::PdfConverter
- Defined in:
- lib/libis/format/converter/pdf_converter.rb
Instance Attribute Summary
Attributes inherited from Base
Class Method Summary collapse
Instance Method Summary collapse
- #convert(source, target, format, opts = {}) ⇒ Object
- #convert_pdf(source, target) ⇒ Object
-
#metadata(values = {}) ⇒ Object
Set metadata for Pdf file.
-
#optimize(setting = 1) ⇒ Object
Optimize the PDF.
- #optimize_pdf(source, target, quality) ⇒ Object
- #pdf_convert(_) ⇒ Object
- #pdf_to_pdfa(source, target) ⇒ Object
-
#range(selection) ⇒ Object
Select a partial list of pages.
-
#watermark(options = {}) ⇒ Object
Create or use a watermark image.
Methods inherited from Base
inherited, #initialize, #using_temp, using_temp
Constructor Details
This class inherits a constructor from Libis::Format::Converter::Base
Class Method Details
.input_types ⇒ Object
16 17 18 |
# File 'lib/libis/format/converter/pdf_converter.rb', line 16 def self.input_types [:PDF] end |
.output_types(format = nil) ⇒ Object
20 21 22 23 |
# File 'lib/libis/format/converter/pdf_converter.rb', line 20 def self.output_types(format = nil) return [] unless input_types.include?(format) [:PDF, :PDFA] end |
Instance Method Details
#convert(source, target, format, opts = {}) ⇒ Object
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
# File 'lib/libis/format/converter/pdf_converter.rb', line 101 def convert(source, target, format, opts = {}) super result = nil if (quality = @options.delete('optimize')) result = optimize_pdf(source, target, quality) return nil unless result source = result end unless @options.empty? result = convert_pdf(source, target) return nil unless result source = result end if format == :PDFA and source result = pdf_to_pdfa(source, target) end result end |
#convert_pdf(source, target) ⇒ Object
138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
# File 'lib/libis/format/converter/pdf_converter.rb', line 138 def convert_pdf(source, target) using_temp(target) do |tmpname| result = Libis::Format::PdfCopy.run( source, tmpname, @options.map { |k, v| if v.nil? nil else ["--#{k}", (v.is_a?(Array) ? v : v.to_s)] end }.flatten ) unless result[:err].empty? error("Pdf conversion encountered errors:\n%s", result[:err].join('\n')) next nil end tmpname end end |
#metadata(values = {}) ⇒ Object
Set metadata for Pdf file
valid metadata keys are):
- title
-
- creator
- keywords
- subject
39 40 41 42 43 44 45 |
# File 'lib/libis/format/converter/pdf_converter.rb', line 39 def (values = {}) values.key_strings_to_symbols! values.each do |k, v| next unless [:title, :author, :creator, :keywords, :subject].include?(k) @options["md_#{k}"] = v end end |
#optimize(setting = 1) ⇒ Object
Optimize the PDF
This reduces the graphics quality to a level in order to limit file size. This option relies on the presence of ghostscript and takes one argument: the quality level. It should be one of:
-
0 : lowest quality (Acrobat Distiller ‘Screen Optimized’ equivalent)
-
1 : medium quality (Acrobat Distiller ‘eBook’ equivalent)
-
2 : good quality
-
3 : high quality (Acrobat Distiller ‘Print Optimized’ equivalent)
-
4 : highest quality (Acrobat Distiller ‘Prepress Optimized’ equivalent)
Note that the optimization is intended to be used with PDF’s containing high-resolution images.
97 98 99 |
# File 'lib/libis/format/converter/pdf_converter.rb', line 97 def optimize(setting = 1) @options['optimize'] = %w(screen ebook default printer prepress)[setting] if (0..4) === setting end |
#optimize_pdf(source, target, quality) ⇒ Object
126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/libis/format/converter/pdf_converter.rb', line 126 def optimize_pdf(source, target, quality) using_temp(target) do |tmpname| result = Libis::Format::PdfOptimizer.run(source, tmpname, quality) unless result[:status] == 0 error("Pdf optimization encountered errors:\n%s", (result[:err] + result[:out]).join('\n')) next nil end tmpname end end |
#pdf_convert(_) ⇒ Object
25 26 27 |
# File 'lib/libis/format/converter/pdf_converter.rb', line 25 def pdf_convert(_) #force usage of this converter end |
#pdf_to_pdfa(source, target) ⇒ Object
159 160 161 162 163 164 165 166 167 168 169 170 |
# File 'lib/libis/format/converter/pdf_converter.rb', line 159 def pdf_to_pdfa(source, target) using_temp(target) do |tmpname| result = Libis::Format::PdfToPdfa.run source, tmpname unless result[:status] == 0 error("Pdf/A conversion encountered errors:\n%s", result[:err].join('\n')) next nil end tmpname end end |
#range(selection) ⇒ Object
Select a partial list of pages
49 50 51 |
# File 'lib/libis/format/converter/pdf_converter.rb', line 49 def range(selection) @options[:ranges] = selection end |
#watermark(options = {}) ⇒ Object
Create or use a watermark image.
The watermark options are (use symbols):
- text: text to create a watermark from
- file: watermark image to use
- rotation: rotation of the watermark text (in degrees; integer number)
- size: font size of the watermark text
- opacity: opacity of the watermark (fraction 0.0 - 1.0)
- gap: size of the gap between watermark instances. Integer value is absolute size in points (1/72 inch). Fractions are percentage of widht/height.
If both options are given, the file will be used as-is if it exists and is a valid image file. Otherwise the file will be created or overwritten with a newly created watermark image.
The created watermark file will be a PNG image with transparent background containing the supplied text slanted by 30 degrees counter-clockwise.
69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/libis/format/converter/pdf_converter.rb', line 69 def watermark( = {}) .key_strings_to_symbols! if [:file] && File.exist?([:file]) @options['wm_image'] = [:file] else @options['wm_text'] = ([:text] || '© LIBIS').split('\n') @options['wm_text_rotation'] = [:rotation] if [:rotation] @options['wm_font_size'] = [:size] if [:size] end @options['wm_opacity'] = [:opacity] || '0.3' @options['wm_gap_ratio'] = [:gap] if [:gap].to_s =~ /^\s*(0+\.\d+|1\.0+)\s*$/ @options['wm_gap_size'] = [:gap] if [:gap].to_s =~ /^\s*\d+\s*$/ end |