Respostas:
Basta abrir o documento com o libre office e escolher Exportar como PDF ... :
Para uma solução de linha de comando, há um unconv 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).
unoconv
, é ótimo!
unoconv: Cannot find a suitable office installation on your system.
, portanto, é inutilizável :(
Você também pode usar a linha de comando libreoffice
para 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
--env:UserInstallation=file:///path/to/some/directory
.
unoconv
. Por exemplo, usei a linha com unoconv -f pdf *.ppt
sucesso.
Aqui estão mais alguns detalhes sobre o método "non-GUI".
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.
Eu não acho que exista um binário nomeado 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.
Então, 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 essa capitalização!
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.
Além disso, verifique se o que --outdir /pdf
você 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
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 soffice
que 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:
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.
Tente novamente. Funciona com o DOCX simples?
Se não funcionar novamente, repita a etapa 7, mas salve como ODT neste momento.
Repita a etapa 8, mas certifique-se de referenciar o ODT neste momento.
Último: use o caminho completo para soffice
, para soffice.bin
e para libreoffice
e execute cada um com o -h
parâmetro:
$ /path/to/libreoffice -h # if that path exists, which I doubt!
$ /path/to/soffice -h
$ /path/to/soffice.bin -h
Compare-os com a linha de comando que você usou:
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.
Adicione mais um argumento à sua linha de comandos para impor a aplicação de um filtro de entrada quando soffice
abrir 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"
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?
Nota: Decidi excluir minha resposta desta pergunta e postar aqui uma versão modificada quando percebi que unoconv
isso não lida muito bem com psw
arquivos e não os converte com sucesso em outros formatos. Também pode haver problemas com docx
e xlsx
formatos.
No entanto, Libreoffice
suporta 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 libreoffice
utilitário de conversão da linha de comandos ou o unoconv , disponível nos repositórios. Eu acho unoconv
que é 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 cd
acessar 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 odt
e pdf
para 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 unoconv
ou acessando as páginas de manual do Ubuntu .
Este script Nautilus muito simples e leve 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
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.
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).