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

Respuestas:

68

Simplemente abra el documento con libre office y elija Exportar como PDF ... :

ingrese la descripción de la imagen aquí

Para una solución de línea de comando hay unoconv Instalar NAME que convierte archivos de la línea de comando:

unoconv -f pdf mydocument.odt

Nota: Solo a partir de Ubuntu 11.10 unoconv depende de Libre Office. Las versiones anteriores de unoconv (de Ubuntu <= 11.04) dependen de Open Office (pero también se ejecutará con Libre Office).

Takkat
fuente
3
Gracias por mencionar unoconv, ¡es genial!
Boris Däppen
1
Para aquellos que se preguntan cuáles son los pros y los contras de la línea de comando Unoconv vs Libreoffice, este problema podría ayudar: github.com/dagwieers/unoconv/issues/364
Sebastien Lorber
@Takkat unoconv no parece encontrar la ubicación de libreoffice5 en MacOS Sierra, dice unoconv: Cannot find a suitable office installation on your system., por lo tanto, es inutilizable :(
SebMa
87

También puede usar la línea de comandos de libreofficepara su propósito. Eso te da la ventaja de la conversión por lotes. Pero los archivos individuales también son posibles. Este ejemplo convierte todos los archivos ODT en el directorio actual a PDF:

libreoffice --headless --convert-to pdf *.odt

Obtenga más información sobre las opciones de línea de comandos con:

man libreoffice
Tapper
fuente
Otro argumento para el uso de la línea de comandos es que, por ejemplo, en mi caso, la interfaz gráfica de usuario de repente comenzó a producir archivos PDF defectuosos, pero la línea de comandos todavía funciona de maravilla.
Hermann Ingjaldsson
44
Esto funciona, pero tiene un problema: si la GUI está abierta, el comando no hará nada (ni siquiera mostrará un error). Feo, pero con esta solución puede abrir una nueva instancia: --env:UserInstallation=file:///path/to/some/directory.
tokland
1
@tokland: Hay un informe de error para eso: bugs.freedesktop.org/show_bug.cgi?id=37531
Caracol mecánico el
1
También logré obtener la conversión por lotes unoconv. Por ejemplo, usé la línea con unoconv -f pdf *.pptéxito.
XavierStuvw
2
para aquellos que se preguntan cuáles son los pros y los contras de la línea de comando Unoconv vs Libreoffice, este problema podría ayudar: github.com/dagwieers/unoconv/issues/364
Sebastien Lorber
8

Aquí hay algunos detalles más sobre el método "no GUI".

  1. Puede usar este método no solo para convertir archivos ODT a PDF. También funcionará para archivos MS Word DOCX (funcionará tan bien como LibreOffice puede manejar el ODT particular) y, en general, todos los tipos de archivos que LibreOffice puede abrir.

  2. No creo que haya un binario nombrado libreofficecomo una de las otras respuestas sugeridas. Sin embargo, existe soffice(.bin)el binario que se puede usar para iniciar LibreOffice desde la línea de comandos. Por lo general, se encuentra en /usr/lib/libreoffice/program/; y muy a menudo, un enlace simbólico /usr/bin/sofficeapunta a esa ubicación.

  3. Entonces, en la mayoría de los casos, los parámetros --headless --convert-to pdfno son suficientes. Necesita ser:

    --headless --convert-to pdf:writer_pdf_Export
    

    ¡Asegúrese de seguir exactamente esta capitalización!

  4. A continuación, el comando no funcionará si ya hay una instancia de LibreOffice GUI en funcionamiento en su sistema. Es causado por el error # 37531, conocido desde 2011 . Agregue este parámetro adicional a su comando:

     "-env:UserInstallation=file:///tmp/LibreOffice_Conversion_${USER}"
    

    Esto creará un nuevo entorno separado que puede ser utilizado por una segunda instancia de LO sin cabeza sin interferir con una posible primera instancia de LO de GUI iniciada por el mismo usuario.

  5. Además, asegúrese de que el --outdir /pdfque especifique existe y de que tiene permiso de escritura. O, más bien, use un directorio de salida diferente. Incluso si es solo para una primera ronda de prueba y depuración:

    $ mkdir ${HOME}/lo_pdfs
    
  6. Por lo tanto:

    /path/to/soffice                                                     \
      --headless                                                         \
      "-env:UserInstallation=file:///tmp/LibreOffice_Conversion_${USER}" \
      --convert-to pdf:writer_pdf_Export                                 \
      --outdir ${HOME}/lo_pdfs                                           \
    /path/to/test.docx
    

    Esto funciona para mí en Mac OS X Yosemite 10.10.5 con LibreOffice v5.1.2.2 (usando mi ruta específica para el binario sofficeque de todos modos será diferente en Ubuntu ...). También funciona en Debian Jessie 8.0 (usando la ruta /usr/lib/libreoffice/program/soffice). Lo siento, no puedo probarlo en Ubuntu ahora ...

    Si todo esto no funciona, cuando intente procesar DOCX:

  7. Puede ser un problema con el archivo DOCX específico con el que prueba el comando ... Así que primero cree un documento DOCX muy simple. Use LibreOffice para esto. Escribe "¡Hola mundo!" en una página vacía Guárdelo como DOCX.

  8. Inténtalo de nuevo. ¿Funciona con el simple DOCX?

  9. Si nuevamente no funciona, repita el paso 7, pero guárdelo como ODT esta vez.

  10. Repita el paso 8, pero asegúrese de hacer referencia a la ODT esta vez.

  11. Última: Uso ruta completa soffice, que soffice.binya libreofficey ejecutar cada uno con el -hparámetro:

    $ /path/to/libreoffice -h  # if that path exists, which I doubt!
    $ /path/to/soffice -h
    $ /path/to/soffice.bin -h
    
    • ¿Obtiene una salida aquí?
    • ¿Para cuál de los tres binarios / enlaces simbólicos?
    • Grabar las salidas.
    • ¡Cuéntanos tus resultados!
       

    Compárelos con la línea de comando que utilizó:

    • ¿Hay algún cambio en los nombres de los parámetros, las mayúsculas, el número de guiones utilizados, etc.?
       

    A modo de comparación, mi propia salida (Mac OS X) está aquí:

     $ /Applications/LibreOffice.app/Contents/MacOS/soffice -h 
    
     LibreOffice 5.1.2.2 d3bf12ecb743fc0d20e0be0c58ca359301eb705f
    
     Usage: soffice [options] [documents...]
    
     Options:
     --minimized    keep startup bitmap minimized.
     --invisible    no startup screen, no default document and no UI.
     --norestore    suppress restart/restore after fatal errors.
     --quickstart   starts the quickstart service
     --nologo       don't show startup screen.
     --nolockcheck  don't check for remote instances using the installation
     --nodefault    don't start with an empty document
     --headless     like invisible but no user interaction at all.
     --help/-h/-?   show this message and exit.
     --version      display the version information.
     --writer       create new text document.
     --calc         create new spreadsheet document.
     --draw         create new drawing.
     --impress      create new presentation.
     --base         create new database.
     --math         create new formula.
     --global       create new global document.
     --web          create new HTML document.
     -o             open documents regardless whether they are templates or not.
     -n             always open documents as new files (use as template).
    
     --display <display>
           Specify X-Display to use in Unix/X11 versions.
     -p <documents...>
           print the specified documents on the default printer.
     --pt <printer> <documents...>
           print the specified documents on the specified printer.
     --view <documents...>
           open the specified documents in viewer-(readonly-)mode.
     --show <presentation>
           open the specified presentation and start it immediately
     --accept=<accept-string>
           Specify an UNO connect-string to create an UNO acceptor through which
           other programs can connect to access the API
     --unaccept=<accept-string>
           Close an acceptor that was created with --accept=<accept-string>
           Use --unnaccept=all to close all open acceptors
     --infilter=<filter>[:filter_options]
           Force an input filter type if possible
           Eg. --infilter="Calc Office Open XML"
               --infilter="Text (encoded):UTF8,LF,,,"
     --convert-to output_file_extension[:output_filter_name[:output_filter_options]] [--outdir output_dir] files
           Batch convert files (implies --headless).
           If --outdir is not specified then current working dir is used as output_dir.
           Eg. --convert-to pdf *.doc
               --convert-to pdf:writer_pdf_Export --outdir /home/user *.doc
               --convert-to "html:XHTML Writer File:UTF8" *.doc
               --convert-to "txt:Text (encoded):UTF8" *.doc
     --print-to-file [-printer-name printer_name] [--outdir output_dir] files
           Batch print files to file.
           If --outdir is not specified then current working dir is used as output_dir.
           Eg. --print-to-file *.doc
               --print-to-file --printer-name nasty_lowres_printer --outdir /home/user *.doc
     --cat files
           Dump text content of the files to console
           Eg. --cat *.odt
     --pidfile=file
           Store soffice.bin pid to file.
     -env:<VAR>[=<VALUE>]
           Set a bootstrap variable.
           Eg. -env:UserInstallation=file:///tmp/test to set a non-default user profile path.
    
     Remaining arguments will be treated as filenames or URLs of documents to open.
    
  12. Agregue un argumento más a su línea de comando para aplicar la aplicación de un filtro de entrada cuando sofficeabra su archivo DOCX:

    --infilter="Microsoft Word 2007/2010/2013 XML"
    

    o

    --infilter="Microsoft Word 2007/2010/2013 XML"
    --infilter="Microsoft Word 2007-2013 XML"
    --infilter="Microsoft Word 2007-2013 XML Template"
    --infilter="Microsoft Word 95 Template"
    --infilter="MS Word 95 Vorlage"
    --infilter="Microsoft Word 97/2000/XP Template"
    --infilter="MS Word 97 Vorlage"
    --infilter="Microsoft Word 2003 XML"
    --infilter="MS Word 2003 XML"
    --infilter="Microsoft Word 2007 XML Template"
    --infilter="MS Word 2007 XML Template"
    --infilter="Microsoft Word 6.0"
    --infilter="MS WinWord 6.0"
    --infilter="Microsoft Word 95"
    --infilter="MS Word 95"
    --infilter="Microsoft Word 97/2000/XP"
    --infilter="MS Word 97"
    --infilter="Microsoft Word 2007 XML"
    --infilter="MS Word 2007 XML"
    --infilter="Microsoft WinWord 5"
    --infilter="MS WinWord 5"
    
Kurt Pfeifle
fuente
fwiw, 37531 fallo TDF se ha marcado como resuelto / fijo
myrdd
4

Nautilus Script

Este script utiliza libreoffice para convertir archivos compatibles con LibreOffice a PDF.

#!/bin/bash
## PDFconvert 0.1
## by Glutanimate (https://askubuntu.com/users/81372/)
## License: GPL 3.0
## depends on python, libreoffice
## Note: if you are using a non-default LO version (e.g. because you installed it 
## from a precompiled package instead of the official repos) you might have to change
## 'libreoffice' according to the version you're using, e.g. 'libreoffice3.6'

# Get work directory
base="`python -c 'import gio,sys; print(gio.File(sys.argv[1]).get_path())' $NAUTILUS_SCRIPT_CURRENT_URI`"

#Convert documents
while [ $# -gt 0 ]; do
    document=$1
    libreoffice --headless --invisible --convert-to pdf --outdir "$base" "$document" 
    shift

done

Para ver las instrucciones de instalación, consulte aquí: ¿Cómo puedo instalar un script de Nautilus?

Glutanimato
fuente
2
Solo espero que esa función como "lipreoffice" también esté en OSX. A veces, siento mis manos tan cortas cuando tengo que usar Mac.
Léo Léopold Hertz 준영
2

Nota: Decidí eliminar mi respuesta de esta pregunta y publicar una versión modificada aquí cuando me di cuenta de que unoconvno trata bien los pswarchivos y no los convierte con éxito a otros formatos. También puede haber problemas docxy xlsxformatos.


Sin embargo, es Libreofficetotalmente compatible con muchos tipos de archivos; La documentación completa está disponible en el sitio oficial, que detalla los formatos de entrada y salida válidos.

Puede usar la libreofficeutilidad de conversión de línea de comandos o unoconv , que está disponible en los repositorios. Me parece unoconvmuy útil, y probablemente sea lo que quieres. Aunque Takkat ha mencionado brevemente unoconv, pensé que sería útil dar más detalles y una conversión por lotes de una sola línea.

Usando el terminal, podría cdacceder al directorio que contiene sus archivos y luego convertirlos por lotes a todos ejecutando una línea como esta:

for f in *.odt; do unoconv -f pdf "${f/%pdf/odt}"; done

(Esta frase es una modificación de mi script de traducción que aparece en esta respuesta ).

Si luego desea utilizar cualquier otro formato de archivo, simplemente sustituya el odty pdfcualquier otro formato de entrada y salida compatible. Puede encontrar los formatos compatibles para un tipo de archivo ingresando unoconv -f odt --show. Para convertir un solo archivo use, por ejemplo unoconv -f pdf myfile.odt,.

Puede encontrar más información y opciones para el programa ingresando en la terminal man unoconvo visitando las páginas de manual de Ubuntu en línea .

Comunidad
fuente
1

Otra secuencia de comandos de Nautilus

Este muy simple y liviano Nautilus Script utiliza unoconvpara convertir archivos seleccionados compatibles con LibreOffice a formato PDF:

#!/bin/sh
#Nautilus Script to convert selected LibreOffice-compatible file(s) to PDF
#
OLDIFS=$IFS
IFS="
"
for filename in $@; do
unoconv --doctype=document --format=pdf "$filename"
done
IFS=$OLDIFS
Sadi
fuente
1

Estoy agregando una nueva respuesta, porque en los últimos tiempos Pandoc abrió una serie de nuevas rutas de conversión obteniendo la capacidad de leer archivos ODT.

Cuando Pandoc lee en un formato de archivo, lo convierte a un formato interno, "nativo" (que es una forma de JSON).

Desde su forma nativa, puede exportar el documento a una amplia gama de otros formatos. No solo PDF, sino también DocBook, HTML, EPUB, DOCX, ASCIIdoc, DokuWiki, MediaWiki y lo que no ...

Como aquí el formato de salida deseado es PDF, tenemos otra opción de diferentes rutas, proporcionadas por lo que Pandoc llama un motor pdf . Aquí está la lista de motores PDF actualmente disponibles (válido para Pandoc v2.7.2 y versiones posteriores; las versiones anteriores pueden admitir solo una lista más pequeña):

  • pdflatex: Esto requiere que se instale LaTeX además de Pandoc.

  • xelatex: Esto requiere que se instale XeLaTeX además de Pandoc (también disponible como un paquete adicional para las distribuciones generales de TeX ).

  • contexto: Esto requiere que se instale ConTeXt además de Pandoc; ConTeXt está disponible como un paquete adicional para la mayoría de las distribuciones generales de TeX ).

  • lualatex: esto requiere que se instale LuaTeX además de Pandoc (también disponible como un paquete adicional para las distribuciones generales de TeX ).

  • pdfroff: esto requiere que se instale GNU Roff además de Pandoc.

  • wkhtml2pdf: Esto requiere la instalación de wkhtmltopdf además de Pandoc.

  • prince: Esto requiere que se instale PrinceXML además de Pandoc.

  • weasyprint: requiere la instalación de weasyprint además de Pandoc.

Hay algunos motores PDF más y más nuevos ahora integrados en Pandoc, que todavía no he utilizado y que actualmente no puedo describir con más detalle: tectonic y latexmk .

ADVERTENCIA: ¡No espere que la apariencia de su documento original sea idéntica en todas las salidas PDF a la vista previa de impresión o exportación PDF del ODT! Pandoc, cuando la conversión no conserva los diseños , conserva el contenido y la estructura de los documentos: los párrafos siguen siendo párrafos, las palabras resaltadas siguen enfatizadas, los encabezados siguen siendo encabezados, etc. Pero el aspecto general puede cambiar considerablemente.

Comandos de ejemplo

pdflatex:

 pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=pdflatex

XeLaTeX:

 pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=xelatex

LuaLaTeX:

 pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=lualatex

Contexto:

 pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=context

GNU troff:

 pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=pdfroff

wkhtmltopdf:

 pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=wkhtml2pdf

PrinceXML:

 pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=prince

weasyprint:

 pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=weasyprint

Los comandos anteriores son los más básicos para la conversión. Dependiendo del motor de PDF que elija, puede haber muchas otras opciones posibles para controlar la apariencia del archivo PDF de salida. Por ejemplo, los siguientes parámetros adicionales se pueden agregar a todas esas rutas de enrutamiento a través de LaTeX:

 -V geometry:"paperwidth=23.3cm, paperheight=1000pt, margin=11.2mm, top=2cm"

que utilizará un tamaño de página personalizado (un poco más grande que DIN A4) con márgenes de 2 cm en el borde superior y 1,12 cm en los otros tres bordes).

Kurt Pfeifle
fuente
Por favor revise el cuarto párrafo desde arriba. Parece incompleto.
DK Bose
@DKBose: Thx, listo.
Kurt Pfeifle