Class: Asciidoctor::PDF::Optimizer::RGhost

Inherits:
Base show all
Defined in:
lib/asciidoctor/pdf/optimizer/rghost.rb

Constant Summary collapse

DEFAULT_PARAMS =
%w(gs -dNOPAUSE -dBATCH -dQUIET -dNOPAGEPROMPT)

Instance Attribute Summary

Attributes included from Asciidoctor::PDF::Optimizer

#compatibility_level, #compliance, #quality

Instance Method Summary collapse

Methods included from Factory

#for, #register

Constructor Details

#initialize(*_args) ⇒ RGhost

Returns a new instance of RGhost.



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/asciidoctor/pdf/optimizer/rghost.rb', line 51

def initialize *_args
  super
  if @quality&.include? ':'
    @quality, @color_mode = @quality.split ':', 2
  else
    @color_mode = nil
  end
  if (gs_path = ::ENV['GS'])
    ::RGhost::Config::GS[:path] = gs_path
  end
  @newpdf = false
  default_params = DEFAULT_PARAMS.drop 0
  if (user_params = ::ENV['GS_OPTIONS'])
    (default_params += user_params.split).uniq!
    @newpdf = nil if default_params.find {|it| it.start_with? '-dNEWPDF=' }
  end
  ::RGhost::Config::GS[:default_params] = default_params
end

Instance Method Details

#optimize_file(target) ⇒ Object



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/asciidoctor/pdf/optimizer/rghost.rb', line 70

def optimize_file target
  ::Dir::Tmpname.create ['asciidoctor-pdf-', '.pdf'] do |tmpfile|
    filename_o = ::Pathname.new target
    filename_tmp = ::Pathname.new tmpfile
    if (pdfmark = filename_o.sub_ext '.pdfmark').file?
      inputs = [target, pdfmark.to_s].join ::File::PATH_SEPARATOR
    else
      inputs = target
    end
    d = { Printed: false, CannotEmbedFontPolicy: '/Warning', CompatibilityLevel: @compatibility_level }
    d[:NEWPDF] = @newpdf unless @newpdf.nil?
    case @compliance
    when 'PDF/A', 'PDF/A-1', 'PDF/A-2', 'PDF/A-3'
      d[:PDFA] = ((@compliance.split '-', 2)[1] || 1).to_i
      d[:ShowAnnots] = false
    when 'PDF/X', 'PDF/X-1', 'PDF/X-3'
      d[:PDFX] = true
      d[:ShowAnnots] = false
    end
    case @color_mode
    when 'gray', 'grayscale'
      s = { ColorConversionStrategy: 'Gray' }
    when 'bw'
      d[:BlackText] = true
      s = { ColorConversionStrategy: 'Gray' }
    end
    (::RGhost::Convert.new inputs).to :pdf, filename: filename_tmp.to_s, quality: QUALITY_NAMES[@quality], d: d, s: s
    filename_o.binwrite filename_tmp.binread
  end
  nil
end