Як я можу конвертувати ODT-файл у PDF?


Відповіді:


68

Просто відкрийте документ у вільному офісі та оберіть Експортувати як PDF ... :

введіть тут опис зображення

Для рішення командного рядка є unoconv, Встановити NAME який перетворює файли з командного рядка:

unoconv -f pdf mydocument.odt

Примітка. Тільки починаючи з Ubuntu 11.10 unoconv залежить від Libre Office. Попередні версії unoconv (від Ubuntu <= 11.04) залежать від Open Office (але він також працюватиме з Libre Office).


3
THX для згадки unoconv, це чудово!
Борис Даппен

1
для тих, хто цікавиться, які плюси і мінуси командного рядка Unoconv vs Libreoffice, ця проблема може допомогти: github.com/dagwieers/unoconv/isissue/364
Sebastien Lorber

@Takkat unoconv, схоже, не знаходить розташування libreoffice5 на MacOS Sierra, це говорить unoconv: Cannot find a suitable office installation on your system., тому воно непридатне :(
SebMa

87

Ви також можете використовувати командний рядок libreofficeдля своїх цілей. Це дає перевагу пакетного перетворення. Але можливі і окремі файли. Цей приклад перетворює всі файли ODT у поточному каталозі в PDF:

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

Отримайте додаткову інформацію про параметри командного рядка за допомогою:

man libreoffice

Іншим аргументом для використання командного рядка є те, що, наприклад, у моєму випадку гуї раптом почав створювати недорогі PDF-файли, але командний рядок все ще працює як шарм.
Герман Інгяльдссон

4
Thi9s працює, але у нього є проблема: якщо графічний інтерфейс відкритий, команда нічого не зробить (навіть не покаже помилку). Негарно, але з цим обхідним шляхом ви можете відкрити новий екземпляр: --env:UserInstallation=file:///path/to/some/directory.
tokland

1
@tokland: Для цього є звіт про помилку: bugs.freedesktop.org/show_bug.cgi?id=37531
Механічний равлик

1
Мені вдалося також отримати пакетне перетворення unoconv. Наприклад, я unoconv -f pdf *.pptуспішно використовував лінію .
XavierStuvw

2
для тих, хто цікавиться, які плюси і мінуси командного рядка Unoconv проти Libreoffice, це питання може допомогти: github.com/dagwieers/unoconv/isissue/364
Sebastien Lorber

8

Ось ще кілька деталей про метод "не GUI".

  1. Цей метод можна використовувати не лише для перетворення файлів ODT у PDF. Він також буде працювати для файлів MS Word DOCX (він буде працювати так само, як LibreOffice вміє обробляти конкретні ODT), і, як правило, для всіх типів файлів, які LibreOffice може відкрити.

  2. Я не думаю, що є двійковий файл, названий libreofficeяк одна з інших запропонованих відповідей. Однак є soffice(.bin)- двійковий, який можна використовувати для запуску LibreOffice з командного рядка. Зазвичай він знаходиться в /usr/lib/libreoffice/program/; і дуже часто символьне посилання /usr/bin/sofficeвказує на це місце.

  3. Тоді в більшості випадків параметрів --headless --convert-to pdfнедостатньо. Це повинно бути:

    --headless --convert-to pdf:writer_pdf_Export
    

    Не забудьте дотримуватися саме цієї літери!

  4. Далі команда не працюватиме, якщо у вашій системі вже є екземпляр GUI LibreOffice. Її викликає помилка № 37531, відома з 2011 року . Додайте цей додатковий параметр до своєї команди:

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

    Це створить нове окреме середовище, яке може використовуватись другий, безголовий екземпляр LO, не втручаючись у можливо запущений перший екземпляр LO GUI, запущений тим самим користувачем.

  5. Також переконайтесь, що вказане --outdir /pdfвами існує, і що у вас є дозвіл на написання. Або скоріше скористайтеся іншим вихідним режимом. Навіть якщо це лише перший раунд тестування та налагодження:

    $ mkdir ${HOME}/lo_pdfs
    
  6. Звідси:

    /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
    

    Це працює для мене на Mac OS X Yosemite 10.10.5 з LibreOffice v5.1.2.2 (використовуючи мій специфічний шлях для бінарного, sofficeякий у будь-якому випадку буде відрізнятися на Ubuntu ...). Він також працює на Debian Jessie 8.0 (використовуючи шлях /usr/lib/libreoffice/program/soffice). На жаль, наразі не можна перевірити його на Ubuntu ....

    Якщо все це не працює, під час спроби обробити DOCX:

  7. Це може бути проблема з конкретним файлом DOCX, з яким ви намагаєтеся виконати команду ... Отже, спершу створіть дуже простий документ DOCX. Використовуйте для цього сам LibreOffice. Напишіть "Здрастуйте, світ!" на інакше порожній сторінці. Збережіть його як DOCX.

  8. Спробуйте ще раз. Це працює з простим DOCX?

  9. Якщо це знову не працює, повторіть крок 7, але цього разу збережіть як ODT.

  10. Повторіть крок 8, але обов'язково посилайтеся на ODT цього разу.

  11. Останнє: Використовуйте повний шлях до soffice, до soffice.binта до libreofficeта запустіть кожен із -hпараметром:

    $ /path/to/libreoffice -h  # if that path exists, which I doubt!
    $ /path/to/soffice -h
    $ /path/to/soffice.bin -h
    
    • Ви отримуєте тут вихід?
    • Для якого з трьох бінарних файлів / посилань?
    • Запишіть результати.
    • Розкажіть про свої результати !!!
       

    Порівняйте їх із використовуваним командним рядком:

    • Чи є якісь зміни в назвах параметрів, великих літер, кількості використаних тире та ін.
       

    Для порівняння, власний (Mac OS X) вихід тут:

     $ /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. Додайте ще один аргумент у свій командний рядок, щоб застосувати застосування фільтра введення при sofficeвідкритті файлу DOCX:

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

    або

    --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- помилка 37531 позначена як вирішена / виправлена
myrdd

4

Наутілус Сценарій

Цей сценарій використовує libreoffice для перетворення файлів, сумісних з LibreOffice, в 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

Інструкції з установки див. Тут: Як я можу встановити скрипт Nautilus?


2
Я просто сподіваюся, що така функція, як "lipreoffice", буде і в OSX. Іноді я відчуваю свої руки такими короткими, коли мені доводиться користуватися Mac.
Лео Леопольд Герц 준영

2

Примітка. Я вирішив видалити свою відповідь з цього питання та опублікувати тут модифіковану версію, коли зрозумів, що файли unoconvвзагалі не справляється з pswфайлами, і не успішно конвертує їх в інші формати. Там також можуть бути проблеми з docxі xlsxформатами.


Однак Libreofficeповністю підтримує багато типів файлів; Повна документація доступна на офіційному веб-сайті, де детально описані дійсні формати введення та виводу.

Ви можете використовувати libreofficeутиліту для перетворення командного рядка або unoconv , яка доступна у сховищах. Я вважаю, unoconvщо це дуже корисно, і це, мабуть, те, що ви хочете. Незважаючи на те, що Таккат коротко згадував unoconv, я вважав, що було б корисно надати ще детальну інформацію та однолінійний пакетний переклад.

Використовуючи термінал, ви могли б cdпотрапити в каталог, що містить ваші файли, а потім пакетно перетворити їх усі, запустивши однолінійку, як це:

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

(Цей одноклапник - це модифікація мого сценарію перекладу, який міститься у цій відповіді .)

Якщо згодом ви хочете використовувати будь-які інші формати файлів, просто замініть odtі pdfбудь-який інший підтримуваний формат введення та виводу. Ви можете знайти підтримувані формати для типу файлу, ввівши unoconv -f odt --show. Для перетворення одного використання файлів, наприклад, unoconv -f pdf myfile.odt.

Додаткову інформацію та параметри програми можна знайти, ввівши в термінал man unoconvабо зайшовши на веб- сайти Ubuntu в Інтернеті .


1

Ще один сценарій Наутілуса

Цей дуже простий і легкий сценарій Nautilus використовує unoconvдля перетворення вибраних файлів, сумісних з LibreOffice, у формат 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

Я додаю нову відповідь, тому що останнім часом Pandoc відкрив ряд нових шляхів перетворення, набувши можливості читати файли ODT.

Коли Pandoc читає у форматі файлу, він перетворює його у внутрішній формат, "нативний" (що є формою JSON).

Після цього він може експортувати документ у цілу низку інших форматів. Не тільки PDF, але й DocBook, HTML, EPUB, DOCX, ASCIIdoc, DokuWiki, MediaWiki і що-ні ...

Оскільки тут потрібний вихідний формат - PDF, у нас є ще один вибір різних шляхів, передбачених тим, що Pandoc викликає pdf-двигун . Ось перелік доступних на даний момент двигунів PDF (дійсний для Pandoc v2.7.2 і пізніших версій - попередні версії можуть підтримувати лише менший список):

  • pdflatex: Для цього потрібно встановити LaTeX на додаток до Pandoc.

  • xelatex: для цього потрібно встановити XeLaTeX на додаток до Pandoc (також доступний як додатковий пакет до загальних дистрибутивів TeX ).

  • контекст: для цього потрібно встановити ConTeXt на додаток до Pandoc; ConTeXt доступний як додатковий пакет до більшості загальних дистрибутивів TeX ).

  • lualatex: для цього потрібно встановити LuaTeX на додаток до Pandoc (також доступний як додатковий пакет до загальних дистрибутивів TeX ).

  • pdfroff: Для цього потрібно встановити GNU Roff на додаток до Pandoc.

  • wkhtml2pdf: для цього потрібно встановити wkhtmltopdf крім Pandoc.

  • Prince : Для цього потрібно встановити PrinceXML, крім Pandoc.

  • weasyprint: для цього потрібно встановити weasyprint на додаток до Pandoc.

У Pandoc зараз інтегровано кілька нових і новіших двигунів PDF, яких я ще не використовував і які наразі не можу описати більш докладно: тектонічний та латексний .

ПОПЕРЕДЖЕННЯ: Не сподівайтесь, що зовнішній вигляд вашого оригінального документа буде однаковим у всіх виводах PDF до попереднього перегляду друку або експорту PDF у формат ODT! Pandoc при перетворенні не зберігає макетів , він зберігає зміст та структуру документів: абзаци залишаються абзацами, підкреслені слова залишаються підкресленими, заголовки залишаються заголовками тощо. Але загальний вигляд може значно змінитися.

Приклад команд

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

ConTeXt:

 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

Наведені вище команди є найбільш основними для перетворення. Залежно від вибраного двигуна PDF, можливо, існує багато інших варіантів контролю зовнішнього вигляду вихідного PDF-файлу. Наприклад, наступні додаткові параметри можуть бути додані до всіх цих шляхів, що проходять через LaTeX:

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

яка використовуватиме нестандартний розмір сторінки (трохи більший за DIN A4) з полями 2 см на верхньому краї та 1,12 см на інших трьох краях).


Перевірте четвертий пункт зверху. Це видається неповним.
ДК Босе

@DKBose: Thx, зроблено.
Курт Пфайфл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.