iQuarK / 81 entradas / 51 comentarios / feed / comentarios feed Buscar:

Convertir a PDF con OpenOffice desde línea de comandos

Cuando se tiene un servidor web que tenga que realizar conversiones a formato PDF, desde otros como documentos de Microsoft Office: Word, PowerPoint… o de OpenOffice: Writer, SpreadSheet… sin usar una API, se puede conseguir desde una llamada a la línea de comando, ejecutandolo desde un script en PHP, Ruby, Python, Perl, un código en Java o cualquier otro que se utilice.

Para ello debemos tener instalado el OpenOffice y crearle una macro, cosa que paso a explicaros a continuación.

Tenemos que ejecutar el OpenOffice, ir a Herramientas->Organizar Macros->OpenOffice.org Basic, en Mis macros->Standard->Module1 le damos a Editar, pegamos el siguiente código a continuación de lo que haya (es un código que encontré por la web):

SUB ConvertWordToPDF(cFile)
	cURL = ConvertToURL(cFile) ' Open the document.
				' Just blindly assume that the document is
				' of a type that OOo will
				' correctly recognize and open -- without
				' specifying an import filter.
	oDoc = StarDesktop.loadComponentFromURL(cURL, "_blank", 0, Array(MakePropertyValue("Hidden", True), ))
	cFile = Left(cFile, LEN(cFile) - 4) + ".pdf"
	cURL = ConvertToURL(cFile) ' Save the document using a filter.
	oDoc.storeToURL(cURL, Array(MakePropertyValue("FilterName", "writer_pdf_Export"), ))
	oDoc.CLOSE(True)
END SUB
FUNCTION MakePropertyValue( Optional cName AS STRING, Optional uValue ) AS COM.sun.star.beans.PropertyValue
	DIM oPropertyValue AS New COM.sun.star.beans.PropertyValue
	IF NOT IsMissing( cName ) THEN
		oPropertyValue.NAME = cName
	EndIf
	IF NOT IsMissing( uValue ) THEN
		oPropertyValue.Value = uValue
	EndIf
	MakePropertyValue() = oPropertyValue
END FUNCTION

Guardamos y ahora simplemente sería utilizar, en la línea de comandos, la macro con el ejecutable del OpenOffice, en mi caso:

"c:\Archivos de programa\OpenOffice.org 3\program\soffice" "macro:///Standard.Module1.ConvertWordToPDF(e:\fichero.doc)"

Recuerda que debes usar la ruta entera del fichero que quieres convertir, o dará una excepción por no estar bien hecha dicha ruta.

Con el fin de evitar escribir tanto por cada fichero, he creado un pequeño script en batch para terminal de MSDOS:

@ECHO OFF
IF exist %1 GOTO EXISTE ELSE GOTO NOEXISTE
 
:NOEXISTE
echo El fichero %1 no existe
GOTO FIN
 
:EXISTE
echo convirtiendo %1 en pdf
"c:\Archivos de programa\OpenOffice.org 3\program\soffice" "macro:///Standard.Mo
dule1.ConvertWordToPDF(%1)"
 
:FIN

Y ya está, con esto puedes convertir cualquier documento soportado por OpenOffice en PDF.

2 Comentarios

  1. Alejandro Pinto — 10 junio, 2011 #

    Es bastante bueno y se parece mucho a algo que tengo que hacer.

    Yo necesito pasar cualquier tipo de documento (de office) a PDF con todas las opciones de seguridad activa, pero necesito que se haga mediante una llamada por consola.

    Alguien sabría como hacerlo ???

  2. iQuarK — 10 junio, 2011 #

    Las opciones son con el array de MakePropertyValue, he encontrado este hilo de un foro en el que parece que comentan algo, espero que te ayude :).
    http://forums.foxitsoftware.com/archive/index.php/t-8079.html?s=26a617b3d11b2b2a405580a06b538f7f

Publicar comentario