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

Если вы пытаетесь удалить пакет

apt search transmission | grep installed

, будут отображаться только установленные пакеты

1
задан 9 November 2013 в 05:47

6 ответов

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

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

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

man libreoffice
72
ответ дан 25 May 2018 в 18:54
  • 1
    Другим аргументом в пользу использования командной строки является то, что, например, в моем случае gui внезапно начал создавать ошибочные pdf-файлы, но командная строка по-прежнему работает как шарм. – Hermann Ingjaldsson 27 February 2013 в 20:16
  • 2
    Thi9s работает, но у него есть проблема: если GUI открыт, команда ничего не сделает (даже не покажет ошибку). Ужасно, но с этим обходным путем вы можете открыть новый экземпляр: --env:UserInstallation=file:///path/to/some/directory. – tokland 16 September 2013 в 18:14
  • 3
    @tokland: для этого есть отчет об ошибке: bugs.freedesktop.org/show_bug.cgi?id=37531 – Mechanical snail 2 December 2013 в 08:02
  • 4
    Мне удалось получить пакетное преобразование с unoconv. Например, я успешно использовал строку unoconv -f pdf *.ppt. – XavierStuvw 7 August 2016 в 20:22
  • 5
    для тех, кто задается вопросом, что за плюсы и минусы командной строки Unoconv vs Libreoffice, эта проблема может помочь: github.com/dagwieers/unoconv/issues/364 – Sebastien Lorber 4 November 2016 в 16:17

Ниже приведены несколько дополнительных сведений о методе «не GUI».

Вы можете использовать этот метод не только для преобразования файлов ODT в PDF. Он также будет работать для файлов MS Word DOCX (он будет работать так же, как LibreOffice способен обрабатывать конкретный ODT), и, в общем, все типы файлов, которые LibreOffice может открыть. Я не думаю, что существует двоичный файл с именем libreoffice в качестве одного из других предложенных ответов. Однако есть soffice(.bin) - двоичный файл, который можно использовать для запуска LibreOffice из командной строки. Он обычно находится в /usr/lib/libreoffice/program/; и очень часто символическая ссылка /usr/bin/soffice указывает на это местоположение. Тогда в большинстве случаев параметры --headless --convert-to pdf недостаточны. Это должно быть:
--headless --convert-to pdf:writer_pdf_Export
Обязательно следуйте именно этой капитализации! Затем команда не будет работать, если в вашей системе уже запущен и запущен графический интерфейс LibreOffice. Это вызвано ошибкой # 37531, известной с 2011 года. Добавьте этот дополнительный параметр в свою команду:
 "-env:UserInstallation=file:///tmp/LibreOffice_Conversion_${USER}"
Это создаст новую отдельную среду, которая может использоваться вторым, безгласным LO экземпляром без вмешательства в возможно запущенный первый GUI LO, запущенный одним и тем же пользователем. Кроме того, убедитесь, что указанный вами --outdir /pdf существует, и что у вас есть разрешение на запись на него. Или, скорее, используйте другой выходной каталог. Даже если это просто первый раунд тестирования и отладки:
$ mkdir ${HOME}/lo_pdfs
Следовательно:
/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: может быть, проблема с конкретным файлом DOCX, с которым вы пытаетесь выполнить команду ... Итак, создайте очень простой документ DOCX. Для этого используйте LibreOffice. Напишите «Привет, мир!» на другой пустой странице. Сохраните его как DOCX. Попробуй еще раз. Работает ли он с простым DOCX? Если он снова не работает, повторите шаг 7, но на этот раз сохраните его как ODT. Повторите шаг 8, но не забудьте указать ODT на этот раз. Last: Используйте полный путь к 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
Вы получаете здесь результат? Для какого из трех бинарных / символических ссылок? Запишите выходы. Расскажите нам свои результаты !!! & NBSP; Сравните их с используемой командной строкой: есть ли какие-либо изменения в именах параметров, капитализации, количестве используемых тире и т. Д.? & NBSP; Для сравнения, мой собственный (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.
Добавьте еще один аргумент в свою командную строку, чтобы обеспечить применение фильтра ввода, когда 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"
[ ! d1]
5
ответ дан 25 May 2018 в 18:54

Nautilus Script

Этот скрипт использует 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? [ ! d3]

4
ответ дан 25 May 2018 в 18:54
  • 1
    Я просто надеюсь, что такая функция, как "lipreoffice" будет также в OSX. Иногда я чувствую, что мои руки так коротки, когда я должен использовать Mac. – Léo Léopold Hertz 준영 7 March 2013 в 00:31

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

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

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

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

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

(Этот однострочный шрифт является модификацией моего скрипта перевода, представленного unoconv .) [ ! d9]

Если позже вы захотите использовать любые другие форматы файлов, просто замените odt и pdf на любые другие поддерживаемые форматы ввода и вывода. Вы можете найти поддерживаемые форматы для типа файла, введя unoconv -f odt --show. Чтобы преобразовать один файл, используйте, например, unoconv -f pdf myfile.odt.

Дополнительная информация и параметры программы можно найти, введя терминал man unoconv или перейдя в страницы Ubuntu онлайн.

2
ответ дан 25 May 2018 в 18:54

Другой скрипт Nautilus

Этот очень простой и легкий сценарий 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
ответ дан 25 May 2018 в 18:54

Рассмотрите возможность использования службы docspal (http://www.docspal.com). Он бесплатный, быстрый и поддерживает множество форматов. Надеюсь, это будет полезно для вас.

0
ответ дан 25 May 2018 в 18:54

Другие вопросы по тегам:

Похожие вопросы: