Convierte docx a PDF

41

Estoy tratando de convertir archivos docx a pdf en mi servidor Ubuntu usando la línea de comando pero ninguno de los convertidores que probé hasta ahora parece convertir correctamente los archivos de Word 2007/2010/2013.

Aparentemente, los convertidores en línea pueden administrarlo sin ningún problema, pero los servicios web no son una opción porque los archivos contienen datos confidenciales. Para las pruebas, uso este archivo de Word 2007 porque contiene algunos elementos importantes (fórmulas, gráficos vectoriales, imágenes, listas, etc.). Probé las siguientes herramientas (en parte de esta publicación ):

lowriter (LibreOffice Writer): salida incorrecta (se supone que el círculo está en la última página, no en la primera)

ingrese la descripción de la imagen aquí

unoconv- lo mismo que LibreOffice ya que no usa su propio convertidor. La conversión a odt primero y luego a pdf ensucia el archivo por completo.

abiword --to=pdf filename.doc - incorrecto e incompleto (faltan muchos elementos):

ingrese la descripción de la imagen aquí

OpenOffice Writer: el mismo resultado que para abiword

wvPDF - Bloqueo con el siguiente mensaje de error:

~ $ wvPDF 2007_Office_DocEncryption.docx test.pdf

Directorio actual: / home / webmt / dev / test /

Algún problema al ejecutar látex.

Compruebe si hay errores en test.log

Continuo...

La conversión a dvi falló

¿Hay alguna forma de convertir archivos docx a PDF en Linux correctamente? También me ayudaría si supiera que funciona para alguien con cualquiera de los programas que ya mencioné. Comenzaré una recompensa tan pronto como SE me lo permita.

ps Estoy usando el servidor Ubuntu 12.04


conclusión :

Tenía que concluir que, para mí, por ahora, no existe una herramienta confiable que funcione con los nuevos formatos de MS Word y todo tipo de sus elementos en Ubuntu y cree una copia uno a uno de los archivos docx. Ninguna de las herramientas que probé pudo convertir el archivo de muestra correctamente. Como enfrentaré tipos / versiones de documentos muy diferentes y la calidad de salida tiene una de las más altas prioridades, terminaré realizando las conversiones mediante macros VB en Word en un servidor Windows conectado a mi Linux.

Estableceré la publicación obteniendo los mejores resultados como la respuesta aceptada. Sin embargo, la recompensa estaba destinada a una solución con una conversión absolutamente correcta. Gracias a todos nuevamente.

Jule escéptico
fuente
3
dio una oportunidad al látex?
Braiam
@ScepticalJule, Sí, hay un problema al final. Acabo de mirar la primera página.
1
@Braiam ¿Podrías colocar un enlace para convertir con látex?
Escéptico Jule
2
@ScepticalJule Creo que Braiam quería decir que deberías intentar escribir tu documento en látex inmediatamente. Las conversiones de docx a latex son mucho más dolorosas que las conversiones de docx a pdf. Podría intentar hacer la conversión de docx a doc y luego de doc a pdf. Pero tendrías que encontrar una herramienta LO independiente para hacerlo. Avísame si puedo ayudarte de alguna otra manera y si mi respuesta te ayudó.
don.joey

Respuestas:

58

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 oowritery ebook-convert), pero pasan menos pruebas que este método. El ebook-convertmé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 diagrama de flujo que no se muestra completamente como se esperaba.

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 printsoluciones 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 doc2pdfy 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 [email protected] 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.

don.joey
fuente
1
He recibido noticias de zamzar: "Actualmente tenemos una API que esperamos lanzar en Beta en los próximos meses. ¿Podríamos agregarlo a la versión beta de prueba si esto fuera de interés?" También mencionaron que su sistema de conversión es algo que han desarrollado internamente.
don.joey
@jasonplutext Estoy de acuerdo con los revisores en que su edición no fue útil. Como autor de plutext (¿supongo?), Le sugiero que agregue una respuesta propia con un aviso legal que indique su afiliación. Gracias.
don.joey
¿Alguna actualización en los últimos años?
Becko
@becko No lo he seguido. Tal vez establecer una recompensa por otra persona?
don.joey
Nota del futuro: el uso adecuado en versiones recientes de lowriteres ahora lowriter --convert-to pdf input_file.docx. El uso --pt pdffallará en silencio.
ACK_stoverflow
6

Esta es una solución de línea de comandos que funciona decentemente, pero utiliza software propietario.

Creo que el problema básico es que los formatos de Microsoft Word son completamente entendibles solo para Microsoft Word (incluso allí, hay diferencias entre las versiones --- hay archivos de Word del pasado que se abren con formato incorrecto en las versiones más nuevas). Todas las demás soluciones son aproximaciones y hacks, por lo que funcionarán o no dependiendo del archivo.

Entonces, para asegurarse de que necesita procesar sus archivos .docx con una instalación de Microsoft Word (y sí, creo que es su opción y es justo. Si no quiere usar Word, no lo use --- sigo con LaTeX por mi trabajo, pero es difícil convencer al resto del mundo ...).

Estoy usando Crossover desde hace años para ejecutar Microsoft Office en mi escritorio Linux (1), lo que me resulta bastante útil. Quizás también funciona con vino --- nunca lo probé

Hago la conversión usando esta configuración:

1) Tengo instalado Crossover

2) Tengo mi versión de Microsoft Office instalada en Crossover

3) En Microsoft Word, deshabilite la "impresión en segundo plano"

4) Tengo la cups-pdfimpresora instalada y seleccionada como impresora predeterminada.

5) Para hacer la conversión, ejecute (pistas aquí ):

~/cxoffice/bin/wine --cx-app winword.exe respondus-docx-sample-file.docx /q /n /mFilePrintDefault /mFileExit

6) Su archivo convertido aparecerá en el ~/PDF/directorio.

Su documento sale casi a la perfección (hay algunos desajustes en la respuesta # 2, que se muestran en mi Office Word 2007 cuando se ejecuta bajo Crossover --- No sé si está relacionado con mi versión de Windows).

pagew 1-2

páginas 3-4

Ahora, el problema es que aparecerá la interfaz de la palabra gráfica --- No sé cómo hacerla "sin cabeza". Las opciones de línea de comando para Word no ayudaron ...

(1) De ninguna manera estoy relacionado con Codeveawers, solo soy un usuario feliz.

Rmano
fuente
4

También tuve este problema en el pasado, no he tenido que usarlo últimamente, así que no sé si todavía me está afectando.

En cuanto a responder la pregunta:

Esta pregunta: Cómo convertir por lotes .doc o .docx a .pdf da una razón en los comentarios de por qué su conversión lowriterpodría estar fallando:

Tenga cuidado con el uso del carácter "espacio" desde la línea de comandos ... Cuando llegue al carácter espacio, simplemente presione "tab";) - Pitto 16 de noviembre de 12 a 13:11

La respuesta de esta pregunta también podría ayudar:

¿Cómo puedo convertir un archivo ODT a PDF?

Se podría funcionar libreoffice --headless --convert-to pdf *.odt. Puede obtener más información sobre libreoffice con el comando man libreofficesi necesita ayuda para comprender o ajustar el comando para que funcione.

Sin embargo, no puede tener LibreOffice abierto en ese momento, según este error: https://bugs.freedesktop.org/show_bug.cgi?id=37531


Esta pregunta también está relacionada con Ubuntu, aunque esté en SuperUser: https://superuser.com/questions/156189/how-to-convert-word-doc-to-pdf-in-linux

La primera respuesta tiene dos opciones, una usando CUPS y creando una impresora PDF, la otra usando LaTex, aunque usted dijo que LaTex fallaba.

En cuanto a la conversión a PDF a través de CUPS PDF, se ejecutará sudo apt-get install cups-pdfseguido de oowriter -pt pdf your_word_file.doc(x). Esto podría ayudarlo con su problema de escritura.

Este es probablemente un problema con el hecho de que está intentando convertir a PDF desde DOC / DOCX, cuando la mayoría de las herramientas usan ODT, ya que están relacionadas con LibreOffice / OpenOffice / AbiWord. Por lo tanto, no logran convertirlo del formato DOCX de Microsofts o en la conversión a ODT.

Hay varios errores con una conversión de .docx w. Word Art (se incluye la versión):

Esto es del foro de LibreOffice con respecto a la conversión de .doc y algo .docx: http://en.libreofficeforum.org/node/5096 . Es de enero de 2013, por lo que debería aplicarse un poco.

Más allá de todo esto, realmente no lo sé. ¡Espero que resuelvas tu problema!

RPiAwesomeness
fuente
Lo sentimos, pero ninguna de las herramientas sugeridas podría realizar una conversión limpia.
Escéptico Jule
2

Si tiene instalado Libreoffice, puede intentar convertir utilizando eso. Simplemente presione Ctrl+ Alt+ Ten su teclado para abrir Terminal. Cuando se abra, ejecute los siguientes comandos:

libreoffice --headless -convert-to pdf <file_name>.docx -outdir output/path/for/pdf

Otra opción es instalar Cups PDF .

Para hacerlo, simplemente presione Ctrl+ Alt+ Ten su teclado para abrir Terminal. Cuando se abra, ejecute los siguientes comandos:

sudo apt-get install cups-pdf

Luego cree una nueva impresora, configúrela como una impresora de archivos PDF y asígnele el nombre que desee, siempre que sepa el nombre, luego ejecute:

oowriter -pt pdf your_word_file.docx

Y su archivo PDF estará en ~/PDF.

Mitch
fuente
1
No tuve ningún éxito con esos.
Escéptico Jule
Esto puede responder por qué.
Escéptico Jule
Agradezco su respuesta, tiene mucho sentido, pero me sorprende que la impresión no funcionó, ya que le gusta imprimir en papel ... :)
Mitch
El problema clave es que LibreOffice ni siquiera puede abrir y mostrar el documento correctamente. En consecuencia, la salida también es incorrecta. ¿Funcionó en tu Linux?
Escéptico Jule
Es bueno saberlo. Solo uso la oficina solo para documentos básicos, la necesidad no ha surgido para nada más complejo, pero cuando lo haga, me aseguraré y me referiré a esto. Gracias por la gran pregunta, y seguramente la agregaré como favorita para referencia futura. Mantendré esta respuesta y los comentarios como referencia para que otros usuarios la vean.
Mitch
2

Aquí está la amarga verdad: ¡las soluciones de Office para Linux son fallas totales! He sido un usuario de GNU / Linux a tiempo completo durante muchos años y constantemente he buscado y probado diferentes soluciones de oficina, desde la antigua Open-Office, hasta la posterior Libre-Office, Abi-Word, etc. Todos no han podido ayudarme a hacer mi trabajo de oficina. Incluso empeora cuando se trata de idiomas no latinos (idiomas de derecha a izquierda como el persa, el árabe, etc.). ¡El usuario tiene que luchar con este software para hacer su trabajo! Y la compatibilidad con Microsoft Office simplemente no existe. Puedo hablar horas y horas de cuánto he intentado y todos me han fallado, pero este no es el punto de esta pregunta.

También intenté instalar y ejecutar Microsoft Office usando WINE, y de alguna manera tuve éxito, pero no funcionó bien y se bloqueó principalmente cuando intenté abrir los archivos de mi oficina.

LaTeX está bien, pero no es una solución de oficina. LaTeX es para la configuración de tipografía, y es más como una herramienta profesional, y no hay hojas de cálculo ni presentaciones.

Entonces, ¿cuál es la solución?

Esta no es una solución de línea de comandos. La única solución que se me ocurrió en todos estos años, para mantenerme dentro de mi sistema operativo GNU / Linux y también hacer mis trabajos de oficina, es usar una instalación mínima de Microsoft Windows en una máquina virtual (como VirtualBox) e instalar un traje de Microsoft Office.

ingrese la descripción de la imagen aquí

Puede que no parezca bonito, pero es la única solución que funciona a la perfección y me evita pelear con soluciones de mala oficina en mi precioso tiempo. Al principio, yo mismo pensé que esta no era una buena solución, pero después de fallar con todos los demás y hacer esto VM durante más de 2 años, estoy muy contento con eso. :)

================================================== ==============================

NOTA-1: ¡ No estoy anunciando productos de Microsoft! Solo trato de ayudar a resolver el problema y seguir adelante con la vida.

NOTA-2: Como se enfatizó anteriormente, esta NO es una solución de línea de comandos. Entonces, ¿por qué publicar la respuesta? ¡Porque es una opción PROBADA y QUE FUNCIONA BIEN! Si no hay disponible una solución de línea de comandos TRABAJANDO (lo cual sospecho es el caso), entonces tener una opción ALTERNATIVA es mejor que NO opciones.

Seyed Mohammad
fuente
1
¿Por qué simplemente usar MS Word en winelugar de máquina virtual?
totti
1
Como mencioné, mi experiencia con la instalación y el uso de MS-Office WINEno funcionó bien. El programa no funcionó como lo hace en Windows (mostró un comportamiento incorrecto) y también se bloqueó mucho.
Seyed Mohammad el
3
No se ha ohe downvoted todavía , pero la pregunta pide explícitamente una línea de comandos solución. Esto no es inútil debido a la EM, es inútil porque ignora por completo la pregunta.
djeikyb 01 de
3
Seyed, tenga en cuenta que el OP está pidiendo explícitamente una solución de línea de comandos que funcione en su servidor Ubuntu (¡que probablemente ni siquiera tiene una GUI!). Su respuesta no es mala, pero simplemente no es relevante en este caso.
Glutanimate
2
@ScepticalJule Ridículo. Explícitamente pones una recompensa en una solución de línea de comando. Luego selecciona una respuesta que ni siquiera es una respuesta a la pregunta. ¿Has estudiado las otras respuestas? ¿Incluyendo este y el mío?
don.joey
1

Aquí hay un par de aplicaciones que puedes probar y ver si funcionan con FF Multi Converter o puedes probar Kingsoft Office .

rstreeter78
fuente
Instalé FF Multi Converter, ejecuté el comando ... no pasó nada. Kingsoft tiene una buena interfaz gráfica de usuario, pero no pudo abrir / mostrar el archivo correctamente (faltaban fórmulas incluso después de instalar las fuentes requeridas. También faltaban las letras en el círculo).
Escéptico Jule
0

Instale Calibre desde el Centro de software o Synaptic , y configure la salida predeterminada en PDF.

Desde un indicador de comandos de shell, realice

ebook-convert dummyfilename .docx .pdf -h

K7AAY
fuente
Esto corta el texto de alguna manera.
don.joey el
Choque con ValueError: No plugin to handle input format: docx. Google no ayudó en este caso, así que reportaré un error.
Escéptico Jule