Como posso converter um arquivo ODT para um PDF?

Respostas:

68

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

insira a descrição da imagem aqui

Para uma solução de linha de comando, há um unconv Instalar NAME 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 unoconv anteriores (do Ubuntu <= 11.04) dependem do Open Office (mas também serão executadas com o Libre Office).

Takkat
fonte
3
thx por mencionar unoconv, é ótimo!
Boris Däppen
1
para aqueles que querem saber o que é prós e contras de Unoconv vs linha de comando LibreOffice, esta questão pode ajudar: github.com/dagwieers/unoconv/issues/364
Sebastien Lorber
@Takkat unoconv não parece encontrar a localização libreoffice5 no MacOS Sierra, ele diz unoconv: Cannot find a suitable office installation on your system., portanto, é inutilizável :(
SebMa
87

Você também pode usar a linha de comando libreofficepara seu propósito. Isso oferece 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 em PDF:

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

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

man libreoffice
Tapper
fonte
Outro argumento para o uso da linha de comando é que, por exemplo, no meu caso, a GUI repentinamente começou a produzir pdf defeituosos, mas a linha de comando ainda funciona como um encanto.
Hermann Ingjaldsson 27/02
4
O Thi9s funciona, mas há um problema: se a GUI estiver aberta, o comando não fará nada (nem mostra um erro). Feio, mas com esta solução alternativa pode abrir uma nova instância: --env:UserInstallation=file:///path/to/some/directory.
tokland
1
@tokland: Existe um relatório de erro para isso: bugs.freedesktop.org/show_bug.cgi?id=37531
Caracol mecânico
1
Também consegui obter conversão em lote unoconv. Por exemplo, usei a linha com unoconv -f pdf *.pptsucesso.
XavierStuvw
2
para aqueles que querem saber o que é prós e contras de Unoconv vs linha de comando LibreOffice, esta questão pode ajudar: github.com/dagwieers/unoconv/issues/364
Sebastien Lorber
8

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

  1. Você pode usar esse método não apenas para converter arquivos ODT em PDF. Ele também funcionará para arquivos DOCX do MS Word (funcionará como o LibreOffice é capaz de lidar com a ODT específica) e, em geral, todos os tipos de arquivos que o LibreOffice pode abrir.

  2. Eu não acho que exista um binário nomeado libreofficecomo 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/sofficeaponta para esse local.

  3. Então, na maioria dos casos, os parâmetros --headless --convert-to pdfnão são suficientes. Precisa ser:

    --headless --convert-to pdf:writer_pdf_Export
    

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

  4. Em seguida, o comando não funcionará se já houver uma instância da GUI do LibreOffice em funcionamento no 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 ambiente novo e separado que pode ser usado por uma segunda instância LO sem cabeçalho, sem interferir com uma possivelmente primeira instância da GUI LO em execução iniciada pelo mesmo usuário.

  5. Além disso, verifique se o que --outdir /pdfvocê especificar existe e se possui permissão de gravação. Ou melhor, use um dir de saída diferente. Mesmo que seja apenas para uma primeira rodada de testes e depuração:

    $ mkdir ${HOME}/lo_pdfs
    
  6. Conseqüentemente:

    /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 LibreOffice v5.1.2.2 (usando meu caminho específico para o binário sofficeque será diferente no Ubuntu de qualquer maneira ...). Também funciona no Debian Jessie 8.0 (usando o path /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ê tenta o comando ... Portanto, primeiro crie um documento DOCX muito simples. Use o próprio LibreOffice para isso. Escreva "Olá, mundo!" em uma página vazia. Salve-o como DOCX.

  8. Tente novamente. Funciona com o DOCX simples?

  9. Se não funcionar novamente, repita a etapa 7, mas salve como ODT neste momento.

  10. Repita a etapa 8, mas certifique-se de referenciar o ODT neste momento.

  11. Último: use o caminho completo para soffice, para soffice.bine para libreofficee execute cada um com o -hparâmetro:

    $ /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 com a linha de comando que você usou:

    • Existem alterações nos nomes dos parâmetros, maiúsculas, número de traços usados, etc. ??
       

    Para comparação, minha própria 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 comandos para impor a aplicação de um filtro de entrada quando sofficeabrir o 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"
    
Kurt Pfeifle
fonte
fwiw, tdf bug 37531 foi marcado como resolvido / corrigido
myrdd 19/08/08
4

Script 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=$1
    libreoffice --headless --invisible --convert-to pdf --outdir "$base" "$document" 
    shift

done

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

Glutanimado
fonte
2
Eu só espero que essa função como "lipreoffice" também esteja no OSX. Às vezes, sinto minhas mãos tão curtas quando preciso usar o Mac.
Léo Léopold Hertz ·
2

Nota: Decidi excluir minha resposta desta pergunta e postar aqui uma versão modificada quando percebi que unoconvisso não lida muito bem com pswarquivos e não os converte com sucesso em outros formatos. Também pode haver problemas com docxe xlsxformatos.


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

Você pode usar o libreofficeutilitário de conversão da linha de comandos ou o unoconv , disponível nos repositórios. Eu acho unoconvque é muito útil, e é provavelmente o que você quer. Embora Takkat tenha mencionado brevemente unoconv, pensei que seria útil fornecer mais alguns detalhes e uma linha de conversão em lote.

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

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

(Essa linha única é uma modificação do meu script de tradução apresentado nesta resposta .)

Se mais tarde você quiser usar quaisquer outros formatos de arquivo, basta substituir o odte pdfpara quaisquer outros formatos de entrada e saída suportados. 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 unoconvou acessando as páginas de manual do Ubuntu .

Comunidade
fonte
1

Outro script do Nautilus

Este script Nautilus muito simples e leve usa unoconvpara 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
Sadi
fonte
1

Estou adicionando uma nova resposta, porque nos últimos tempos uma série de novos caminhos de conversão foi aberta pelo Pandoc, ganhando a capacidade de ler arquivos ODT.

Quando o Pandoc lê em um formato de arquivo, ele o converte em um formato interno, "nativo" (que é uma forma de JSON).

A partir de sua forma nativa, ele pode exportar o documento para vários outros formatos. Não apenas PDF, mas também DocBook, HTML, EPUB, DOCX, ASCIIdoc, DokuWiki, MediaWiki e o que não ...

Como aqui o formato de saída desejado é o PDF, temos outra opção de caminhos diferentes, fornecidos pelo que Pandoc está chamando de mecanismo de pdf . Aqui está a lista dos mecanismos PDF disponíveis no momento (válidos para Pandoc v2.7.2 e posterior - as versões anteriores podem suportar apenas uma lista menor):

  • pdflatex: Isso requer que o LaTeX seja instalado além do Pandoc.

  • xelatex: Isso requer que o XeLaTeX seja instalado além do Pandoc (também disponível como um pacote adicional para distribuições gerais do TeX ).

  • contexto: Isso requer que o ConTeXt seja instalado além do Pandoc; O ConTeXt está disponível como um pacote adicional para a maioria das distribuições gerais de TeX .

  • lualatex: Isso requer que o LuaTeX seja instalado além do Pandoc (também disponível como um pacote adicional para distribuições gerais do TeX ).

  • pdfroff: Isso requer que o GNU Roff seja instalado além do Pandoc.

  • wkhtml2pdf: Isso requer que o wkhtmltopdf seja instalado além do Pandoc.

  • prince: Isso requer que o PrinceXML seja instalado além do Pandoc.

  • weasyprint: Isso requer que o weasyprint seja instalado além do Pandoc.

Existem agora mais e mais novos mecanismos PDF integrados ao Pandoc, que ainda não usei e que atualmente não consigo descrever em mais detalhes: tectônico e latexmk .

AVISO: Não espere que a aparência do documento original seja idêntica em todas as saídas em PDF à visualização de impressão ou exportação em PDF do ODT! Pandoc, ao converter não preserva layouts , preserva o conteúdo e a estrutura dos documentos: parágrafos permanecem parágrafos, palavras enfatizadas permanecem enfatizadas, cabeçalhos permanecem cabeçalhos, etc. Mas a aparência geral pode mudar consideravelmente.

Comandos de exemplo

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

Troff GNU:

 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

Os comandos acima são os mais básicos para a conversão. Dependendo do mecanismo de PDF escolhido, pode haver muitas outras opções possíveis para controlar a aparência do arquivo PDF de saída. Por exemplo, os seguintes parâmetros adicionais podem ser adicionados a todos esses caminhos roteados pelo LaTeX:

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

que usará um tamanho de página personalizado (um pouco maior que DIN A4) com margens de 2 cm na borda superior e 1,12 cm nas outras três bordas).

Kurt Pfeifle
fonte
Por favor, verifique o quarto parágrafo do topo. Parece incompleto.
DK Bose
@ DKBose: Thx, pronto.
Kurt Pfeifle