2009/01/30

Pasar archivos de openoffice a pdf automáticamente

Una de las grandes comodidades de openoffice es poder contar con un botón que pase los documentos a PDF con un simple click. Pero si tienes muchos documentos y todos los quieres pasar a pdf, el hecho de abrirlos uno a uno y pulsar ese botón puede resultar laborioso.

Buscando alguna solución mágica del tipo "openoffice2pdf" o "odt2pdf", encontré el siguiente enlace
http://www.oooforum.org/forum/viewtopic.phtml?p=61967#61967 donde se ofrece una macro que hace justamente eso.

Los pasos para poder usarlo son los siguientes:
  • Abrir openoffice e ir a Herramientas->Macros->Organizar->Basic
  • Crear una nueva y copiar el siguiente código
Sub ExportAsPDF(strFile as string)
Dim oDoc
Dim strFilterSubName as String
Dim oLoadArgs(0) as New com.sun.star.beans.PropertyValue

oLoadArgs(0).Name = "Hidden"
oLoadArgs(0).Value = True

oDoc = StarDesktop.loadComponentFromURL(ConvertToUrl(strFile), "_blank", 0, oLoadArgs())
If IsNull(oDoc) Then Exit Sub

strFilterSubName = ""
' select appropriate filter
If oDoc.SupportsService("com.sun.star.presentation.PresentationDocument") Then
strFilterSubName = "impress_pdf_Export"
ElseIf oDoc.SupportsService("com.sun.star.sheet.SpreadsheetDocument") Then
strFilterSubName = "calc_pdf_Export"
ElseIf oDoc.SupportsService("com.sun.star.text.WebDocument") Then
strFilterSubName = "writer_web_pdf_Export"
ElseIf oDoc.SupportsService("com.sun.star.text.GlobalDocument") Then
strFilterSubName = "writer_globaldocument_pdf_Export"
ElseIf oDoc.SupportsService("com.sun.star.text.TextDocument") Then
strFilterSubName = "writer_pdf_Export"
ElseIf oDoc.SupportsService("com.sun.star.drawing.DrawingDocument") Then
strFilterSubName = "draw_pdf_Export"
ElseIf oDoc.SupportsService("com.sun.star.formula.FormulaProperties") Then
strFilterSubName = "math_pdf_Export"
ElseIf oDoc.SupportsService("com.sun.star.chart.ChartDocument") Then
strFilterSubName = "chart_pdf_Export"
Else
Exit Sub
EndIf

Dim oSaveArgs(1) as New com.sun.star.beans.PropertyValue
oSaveArgs(0).Name = "FilterName"
oSaveArgs(0).Value = strFilterSubName

oSaveArgs(1).Name = "CompressMode"
oSaveArgs(1).Value = "1"

oDoc.storeToUrl(ConvertToUrl( strFile & ".pdf" ), oSaveArgs())
oDoc.close(True)
End Sub
  • Guardar la macro
  • Llamar a openoffice desde línea de comandos con la siguiente instrucción:

    $openoffice.org3 "macro:///Standard.Module1.ExportAsPDF(pathCompleto/archivo.odt)"
Esto genera un archivo con nombre "miarchivo.odt.pdf" en la misma carpeta que el archivo origen. Y con esto... ya podemos crear un script que nos exporte a PDF de forma masiva!!!