Forum


Replies: 7   Views: 144
I can't convert a docx file to pdf file in a microsoft server

Posted by alberto.cortes@ezzing.com  · 23-07-2019 - 09:05

Hi,

I'm trying to convert a docx file to pdf file in a Microsoft Server,

I've installed Microsoft Office 2013 in the server,

I've a Microsoft Server because some docx files cannot be converted by LibreOffice.

 

Why not?

Because there are some docx documents that have many designs, objects, etc.

when I convert a docx file to PDF with LibreOffice the pdf output file doesn't looks like 100% to the original docx file for this reason I'm trying to use Microsoft Office for getting a convertion 100%.

 

I've a small API where we need to send the file to convert, everything looks like good except when I use te "transformFormat" method from "MSWordInterface" in that's moment I always get same error:

"""

com_exception

<b>Source:</b> Microsoft Word<br/><b>Description:</b> El elemento del conjunto solicitado no existe.

at MSWordInterface->transformFormat('C:\\388.docx', 'C:\\388.pdf')

"""

I've tried everything but doesn't work,

Could you help me, please?

Posted by admin  · 23-07-2019 - 12:57

Hola,

Ese mensaje es un error genérico que aparece cuando MS Word no puede acceder al documento origen, ya sea por problemas de permisos, por rutas o por la necesidad de acceder a $MSWordInstance->ActiveDocument-> en lugar de $MSWordInstance->Documents[1] como el código del método de phpdocx 8.2 utiliza. Aparte de ser necesaria una licencia válida de MS Word para poder utilizarlo.

Te recomendamos leer la información disponible en https://www.phpdocx.com/en/forum/default/topic/972. Aparte, como estás utilizando el método transformDocxUsingMSWord (este método se ha eliminado en phpdocx 9 e integrado junto a nuevas opciones en el conversion plugin) te recomendamos también probar utilizando dos o incluso cuatro '\' para la ruta como muestra el ejemplo disponible en el paquete.

También te recomendamos que pruebes el código más sencillo disponible en la página de documentación de PHP (https://www.php.net/manual/es/class.com.php) a ver si funciona correctamente o no (Ejemplo #1 Ejemplo COM (1)) y poder detectar el origen del error.

Saludos.

Posted by alberto.cortes@ezzing.com  · 05-08-2019 - 11:09

Hola,

Después de realizar varias pruebas no consigo que Word convierta el documento a PDF,

He copiado el script que me recomendaste: Ejemplo #1 Ejemplo COM (1)

de https://www.php.net/manual/es/class.com.php cambiando $word->Documents[1] por $word->ActiveDocument tal y como lo indicas.

El documento Word se genera bien. El problema viene al convertir dicho documento Word generado a PDF. Teniendo en cuenta las siguientes líneas que he añadido en mi script:

$word->Documents->Open('C:\\Users\\Administrator\\Desktop\\111.docx');

  $word->ActiveDocument->ExportAsFixedFormat('C:\\Users\\Administrator\\Desktop\\111.pdf',17, false, 0, 0, 0, 0, 7, true, true, 2, true, true, false);

Cuando realizo la llamada al servidor de Windows a través de un cliente como Postman o Insomnia la llamada se queda esperando una respuesta ya que el servidor no devuelve nada.

He probado a utilizar "\\\\" en lugar de "\\" y sigue sin funcionar,

¿Qué debería hacer?

 

Posted by admin  · 05-08-2019 - 11:24

Hola,

La sintaxis que estás utilizando con ExportAsFixedFormat no es correcta:

https://stackoverflow.com/a/39355051

https://docs.microsoft.com/en-us/office/vba/api/word.document.exportasfixedformat

Te recomendamos utilizar SaveAs, como usa la clase MSWordInterface.php.

Te recomendamos que edites la clase MSWordInterface.php incluida en phpdocx 8.2, modifiques Documents[1] por ActiveDocument (ya que comentas es el acceso que funciona con la versión de MS Word que utilizas) y ejecutes el script más sencillo que haga una transformación utilizando PHP CLI (sin utilizar bibliotecas o herramientas externas como Postman o Insomnia). Es decir, nuestro consejo es que que pruebes la conversión de DOCX a PDF de manera totalmente independiente a herramientas externas y utilizando PHP CLI para saber si el problema viene de PHP, del servidor web o de elementos externos (bibliotecas, problemas de configuración u otras fuentes).

Saludos.

Posted by alberto.cortes@ezzing.com  · 05-08-2019 - 14:18

En el último comentario se me ha olvidado comentar lo siguiente:

Si ejecuto el script de PHP para convertir un documento Word a PDF desde el propio servidor entrando en una terminal de MS-DOS o de PowerShell funciona correctamente. En este script no tengo nada de PHPDocx.

Si hago una llamada al servidor para poder crear un documento Word y convertirlo a PDF con PHPDocx, consigo crear el documento Word pero no consigo convertirlo a PDF, no me devuelve ningún error pero tampoco ninguna respuesta en la llamada que realizo, es como si el servidor se quedara "pillado" al realizar la llamada.

Parece que Windows no ejecutara Word para aquellas llamadas externas al servidor.

¿No sé si me explico?

Posted by admin  · 05-08-2019 - 14:46

Hola,

Sí, entendemos lo que dices, pero como puedes comprobar abriendo el archivo MSWordInterface.php phpdocx 8.2 utiliza directamente los métodos DOM de PHP para transformar DOCX a PDF utilizando MS Word. Si la ejecución en PHP CLI realiza la transformación a PDF, entonces el problema viene de un problema de configuración del servidor web por falta de permisos u otro problema acceso con las librerías utilizadas; lo sentimos pero no podemos saber el origen de por qué en local puedes hacer la conversión pero no en remoto, ya que parece algo ajeno a phpdocx.

De todas maneras comentas que:

Si ejecuto el script de PHP para convertir un documento Word a PDF desde el propio servidor entrando en una terminal de MS-DOS o de PowerShell funciona correctamente. En este script no tengo nada de PHPDocx.

¿Qué ocurre cuando ejecutas ese script que dices que no utiliza phpdocx haciendo una llamada al servidor? ¿Se ejecuta correctamente? como te comentamos, para la conversión de DOCX a PDF phpdocx utiliza directamente funciones PHP COM, por lo que el mismo problema debe ocurrir utilices phpdocx o no.

Saludos.

Posted by alberto.cortes@ezzing.com  · 05-08-2019 - 15:10

¿Qué ocurre cuando ejecutas ese script que dices que no utiliza phpdocx haciendo una llamada al servidor? ¿Se ejecuta correctamente?

No se ejecuta correctamente, la llamada se queda pensando como si el servidor se quedara "pillado".

Si utilizo PHPDocx me devuelve un error de:

<b>Source:</b> Microsoft Word<br/><b>Description:</b> El comando no está disponible porque no hay ningún documento abierto.

 

Es un tanto extraño que me funcione bien dentro del servidor y fuera no, como bien dices es posible que sea un problema de configuración del servidor pero no consigo saber cuál es el error y porqué sucede.

Posted by admin  · 05-08-2019 - 15:16

Hola,

Lo sentimos pero desconocemos la razón de por qué los métodos PHP COM no están funcionando haciendo una llamada en remoto al servidor pero sí desde el propio equipo. Te recomendamos revisar toda la configuración del servidor, logs, permisos, herramientas, cortafuegos, handlers de PHP y opciones similares.

Saludos.