Como posso converter um arquivo ODT em um PDF?

57

Alguém sabe como converter um arquivo ODT (LibreOffice) para PDF ?

    
por SoftTimur 10.09.2011 / 08:14

7 respostas

64

Basta abrir o documento com o libre office e escolher Exportar como PDF ... :

Para uma solução de linha de comando, existe unoconv que converte arquivos da linha de comando:

unoconv -f pdf mydocument.odt

Nota: Apenas a partir do Ubuntu 11.10 o unoconv depende do Libre Office. As versões anteriores do unoconv (do Ubuntu & lt; = 11.04) dependem do Open Office (mas também serão executadas com o Libre Office).

    
por Takkat 10.09.2011 / 08:55
73

Você também pode usar a linha de comando de libreoffice para sua finalidade. Isso lhe dá a vantagem da conversão em lote. Mas arquivos únicos também são possíveis. Este exemplo converte todos os arquivos ODT no diretório atual para PDF:

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

Obtenha mais informações sobre as opções de linha de comando com:

man libreoffice
    
por Tapper 15.02.2012 / 17:53
5

Aqui estão mais alguns detalhes sobre o método "não-GUI".

  1. Você pode usar esse método não apenas para converter arquivos ODT em PDF. Ele também funcionará para arquivos MS Word DOCX (funcionará tão bem quanto o LibreOffice é capaz de manipular o ODT específico) e, em geral, todos os tipos de arquivos que o LibreOffice pode abrir.

  2. Eu não acho que haja um binário chamado libreoffice como uma das outras respostas sugeridas. No entanto, existe soffice(.bin) - o binário que pode ser usado para iniciar o LibreOffice a partir da linha de comando. Geralmente está localizado em /usr/lib/libreoffice/program/ ; e muitas vezes, um link simbólico /usr/bin/soffice aponta para esse local.

  3. Em seguida, na maioria dos casos, os parâmetros --headless --convert-to pdf não são suficientes. Precisa ser:

    --headless --convert-to pdf:writer_pdf_Export
    

    Certifique-se de seguir exatamente esta capitalização!

  4. Em seguida, o comando não funcionará se já houver uma instância da GUI do LibreOffice ativada em seu sistema. É causada pelo bug # 37531, conhecido desde 2011 . Adicione este parâmetro adicional ao seu comando:

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

    Isso criará um novo ambiente separado, que pode ser usado por uma segunda instância de LO sem cabeçalho, sem interferir com uma primeira instância da GUI LO em execução pelo mesmo usuário.

  5. Além disso, verifique se o --outdir /pdf que você especificou existe e se você tem permissão de gravação para ele. Ou melhor, use um diretório de saída diferente. Mesmo que seja apenas para uma primeira rodada de teste e depuração:

    $ mkdir ${HOME}/lo_pdfs
    
  6. Por isso:

    /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
    

    Isso funciona para mim no Mac OS X Yosemite 10.10.5 com o LibreOffice v5.1.2.2 (usando meu caminho específico para o binário soffice , que será diferente no Ubuntu de qualquer maneira ...). Ele também funciona no Debian Jessie 8.0 (usando o caminho /usr/lib/libreoffice/program/soffice ). Desculpe, não posso testá-lo no Ubuntu agora ...

    Se tudo isso não funcionar, quando você tentar processar o DOCX:

  7. Pode ser um problema com o arquivo DOCX específico com o qual você tentou executar o comando ... Portanto, crie um documento DOCX muito simples primeiro. Use o próprio LibreOffice para isso. Escreva "Olá mundo!" em uma página vazia. Salve como DOCX.

  8. Tente novamente. Funciona com o DOCX simples?

  9. Se isso não funcionar novamente, repita a etapa 7, mas salve como ODT desta vez.

  10. Repita a etapa 8, mas certifique-se de fazer referência à ODT desta vez.

  11. Última: use o caminho completo para soffice , para soffice.bin e para libreoffice e execute cada um com o parâmetro -h :

    $ /path/to/libreoffice -h  # if that path exists, which I doubt!
    $ /path/to/soffice -h
    $ /path/to/soffice.bin -h
    
    • Você obtém uma saída aqui?
    • Para qual dos três binários / links simbólicos?
    • Grave as saídas.
    • Conte-nos suas saídas !!!
       

    Compare-os à linha de comando que você usou:

    • Há alguma alteração nos nomes dos parâmetros, nas capitalizações, no número de traços usados, etc.?

    Para fins de comparação, minha saída (Mac OS X) está aqui:

     $ /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. Adicione mais um argumento à sua linha de comando para impor a aplicação de um filtro de entrada quando soffice abrir seu arquivo DOCX:

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

    ou

    --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"
    
por Kurt Pfeifle 17.06.2016 / 20:38
4

Script do Nautilus

Este script utiliza o libreoffice para converter arquivos compatíveis com o LibreOffice para 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=
    libreoffice --headless --invisible --convert-to pdf --outdir "$base" "$document" 
    shift

done

Para obter instruções de instalação, consulte aqui: Como posso instalar um script do Nautilus

    
por Glutanimate 05.01.2013 / 06:17
2

Nota: Eu decidi deletar minha resposta essa questão e postar uma versão modificada dela aqui quando percebi que unoconv não lida bem com psw , e não os converte com sucesso para outros formatos. Também pode haver problemas com os formatos docx e xlsx .

No entanto, Libreoffice suporta totalmente muitos tipos de arquivos; A documentação completa está disponível no site oficial, que detalha os formatos válidos de entrada e saída.

Você pode usar o utilitário de linha de comando libreoffice convert ou unoconv , que está disponível no repositórios. Acho que unoconv é muito útil e é provavelmente o que você quer. Mesmo que Takkat tenha mencionado brevemente unoconv , achei que seria útil dar mais alguns detalhes e um de conversão em lote -liner.

Usando o terminal, você poderia cd para o diretório que contém seus arquivos e, em seguida, converter em lote todos eles executando uma linha como esta:

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

(Este one-liner é uma modificação do meu script de tradução em destaque nesta resposta .)

Se mais tarde você quiser usar qualquer outro formato de arquivo, basta substituir o odt e pdf por qualquer outro formato de entrada e saída suportado. Você pode encontrar os formatos suportados para um tipo de arquivo digitando unoconv -f odt --show . Para converter um único arquivo, use, por exemplo, unoconv -f pdf myfile.odt .

Mais informações e opções para o programa podem ser encontradas entrando no terminal man unoconv ou indo para o manpages do Ubuntu online .

    
por user76204 10.12.2012 / 21:06
1

Outro script do Nautilus

Este simples e leve Nautilus Script usa unoconv para converter arquivos selecionados compatíveis com o LibreOffice para o 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
    
por Sadi 08.02.2013 / 18:38
0

Considere o uso do serviço docspal ( link ). É grátis, rápido e suporta muitos formatos. Espero que seja útil para você.

    
por Andreas 10.09.2011 / 09:47