Как я могу преобразовать ODT файл в PDF?

Ответы:

68

Просто откройте документ в libre office и выберите « Экспорт в PDF ...» :

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

Для решения командной строки есть unoconv, Установить NAME который преобразует файлы из командной строки:

unoconv -f pdf mydocument.odt

Примечание: только начиная с Ubuntu 11.10 unoconv зависит от Libre Office. Предыдущие версии unoconv (из Ubuntu <= 11.04) зависят от Open Office (но он также будет работать с Libre Office).

Takkat
источник
3
спасибо за упоминание unoconv, это здорово!
Борис Деппен
1
для тех, кто интересуется преимуществами и недостатками командной строки Unoconv vs Libreoffice, эта проблема может помочь: github.com/dagwieers/unoconv/issues/364
Себастьян Лорбер,
@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 vs Libreoffice, эта проблема может помочь: github.com/dagwieers/unoconv/issues/364
Себастьян Лорбер,
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 без вмешательства в возможно работающий первый экземпляр GUI LO, запущенный тем же пользователем.

  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?

Glutanimate
источник
2
Я просто надеюсь, что такая функция, как «lipreoffice», будет и в OSX. Иногда я чувствую, что у меня такие короткие руки, когда мне приходится пользоваться Mac.
Лео Леопольд Герц 준영
2

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


Тем не менее, Libreofficeполностью поддерживает многие типы файлов; Полная документация доступна на официальном сайте, где указаны действительные форматы ввода и вывода.

Вы можете использовать libreofficeутилиту преобразования командной строки или unoconv , которая доступна в репозиториях. Я считаю, unoconvчто это очень полезно, и это, вероятно, то, что вы хотите. Несмотря на то, что Takkat кратко упомянул 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.

  • Принц: Для этого требуется, чтобы PrinceXML был установлен в дополнение к Pandoc.

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

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

ПРЕДУПРЕЖДЕНИЕ. Не ожидайте, что внешний вид вашего исходного документа будет идентичным во всех выходных документах PDF для предварительного просмотра или экспорта ODT в формате PDF! 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: Спасибо, готово.
Курт Пфайфл