21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
# File 'lib/libis/format/pdf_to_pdfa.rb', line 21
def run(source, target = nil, options = nil)
target ||= File.join(Dir.tmpdir, Dir::Tmpname.make_tmpname([File.basename(source, '.*'), '.pdf']))
data_dir = File.absolute_path(File.join(File.dirname(__FILE__), '..', '..', '..', 'data'))
icc_info = icc_options(options[:colorspace])
icc_file = File.join(Dir.tmpdir, "#{icc_info[:icc_name]}#{Random.new.bytes(12).unpack('H*').first}.icc")
FileUtils.cp(File.join(data_dir, "#{icc_info[:icc_name]}.icc"), icc_file)
def_filename = File.join(Dir.tmpdir, "PDFA_def_#{Random.new.bytes(12).unpack('H*').first}.ps")
File.open(def_filename, 'w') do |f|
f.puts File.read(File.join(Libis::Format::DATA_DIR, 'PDFA_def.ps')).
gsub('[** Fill in ICC profile location **]', icc_file).
gsub('[** Fill in ICC reference name **]', icc_info[:icc_ref])
end
result = Libis::Tools::Command.run(
Libis::Format::Config[:ghostscript_path],
'-dBATCH', '-dNOPAUSE', '-dNOOUTERSAVE',
'-sColorConversionStrategy=/UseDeviceIndependentColor',
"-sProcessColorModel=#{icc_info[:device]}",
'-sDEVICE=pdfwrite', '-dPDFA', '-dPDFACompatibilityPolicy=1',
"-sOutputICCProfile=#{icc_file}",
'-o', File.absolute_path(target),
def_filename,
source
)
FileUtils.rm [icc_file, def_filename].compact, force: true
unless PdfaValidator.run(target)
result[:status] = -999
result[:err] << 'Failed to validate generated PDF/A file.'
end
result
end
|