J'utilise Windows Web Server 2008 avec ruby, PDFCreator, Microsoft Office et OpenOffice pour convertir automatiquement des fichiers au format PDF. La configuration fonctionne bien pour les fichiers Microsoft Office, mais je n'ai pas réussi à le faire fonctionner automatiquement avec les fichiers OpenOffice (par exemple .sxw). PDFCreator est capable de convertir des fichiers .sxw sans problème quand je le fais manuellement mais jette l'erreur suivante quand je l'essaie avec mon script ruby ci-dessous.PDFCreator avec des fichiers OpenOffice
Erreur: 1 Description: Le serveur ActiveX n'a pas été démarré! Veuillez utiliser la fonction \ "cStart() \" pour démarrer le serveur ActiveX!
def convert(filename, data)
require 'win32ole'
dirpath = File.join('/', 'files')
filepath = File.join(dirpath, filename)
puts filepath
filepath_out = File.join(dirpath, 'output.pdf')
begin
File.open(filepath, 'wb+') { |f| f.write(data) }
puts File.exists?(filepath).inspect
pdfcreator = WIN32OLE.new('PDFCreator.clsPDFCreator')
event = WIN32OLE_EVENT.new(pdfcreator)
event.on_event('eReady') do
File.open(filepath_out, 'rb') { |f| update_attribute(:data_converted, f.read) }
$printed = true
end
event.on_event('eError') do
pdfcreator.cClose()
raise 'error'
end
if !pdfcreator.cIsPrintable(filepath)
raise 'error'
end
pdfcreator.cStart('/NoProcessingAtStartup')
pdfcreator.setproperty('cOption', 'UseAutosave', 1)
pdfcreator.setproperty('cOption', 'UseAutosaveDirectory', 1)
pdfcreator.setproperty('cOption', 'AutosaveFormat', 0)
pdfcreator.setproperty('cDefaultprinter', 'PDFCreator')
pdfcreator.cClearCache()
pdfcreator.setproperty('cPrinterStop', false)
pdfcreator.setproperty('cOption', 'AutosaveDirectory', File.dirname(filepath_out))
pdfcreator.setproperty('cOption', 'AutosaveFilename', File.basename(filepath_out))
$printed = false
pdfcreator.cPrintfile("C:\\files" + File.basename(filepath))
started_at = Time.new
loop {
pdfcreator.cOption('UseAutosave') # noop to get ready event
break if $printed
if (Time.new - started_at)>TIMEOUT
raise 'timeout'
end
sleep 0.5
}
rescue => e
raise e
ensure
begin
pdfcreator.cClearCache()
pdfcreator.cClose()
rescue
end
begin
File.delete(filepath) if File.exists?(filepath)
File.delete(filepath_out) if File.exists?(filepath_out)
rescue
end
end
Des idées?
Merci, Peder