Esta respuesta pasa todas las pruebas, pero el diagrama de flujo uno en su documento de prueba.
sudo apt-get install unoconv
doc2pdf respondus-docx-sample-file.docx
¿Por qué es esto mejor de lo que otros métodos sugieren hasta ahora?
He probado los otros métodos sugeridos hasta ahora (especialmente oowriter
y ebook-convert
), pero pasan menos pruebas que este método. El ebook-convert
método elimina los márgenes y una parte de los textos del documento.
Este método incluso produce mejores resultados que un convertidor profesional como rainbowpdf .
También intenté convertirlo a html, pero el dibujo con el cuadrado en el círculo y el diagrama de flujo son incorrectos.
¿Por qué falla la prueba del diagrama de flujo?
Parece que libreoffice y unoconv tienen algunos problemas para representar correctamente el diagrama de flujo que está en el archivo .docx. Probablemente esto se deba a que se realizó utilizando arte inteligente en Microsoft Office. Ese es el problema. Ese es un error también discutido en este hilo . La información textual y visual está presente en el pdf resultante del método anterior, como puede ver (aunque tuve que seleccionar el texto).
El color de la fuente, por ejemplo, no se lee correctamente y algunas líneas son demasiado largas. No conozco ninguna solución de Linux que pueda mostrar correctamente el arte inteligente. :(
Esta es también la razón por la cual todas las print
soluciones publicadas en esta página no lo satisfarán.
En breve
En resumen, lo que está haciendo es realmente difícil y actualmente no hay soluciones que lo satisfagan por completo. El talón de Aquiles de las conversiones docx2pdf es el arte inteligente. Si puede vivir sin eso o si puede encontrar una manera de detectar arte inteligente y convertirlo de alguna manera en una imagen, puede alcanzar su objetivo.
Opción 1. Obliga a tus usuarios a lidiar con el problema
Esta es una solución muy poco elegante. Sus creadores de contenido podrían guardar su arte inteligente como jpg como se describe en las páginas de ayuda de Office y, por lo tanto, la conversión sería posible en su servidor.
Opción 2. Hackea el problema
Si los diagramas de flujo son a menudo muy similares y, dependiendo de lo bueno que sea un desarrollador, puede intentar convertir el arte inteligente por separado. Podría extraer el archivo drawing1.xml del grupo de documentos .docx y luego utilizar el procesamiento del lenguaje natural y algunos trucos locos para reconstruir un arte inteligente. Por ejemplo, tendría que meterse con este tipo de xml:
<dsp:txBody>
<a:bodyPr spcFirstLastPara="0" vert="horz" wrap="square" lIns="8255" tIns="8255" rIns="8255" bIns="8255" numCol="1" spcCol="1270" anchor="ctr" anchorCtr="0">
<a:noAutofit/>
</a:bodyPr>
<a:lstStyle/>
<a:p>
<a:pPr lvl="0" algn="ctr" defTabSz="577850">
<a:lnSpc><a:spcPct val="90000"/>
</a:lnSpc>
<a:spcBef>
<a:spcPct val="0"/>
</a:spcBef>
<a:spcAft>
<a:spcPct val="35000"/>
</a:spcAft>
</a:pPr>
<a:r>
<a:rPr lang="en-US" sz="1300" b="1" kern="1200"/>
<a:t>All three sides are different lengths
</a:t>
</a:r>
</a:p>
</dsp:txBody>
O como una solución mínima, al menos extrae el texto ( <a:t>
?) Del archivo y lo guarda de una manera más fácil. O si los diagramas de flujo de sus archivos PDF son todos iguales, podría escribir un script para cambiar el color del texto y la longitud de la línea en el propio xml. Entonces podría ejecutar doc2pdf
y tendría un archivo que esencialmente tiene toda la información correcta, pero tal vez no el formato. En el caso de los diagramas de flujo, es probable que también desee incluir parte del formato, porque el formato es parte de la información.
Opción 3. Use un servicio de terceros
He investigado un poco más en los últimos días y he encontrado un servicio que hace la conversión perfectamente: zamzar . Zamzar le permite cargar un archivo docx y luego le envía un enlace por correo electrónico. También tienen un servicio (¿de pago?) Donde puede enviar cualquier archivo a pdf@zamzar.com y luego recuperar el archivo convertido en su bandeja de entrada. Podría crear fácilmente un sistema en torno a esto donde envíe automáticamente el archivo y lo analice desde el correo electrónico. Esto no es tanto trabajo y el resultado final es el mejor.
Notas
- Si alguien tiene otros servicios que hacen lo mismo, no dude en editarlos.
- He enviado por correo el soporte de zamzar para preguntar si tienen una API. Eso sería aún más fácil.
- ¿Quizás apose para .NET y Java también podría ayudar? O docx4java como en esta publicación SO muy relacionada .
- Otra opción es buscar en el convertidor odf que parece anticuado y depende de openoffice en lugar de libreoffice.
- Ahora puedo confirmar que el jodconverter de Java también sufre un error en la conversión del diagrama de flujo.
De hecho, me he tomado el tiempo para probar los diferentes métodos propuestos en esta página. Por favor respalde cualquier comentario con pruebas reales.