Come posso convertire un file ODT in un PDF?


Risposte:


68

Basta aprire il documento con libre office e scegliere Esporta come PDF ... :

inserisci qui la descrizione dell'immagine

Per una soluzione a riga di comando esiste unoconv Installa NAME che converte i file dalla riga di comando:

unoconv -f pdf mydocument.odt

Nota: solo l'avvio da Ubuntu 11.10 unoconv dipende da Libre Office. Le versioni unoconv precedenti (da Ubuntu <= 11.04) dipendono da Open Office (ma funzioneranno anche con Libre Office).


3
grazie per la menzione unoconv, è fantastico!
Boris Däppen,

1
per coloro che si chiedono quali siano i pro e i contro della riga di comando di Unoconv vs Libreoffice, questo problema potrebbe aiutare: github.com/dagwieers/unoconv/issues/364
Sebastien Lorber

@Takkat unoconv non sembra trovare la posizione di libreoffice5 su MacOS Sierra, dice unoconv: Cannot find a suitable office installation on your system., quindi è inutilizzabile :(
SebMa

87

Puoi anche usare la riga di comando di libreofficeper il tuo scopo. Questo ti dà il vantaggio della conversione batch. Ma sono anche possibili file singoli. Questo esempio converte tutti i file ODT nella directory corrente in PDF:

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

Ottieni maggiori informazioni sulle opzioni della riga di comando con:

man libreoffice

Un altro argomento per l'utilizzo della riga di comando è che, ad esempio, nel mio caso la GUI ha iniziato improvvisamente a produrre pdf difettosi, ma la riga di comando funziona ancora come un fascino.
Hermann Ingjaldsson,

4
Thi9s funziona, ma ha un problema: se la GUI è aperta il comando non farà nulla (nemmeno mostrerà un errore). Brutto, ma con questa soluzione è possibile aprire una nuova istanza: --env:UserInstallation=file:///path/to/some/directory.
tokland

1
@tokland: esiste una segnalazione di bug per questo: bugs.freedesktop.org/show_bug.cgi?id=37531
Lumaca meccanica

1
Sono riuscito a ottenere anche la conversione batch unoconv. Ad esempio ho usato la linea unoconv -f pdf *.pptcon successo.
XavierStuvw,

2
per coloro che si chiedono quali siano i pro e i contro della riga di comando di Unoconv vs Libreoffice, questo problema potrebbe aiutare: github.com/dagwieers/unoconv/issues/364
Sebastien Lorber

8

Ecco alcuni dettagli in più sul metodo "non GUI".

  1. È possibile utilizzare questo metodo non solo per convertire i file ODT in PDF. Funzionerà anche con i file DOCX di MS Word (funzionerà così come LibreOffice è in grado di gestire il particolare ODT) e, in generale, tutti i tipi di file che LibreOffice può aprire.

  2. Non penso che esista un binario chiamato libreofficecome una delle altre risposte suggerite. Tuttavia, c'è soffice(.bin)- il binario che può essere usato per avviare LibreOffice dalla riga di comando. Di solito si trova in /usr/lib/libreoffice/program/; e molto spesso, un collegamento simbolico /usr/bin/sofficepunta a quella posizione.

  3. Quindi, nella maggior parte dei casi i parametri --headless --convert-to pdfnon sono sufficienti. Deve essere:

    --headless --convert-to pdf:writer_pdf_Export
    

    Assicurati di seguire esattamente questa capitalizzazione!

  4. Successivamente, il comando non funzionerà se sul tuo sistema è già attiva un'istanza della GUI di LibreOffice. È causato dal bug # 37531, noto dal 2011 . Aggiungi questo parametro aggiuntivo al tuo comando:

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

    Ciò creerà un nuovo ambiente separato che può essere utilizzato da una seconda istanza LO senza testa senza interferire con una prima istanza LO GUI eventualmente in esecuzione avviata dallo stesso utente.

  5. Inoltre, assicurati che l'oggetto --outdir /pdfspecificato esista e che tu abbia il permesso di scrivere. In alternativa, utilizzare una directory di output diversa. Anche se è solo per un primo round di test e debug:

    $ mkdir ${HOME}/lo_pdfs
    
  6. Quindi:

    /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
    

    Questo funziona per me su Mac OS X Yosemite 10.10.5 con LibreOffice v5.1.2.2 (usando il mio percorso specifico per il binario sofficeche sarà comunque diverso su Ubuntu ...). Funziona anche su Debian Jessie 8.0 (usando path /usr/lib/libreoffice/program/soffice). Spiacenti, non posso provarlo su Ubuntu in questo momento ....

    Se tutto ciò non funziona, quando si tenta di elaborare DOCX:

  7. Potrebbe essere un problema con il file DOCX specifico con cui provi il comando ... Quindi crea prima un documento DOCX molto semplice. Usa LibreOffice stesso per questo. Scrivi "Hello World!" su una pagina altrimenti vuota. Salvalo come DOCX.

  8. Riprova. Funziona con il semplice DOCX?

  9. Se di nuovo non funziona, ripeti il ​​passaggio 7, ma salva come ODT questa volta.

  10. Ripetere il passaggio 8, ma assicurarsi di fare riferimento a ODT questa volta.

  11. Ultimo: utilizzare il percorso completo verso soffice, verso soffice.bine verso libreofficeed eseguire ciascuno con il -hparametro:

    $ /path/to/libreoffice -h  # if that path exists, which I doubt!
    $ /path/to/soffice -h
    $ /path/to/soffice.bin -h
    
    • Ottieni un output qui?
    • Per quale dei tre binari / symlink?
    • Registra le uscite.
    • Raccontaci le tue uscite !!!
       

    Confrontali con la riga di comando che hai usato:

    • Ci sono cambiamenti nei nomi dei parametri, maiuscole, numero di trattini utilizzati, ecc. ??
       

    Per fare un confronto, il mio output (Mac OS X) è qui:

     $ /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. Aggiungi un altro argomento alla tua riga di comando per imporre l'applicazione di un filtro di input quando sofficeapre il tuo file 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"
    

fwiw, tdf bug 37531 è stato contrassegnato come risolto / corretto
myrdd il

4

Script Nautilus

Questo script utilizza libreoffice per convertire i file compatibili con LibreOffice in 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

Per le istruzioni di installazione vedi qui: Come posso installare uno script Nautilus?


2
Spero solo che funzioni come "lipreoffice" siano presenti anche in OSX. A volte, mi sento le mani così corte quando devo usare il Mac.
Léo Léopold Hertz

2

Nota: ho deciso di eliminare la mia risposta da questa domanda e di pubblicarne una versione modificata quando mi sono reso conto che unoconvnon tratta affatto i pswfile e non li converte correttamente in altri formati. Potrebbero inoltre esserci problemi con docxe xlsxformati.


Tuttavia, Libreofficesupporta pienamente molti tipi di file; la documentazione completa è disponibile sul sito ufficiale, che dettaglia i formati di input e output validi.

È possibile utilizzare l' libreofficeutilità di conversione da riga di comando o unoconv , disponibile nei repository. Trovo unoconvche sia molto utile, ed è probabilmente quello che vuoi. Anche se Takkat ha accennato brevemente unoconv, ho pensato che sarebbe stato utile fornire qualche dettaglio in più e una conversione di lotti in una riga.

Utilizzando il terminale è possibile cdaccedere alla directory contenente i file e quindi convertirli tutti in batch eseguendo un one-liner in questo modo:

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

(Questo one-liner è una modifica del mio script di traduzione presente in questa risposta .)

Se in seguito si desidera utilizzare altri formati di file, è sufficiente sostituire odte pdfcon altri formati di input e output supportati. È possibile trovare i formati supportati per un tipo di file immettendo unoconv -f odt --show. Per convertire un singolo file utilizzare, ad esempio unoconv -f pdf myfile.odt,.

Ulteriori informazioni e opzioni per il programma sono disponibili accedendo al terminale man unoconvo andando alle manpage di Ubuntu online .


1

Un altro script di Nautilus

Questo script Nautilus molto semplice e leggero utilizza unoconvper convertire i file selezionati compatibili con LibreOffice in 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

1

Sto aggiungendo una nuova risposta, perché negli ultimi tempi una serie di nuovi percorsi di conversione sono stati aperti da Pandoc ottenendo la capacità di leggere i file ODT.

Quando Pandoc legge in un formato di file, lo converte in un formato interno, "nativo" (che è una forma di JSON).

Dalla sua forma nativa, può quindi esportare il documento in un'intera gamma di altri formati. Non solo PDF, ma anche DocBook, HTML, EPUB, DOCX, ASCIIdoc, DokuWiki, MediaWiki e quant'altro ...

Poiché qui il formato di output desiderato è PDF, abbiamo un'altra scelta di percorsi diversi, forniti da quello che Pandoc chiama un motore pdf . Ecco l'elenco dei motori PDF attualmente disponibili (valido per Pandoc v2.7.2 e versioni successive - le versioni precedenti potrebbero supportare solo un elenco più piccolo):

  • pdflatex: richiede l' installazione di LaTeX oltre a Pandoc.

  • xelatex: questo richiede l' installazione di XeLaTeX in aggiunta a Pandoc (disponibile anche come pacchetto aggiuntivo per le distribuzioni TeX generali ).

  • contesto: richiede l' installazione di ConTeXt oltre a Pandoc; ConTeXt è disponibile come pacchetto aggiuntivo per la maggior parte delle distribuzioni TeX generali ).

  • lualatex: questo richiede l' installazione di LuaTeX in aggiunta a Pandoc (disponibile anche come pacchetto aggiuntivo per le distribuzioni TeX generali ).

  • pdfroff: questo richiede l' installazione di GNU Roff oltre a Pandoc.

  • wkhtml2pdf: richiede l' installazione di wkhtmltopdf oltre a Pandoc.

  • principe: questo richiede l' installazione di PrinceXML oltre a Pandoc.

  • weasyprint: richiede l' installazione di weasyprint oltre a Pandoc.

Ci sono alcuni motori PDF sempre più recenti ora integrati in Pandoc, che non ho ancora usato me stesso e che attualmente non posso descrivere in modo più dettagliato: tettonico e latexmk .

ATTENZIONE: Non aspettarti che l'aspetto del tuo documento originale sia identico in tutti gli output PDF all'anteprima di stampa o all'esportazione PDF dell'ODT! Pandoc, quando la conversione non conserva i layout , preserva il contenuto e la struttura dei documenti: i paragrafi rimangono paragrafi, le parole enfatizzate rimangono enfatizzate, le intestazioni rimangono intestazioni, ecc. Ma l'aspetto generale può cambiare considerevolmente.

Comandi di esempio

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

Contesto:

 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

I comandi sopra sono i più basilari per la conversione. A seconda del motore PDF selezionato, potrebbero essere disponibili molte altre opzioni per controllare l'aspetto del file PDF di output. Ad esempio, i seguenti parametri aggiuntivi possono essere aggiunti a tutti quei percorsi di routing tramite LaTeX:

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

che utilizzerà un formato pagina personalizzato (un po 'più grande di DIN A4) con margini di 2 cm sul bordo superiore e 1,12 cm sugli altri tre bordi).


Si prega di controllare il quarto paragrafo dall'alto. Sembra incompleto.
DK Bose,

@DKBose: Grazie, fatto.
Kurt Pfeifle,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.