Bagaimana saya bisa mengkonversi file ODT ke PDF?

Jawaban:

68

Cukup buka dokumen dengan kantor gratis dan pilih Ekspor sebagai PDF ... :

masukkan deskripsi gambar di sini

Untuk solusi baris perintah ada unoconv Pasang NAME yang mengkonversi file dari baris perintah:

unoconv -f pdf mydocument.odt

Catatan: Hanya mulai dari Ubuntu 11.10 unoconv tergantung pada Libre Office. Versi unoconv sebelumnya (dari Ubuntu <= 11.04) bergantung pada Open Office (tetapi juga akan berjalan dengan Libre Office).

Takkat
sumber
3
Terima kasih untuk menyebutkan unoconv, ini luar biasa!
Boris Däppen
1
bagi mereka yang bertanya-tanya apa pro dan kontra dari baris perintah Unoconv vs Libreoffice, masalah ini dapat membantu: github.com/dagwieers/unoconv/issues/364
Sebastien Lorber
@Takkat unoconv tampaknya tidak menemukan lokasi libreoffice5 di MacOS Sierra, katanya unoconv: Cannot find a suitable office installation on your system., karena itu tidak dapat digunakan :(
SebMa
87

Anda juga dapat menggunakan baris perintah libreofficeuntuk tujuan Anda. Itu memberi Anda keuntungan dari konversi batch. Tetapi file tunggal juga dimungkinkan. Contoh ini mengonversi semua file ODT di direktori saat ini ke PDF:

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

Dapatkan informasi lebih lanjut tentang opsi baris perintah dengan:

man libreoffice
Penyadap
sumber
Argumen lain untuk penggunaan baris perintah adalah bahwa misalnya dalam kasus saya gui tiba-tiba mulai menghasilkan pdf yang cacat, tetapi baris perintah masih berfungsi seperti mantra.
Hermann Ingjaldsson
4
Thi9s berfungsi, tetapi memiliki masalah: jika GUI terbuka perintah tidak akan melakukan apa-apa (bahkan tidak menunjukkan kesalahan). Jelek, tapi dengan solusi ini Anda dapat membuka sebuah contoh baru: --env:UserInstallation=file:///path/to/some/directory.
tokland
1
@tokland: Ada laporan bug untuk itu: bugs.freedesktop.org/show_bug.cgi?id=37531
Siput mekanik
1
Saya berhasil mendapatkan konversi batch unoconvjuga. Misalnya saya menggunakan garis dengan unoconv -f pdf *.pptsukses.
XavierStuvw
2
bagi mereka yang bertanya-tanya apa pro dan kontra dari baris perintah Unoconv vs Libreoffice, masalah ini dapat membantu: github.com/dagwieers/unoconv/issues/364
Sebastien Lorber
8

Berikut adalah beberapa detail tentang metode "non-GUI".

  1. Anda dapat menggunakan metode ini tidak hanya untuk mengkonversi file ODT ke PDF. Ini juga akan berfungsi untuk file MS Word DOCX (ini akan bekerja sebaik LibreOffice dapat menangani ODT tertentu), dan, secara umum semua jenis file yang dapat dibuka LibreOffice.

  2. Saya tidak berpikir bahwa ada biner yang dinamai libreofficesebagai salah satu jawaban lain yang disarankan. Namun, ada soffice(.bin)- biner yang dapat digunakan untuk memulai LibreOffice dari baris perintah. Biasanya terletak di /usr/lib/libreoffice/program/; dan sangat sering, symlink /usr/bin/sofficemenunjuk ke lokasi itu.

  3. Kemudian, dalam kebanyakan kasus, parameternya --headless --convert-to pdftidak memadai. Itu harus:

    --headless --convert-to pdf:writer_pdf_Export
    

    Pastikan untuk mengikuti kapitalisasi ini dengan tepat!

  4. Selanjutnya, perintah tidak akan berfungsi jika sudah ada instance GUI LibreOffice dan berjalan pada sistem Anda. Ini disebabkan oleh bug # 37531, yang dikenal sejak 2011 . Tambahkan parameter tambahan ini ke perintah Anda:

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

    Ini akan menciptakan lingkungan baru yang terpisah yang dapat digunakan oleh instance LO tanpa kepala yang kedua tanpa mengganggu instance LO GUI pertama yang berjalan yang dimulai oleh pengguna yang sama.

  5. Juga, pastikan bahwa --outdir /pdfAnda menentukan memang ada, dan bahwa Anda memiliki izin tertulis untuk itu. Atau, lebih baik gunakan dir output yang berbeda. Bahkan jika itu hanya untuk putaran pengujian dan debugging pertama:

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

    /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
    

    Ini berfungsi untuk saya di Mac OS X Yosemite 10.10.5 dengan LibreOffice v5.1.2.2 (menggunakan jalur spesifik saya untuk biner sofficeyang akan berbeda pada Ubuntu ...). Ini juga berfungsi pada Debian Jessie 8.0 (using path /usr/lib/libreoffice/program/soffice). Maaf, tidak dapat mengujinya di Ubuntu sekarang ....

    Jika semua ini tidak berhasil, ketika Anda mencoba memproses DOCX:

  7. Mungkin ada masalah dengan file DOCX spesifik yang Anda coba perintah dengan ... Jadi buat dokumen DOCX yang sangat sederhana terlebih dahulu. Gunakan LibreOffice sendiri untuk ini. Tulis "Halo Dunia!" di halaman yang kosong. Simpan sebagai DOCX.

  8. Coba lagi. Apakah ini berfungsi dengan DOCX sederhana?

  9. Jika lagi tidak berhasil, ulangi langkah 7, tetapi simpan sebagai ODT saat ini.

  10. Ulangi langkah 8, tetapi pastikan untuk referensi ODT saat ini.

  11. Terakhir: Gunakan jalur lengkap ke soffice, ke, soffice.bindan libreofficedan jalankan masing-masing dengan -hparameter:

    $ /path/to/libreoffice -h  # if that path exists, which I doubt!
    $ /path/to/soffice -h
    $ /path/to/soffice.bin -h
    
    • Apakah Anda mendapatkan output di sini?
    • Untuk yang mana dari tiga binari / symlink?
    • Catat hasilnya.
    • Beri tahu kami hasil Anda !!!
       

    Bandingkan mereka dengan baris perintah yang Anda gunakan:

    • Apakah ada perubahan nama parameter, huruf besar, jumlah tanda hubung yang digunakan, dll. ??
       

    Sebagai perbandingan, output saya sendiri (Mac OS X) ada di sini:

     $ /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. Tambahkan satu argumen lagi ke baris perintah Anda untuk menegakkan penerapan filter input saat sofficemembuka file DOCX Anda:

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

    atau

    --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
sumber
fwiw, tdf bug 37531 telah ditandai telah diselesaikan / diperbaiki
myrdd
4

Script Nautilus

Script ini menggunakan libreoffice untuk mengonversi file yang kompatibel dengan LibreOffice ke 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

Untuk instruksi instalasi lihat di sini: Bagaimana saya bisa menginstal skrip Nautilus?

Glutanimate
sumber
2
Saya hanya berharap bahwa fungsi seperti "lipreoffice" akan ada di OSX juga. Terkadang, tangan saya terasa begitu pendek ketika saya harus menggunakan Mac.
Léo Léopold Hertz 준영
2

Catatan: Saya memutuskan untuk menghapus jawaban saya dari pertanyaan ini dan memposting versi modifikasi di sini ketika saya menyadari bahwa unoconvitu tidak menangani pswfile sama sekali, dan tidak berhasil mengubahnya ke format lain. Mungkin juga ada masalah dengan docxdan xlsxformat.


Namun, Libreofficesepenuhnya mendukung banyak jenis file; dokumentasi lengkap tersedia di situs resmi, yang merinci format input dan output yang valid.

Anda bisa menggunakan libreofficeutilitas konversi baris perintah atau unoconv , yang tersedia di repositori. Saya merasa unoconvsangat berguna, dan mungkin itulah yang Anda inginkan. Meskipun Takkat telah disebutkan secara singkat unoconv, saya pikir akan bermanfaat untuk memberikan lebih banyak detail dan konversi batch satu-liner.

Menggunakan terminal yang Anda bisa cdke direktori yang berisi file Anda dan kemudian batch mengkonversi semuanya dengan menjalankan satu-liner seperti ini:

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

(Baris satu ini adalah modifikasi dari naskah terjemahan saya yang ditampilkan dalam jawaban ini .)

Jika nanti Anda ingin menggunakan format file lain, cukup gantikan odtdan pdfuntuk format input dan output yang didukung lainnya. Anda dapat menemukan format yang didukung untuk jenis file dengan memasukkan unoconv -f odt --show. Untuk mengonversi penggunaan satu file, misalnya unoconv -f pdf myfile.odt,.

Informasi lebih lanjut tentang dan opsi untuk program ini dapat ditemukan dengan memasukkan di terminal man unoconvatau dengan pergi ke halaman manual Ubuntu secara online .

Komunitas
sumber
1

Script Nautilus lain

Nautilus Script yang sangat sederhana dan ringan ini digunakan unoconvuntuk mengonversi file terpilih yang kompatibel dengan LibreOffice ke format 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
sumber
1

Saya menambahkan jawaban baru, karena baru-baru ini serangkaian jalur konversi baru dibuka oleh Pandoc untuk mendapatkan kemampuan membaca file ODT.

Ketika Pandoc membaca dalam format file, itu mengubahnya menjadi format internal, "asli" (yang merupakan bentuk JSON).

Dari bentuk aslinya, ia kemudian dapat mengekspor dokumen ke seluruh jajaran format lain. Tidak hanya PDF, tetapi juga DocBook, HTML, EPUB, DOCX, ASCIIdoc, DokuWiki, MediaWiki dan yang lainnya ...

Karena di sini format output yang diinginkan adalah PDF, kami memiliki pilihan lain untuk jalur yang berbeda, disediakan oleh apa yang disebut Pandoc sebagai mesin pdf . Berikut adalah daftar mesin PDF yang tersedia saat ini (berlaku untuk Pandoc v2.7.2 dan yang lebih baru - versi sebelumnya hanya dapat mendukung daftar yang lebih kecil):

  • pdflatex: Ini membutuhkan LaTeX untuk diinstal selain Pandoc.

  • xelatex: Ini membutuhkan XeLaTeX untuk diinstal selain Pandoc (juga tersedia sebagai paket tambahan untuk distribusi TeX umum ).

  • konteks: Ini membutuhkan ConTeXt diinstal selain Pandoc; ConTeXt tersedia sebagai paket tambahan untuk sebagian besar distribusi TeX umum ).

  • lualatex: Ini membutuhkan LuaTeX untuk diinstal selain Pandoc (juga tersedia sebagai paket tambahan untuk distribusi TeX umum ).

  • pdfroff: Ini membutuhkan GNU Roff untuk diinstal selain Pandoc.

  • wkhtml2pdf: Ini mengharuskan wkhtmltopdf diinstal selain Pandoc.

  • pangeran: Ini membutuhkan PrinceXML untuk diinstal selain Pandoc.

  • weasyprint: Ini membutuhkan weasyprint untuk diinstal selain Pandoc.

Ada beberapa mesin PDF yang lebih banyak dan lebih baru sekarang diintegrasikan ke dalam Pandoc, yang saya belum pernah gunakan sendiri dan yang saat ini saya tidak dapat menjelaskan secara lebih rinci: tektonik dan latexmk .

PERINGATAN: Jangan berharap bahwa tampilan dokumen asli Anda akan identik di semua output PDF dengan pratinjau cetak atau ekspor PDF ODT! Pandoc, ketika mengkonversi tidak mempertahankan tata letak , itu mempertahankan isi dan struktur dokumen: paragraf tetap paragraf, kata-kata yang ditekankan tetap ditekankan, heading tetap heading, dll. Tetapi tampilan keseluruhan dapat berubah secara signifikan.

Contoh perintah

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

Konteks:

 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

Perintah di atas adalah yang paling mendasar untuk konversi. Tergantung pada mesin PDF yang Anda pilih, mungkin ada banyak opsi lain yang mungkin untuk mengontrol tampilan file PDF keluaran. Misalnya, parameter tambahan berikut dapat ditambahkan ke semua jalur yang merutekan melalui LaTeX:

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

yang akan menggunakan ukuran halaman khusus (sedikit lebih besar dari DIN A4) dengan margin 2cm di tepi atas dan 1,12cm di tiga tepi lainnya).

Kurt Pfeifle
sumber
Silakan periksa para keempat dari atas. Tampaknya tidak lengkap.
DK Bose
@DKBose: Terima kasih, sudah selesai.
Kurt Pfeifle