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

Кто-нибудь знает, как преобразовать ODT файл (LibreOffice) для PDF?

Вы также можете использовать командную строку libreoffice для вашей цели. Это дает вам преимущество пакетного преобразования. Но возможны и отдельные файлы. В этом примере все ODT-файлы в текущем каталоге преобразуются в PDF:

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

Получите дополнительную информацию о параметрах командной строки с помощью:

man libreoffice

Просто откройте документ с помощью libre office и выберите Экспорт в формате PDF...:

enter image description here

Для решения из командной строки существует юноконв который преобразует файлы из командной строки:

unoconv -f pdf mydocument.odt

Примечание: unoconv зависит от Libre Office.

Вот еще несколько подробностей о методе "non-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. Далее, команда не будет работать, если в вашей системе уже запущен и запущен экземпляр LibreOffice GUI. Это вызвано ошибкой №37531, известен с 2011 года. Добавьте этот дополнительный параметр в свою команду:

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

    Это создаст новую отдельную среду, которая может использоваться вторым экземпляром LO без головы, не вмешиваясь в возможно запущенный первый экземпляр 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"

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

Этот скрипт использует 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 directorybase="`python -c 'import gio,sys; print(gio.File(sys.argv[1]).get_path())' $NAUTILUS_SCRIPT_CURRENT_URI`"#Convert documentswhile [ $# -gt 0 ]; do    document=$1    libreoffice --headless --invisible --convert-to pdf --outdir "$base" "$document"     shiftdone

Инструкции по установке см. здесь: Как я могу установить скрипт Nautilus?

Я добавляю новый ответ, потому что в последнее время ряд новых путей преобразования был открыт Пандок получение возможности чтения ODT-файлов.

Когда Pandoc считывает файл в формате файла, он преобразует его во внутренний формат, "родной" (который является формой JSON).

Из своей собственной формы он затем может экспортировать документ в целый ряд других форматов. Не только PDF, но и DocBook, HTML, EPUB, DOCX, AsciiDoc, DokuWiki, MediaWiki и многое другое...

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

  • pdflatex: Для этого требуется Латекс должен быть установлен в дополнение к Pandoc.

  • кселатекс: Для этого требуется Кселатекс устанавливается в дополнение к Pandoc (также доступен в качестве дополнительного пакета к general Дистрибутивы TeX).

  • контекст: Для этого требуется контекст устанавливается в дополнение к Pandoc; ConTeXt доступен в качестве дополнительного пакета для большинства общих Дистрибутивы TeX).

  • луалатекс: Для этого требуется Луатекс устанавливается в дополнение к Pandoc (также доступен в качестве дополнительного пакета к general Дистрибутивы TeX).

  • pdfroff: Для этого требуется GNU Roff должен быть установлен в дополнение к Pandoc.

  • wkhtml2pdf: Для этого требуется wkhtmltopdf должен быть установлен в дополнение к Pandoc.

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

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

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

предупреждение: Не ожидайте, что внешний вид вашего исходного документа будет идентичен во всех выходных данных PDF для предварительного просмотра или экспорта в PDF ODT! Pandoc, при преобразовании не сохраняет макеты, это сохраняет содержание и структура документов: абзацы остаются абзацами, подчеркнутые слова остаются подчеркнутыми, заголовки остаются заголовками и т.д. Но общий вид может значительно измениться.

Примеры команд

pdflatex:

 pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=pdflatex

Кселатекс:

 pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=xelatex

Луалатекс:

 pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=lualatex

контекст:

 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 см по трем другим краям).

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


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

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

Еще один сценарий Наутилуса

Этот очень простой и легкий скрипт Nautilus использует unoconv для преобразования выбранных файлов, совместимых с LibreOffice, в формат PDF:

#!/bin/sh#Nautilus Script to convert selected LibreOffice-compatible file(s) to PDF#OLDIFS=$IFSIFS=""for filename in $@; dounoconv --doctype=document --format=pdf "$filename"doneIFS=$OLDIFS

Связанный (но * не * дубликат!): Как конвертировать pdf-файл в odt-файл?