Herramienta de línea de comandos para convertir archivos DOC y DOCX a PDF

¿Existe alguna herramienta de línea de comandos para convertir archivos DOC y DOCX a PDF? Si no, ¿puede ser automatizado por algún script de Automator (abrir-imprimir a PDF-cerrar)?

Respuestas (4)

Si tiene Office:Mac 2008 Business Edition u Office:Mac 2011 Home/Business Edition, las acciones de Automator se incluyen con esas ediciones. Una de las acciones de Automator incluidas con esas versiones de Office: Mac es "Convertir formato de documentos de Word", y una de las opciones en esa acción de Automator es PDF. Esta página tiene excelente información sobre Automator y Office:Mac.

Si tiene Home/Student Edition en lugar de Business Edition, o no tiene Office, puede hacerlo a través de AppleScript. Mac OS X Hints tiene un artículo sobre la conversión masiva de archivos de texto a PDF a través de AppleScript , y los comentarios de ese artículo brindan algunas opciones para convertir DOC/DOCX a PDF a través de RTF. Eso podría resultar en una pérdida de formato o vinculación si tiene archivos DOC/DOCX muy complejos, pero podría ser suficiente para archivos que no son demasiado complejos.

Puede utilizar la docx2pdfherramienta de línea de comandos para convertir de forma masiva docx a pdf. Utiliza Microsoft Word para convertir directamente a pdf, por lo que deberá tenerlo instalado. Uno macOS, usa JXA (AppleScript para JavaScript) para hablar con Word y en Windows usa win32com.

pip install docx2pdf

# single file
docx2pdf myfile.docx

# entire folder
docx2pdf myfolder/

Descargo de responsabilidad: Escribí docx2pdfdespués de sentirme frustrado por la falta de herramientas multiplataforma para convertir docx a pdf directamente usando Microsoft Word, ya que necesitaba una réplica perfecta sin problemas de formato. https://github.com/AlJohri/docx2pdf

Esto es genial Al. Justo lo que necesitaba.
No parece funcionar en macOS M1.

En Office 2016, el enfoque de Automator tendrá problemas debido al entorno aislado de seguridad . (El síntoma: Word permanece abierto y obtiene un cuadro de diálogo "Error al imprimir").

Una solución es instalar LibreOffice , que se puede utilizar para convertir archivos desde la línea de comandos . En MacOS, el comando es:

/Applications/LibreOffice.app/Contents/MacOS/soffice \
  --headless \
  --convert-to pdf \
  myfile.docx

El PDF solo será tan bueno como la conversión de MS Office de LibreOffice, por supuesto, pero es adecuado para muchos propósitos.

Otro enfoque, si realmente no te importa el formato, es usar pandocy LaTeX:

pandoc -t latex myfile.docx -o myfile.pdf

Sin embargo, deberá instalar pandoc y LaTeX como se describe en esta respuesta , y su PDF se verá como un documento de LaTex: el formato básico, los encabezados, las listas, etc. generalmente se conservarán, pero cosas como las fuentes y los márgenes. no.

Para mi aplicación, la solución LibreOffice publicada por @David Moles es una gran solución. Necesito usar esto desde dentro de una aplicación ya que mi versión de Word no se ejecuta en MacOS 12.3.1 (bueno, es de 32 bits, por lo que se detuvo después de 10.14.6. Había estado usando AppleScript para decirle a Word que se convirtiera a pdf ). Aprendí que cada parte delimitada por espacios de los argumentos debe ser un objeto en la matriz de argumentos que se pasan a NSTask. p.ej

NSTASK *task = [[NSTask alloc] init];
task.executableURL = [NSURL fileURLWithPath:@"/Applications/LibreOffice.app/Contents/MacOS/soffice"];
NSString *filename = ...;
task.currentDirectoryURL = [NSURL fileURLWithPath: ...];
task.arguments  = @[@"--headless"
                  , @"--convert-to", @"pdf", filename];
¿Cómo responde este código cortado a la pregunta formulada? ¿Cómo puede un usuario final usar esto en la línea de comando para convertir DOC a PDF?
Es un comentario sobre la respuesta que me dio una solución a mi problema, pero no he descubierto cómo formatear el fragmento de código dentro de un comentario; Si pudiera, lo pondría en un comentario. Espero que la información proporcionada en la última oración ayude a ahorrar mucho tiempo a alguien con poca experiencia en NSTask: me tomó años comprender el error que estaba cometiendo.