ODT
ファイル(LibreOffice)をPDF
に変換する方法を知っている人はいますか?
Libre officeでドキュメントを開き、Export as PDF ...を選択します...:
コマンドラインソリューションの場合、 noconv コマンドラインからファイルを変換します。
unoconv -f pdf mydocument.odt
注:Ubuntu 11.10 unoconvからのみLibre Officeに依存しています。以前のunoconvバージョン(Ubuntu <= 11.04以降)はOpen Officeに依存しています(ただし、Libre Officeでも実行されます)。
目的に合わせてlibreoffice
のコマンドラインを使用することもできます。これにより、バッチ変換の利点が得られます。ただし、単一のファイルも可能です。この例では、現在のディレクトリ内のすべてのODTファイルをPDFに変換します。
libreoffice --headless --convert-to pdf *.odt
次のコマンドラインオプションの詳細を取得します。
man libreoffice
「非GUI」メソッドの詳細を次に示します。
この方法は、ODTファイルをPDFに変換するだけでなく使用できます。また、MS Word DOCXファイル(LibreOfficeが特定のODTを処理できるのと同様に機能します)、およびLibreOfficeで開くことができるすべてのファイルタイプでも機能します。
他の回答の1つが示唆するように、libreoffice
という名前のバイナリがあるとは思いません。ただし、soffice(.bin)
-コマンドラインからLibreOfficeを起動するために使用できるバイナリがあります。通常、/usr/lib/libreoffice/program/
;にあります。そして非常に多くの場合、シンボリックリンク/usr/bin/soffice
はその場所を指します。
次に、ほとんどの場合、パラメータ--headless --convert-to pdf
では不十分です。次のことが必要です。
--headless --convert-to pdf:writer_pdf_Export
必ずこの大文字を使用してください。
次に、システムでLibreOffice GUIインスタンスがすでに稼働している場合、コマンドは機能しません。バグが原因です #37531、2011年以降に知られています 。この追加パラメーターをコマンドに追加します。
"-env:UserInstallation=file:///tmp/LibreOffice_Conversion_${USER}"
これにより、同じユーザーが最初に実行する可能性のある最初のGUI LOインスタンスを妨げることなく、2番目のヘッドレス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
これは、LibreOffice v5.1.2.2を搭載したMac OS X Yosemite 10.10.5で動作します(Ubuntuでは異なるバイナリsoffice
に特定のパスを使用します...)。 Debian Jessie 8.0でも機能します(パス/usr/lib/libreoffice/program/soffice
を使用)。申し訳ありませんが、今はUbuntuでテストできません。..
これがすべてうまくいかない場合、DOCXを処理しようとすると:
コマンドを実行する特定のDOCXファイルに問題がある可能性があります...最初に独自の非常に単純なDOCXドキュメントを作成します。これにはLibreOffice自体を使用します。 「Hello World!」と書くそれ以外の場合は空のページ。 DOCXとして保存します。
再試行する。 シンプルなDOCXで動作しますか?
再び機能しない場合は、手順7を繰り返しますが、今回はODTとして保存します。
手順8を繰り返しますが、今回は必ずODTを参照してください。
最後: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.
soffice
がDOCXファイルを開いたときに入力フィルターの適用を強制するために、コマンドラインにもう1つの引数を追加します。
--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"
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スクリプトをインストールするにはどうすればよいですか?
注:私は答えを削除することにしました この質問から そしてunoconv
がpsw
ファイルをまったくうまく処理しないことに気付いたとき、ここに修正版を投稿することにしました、それらを他の形式に正常に変換しません。 docx
およびxlsx
形式にも問題がある可能性があります。
ただし、Libreoffice
は多くのファイルタイプを完全にサポートしています。 完全なドキュメント は公式サイトで入手でき、有効な入力および出力形式の詳細が記載されています。
コマンドラインlibreoffice
変換ユーティリティまたは noconv を使用できます。これはリポジトリで利用可能です。 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
を入力するか、 buntu manpages online にアクセスしてください。
最近、一連の新しい変換パスがPandocによって開かれたため、新しい答えを追加していますODTファイルを読み取ります。
Pandocがファイル形式を読み取ると、それを内部形式「ネイティブ」(JSONの形式)に変換します。
ネイティブ形式から、ドキュメントを他のさまざまな形式にエクスポートできます。 PDFだけでなく、DocBook、HTML、EPUB、DOCX、ASCIIdoc、DokuWiki、MediaWikiなども...
ここで必要な出力形式はPDFであるため、Pandocがpdf-engineを呼び出しているものによって提供される、異なるパスの別の選択肢があります。以下は、現在利用可能なPDFエンジンのリストです(Pandoc v2.7.2以降で有効です。以前のバージョンでは、より小さいリストのみがサポートされている場合があります)。
pdflatex:これには、Pandocに加えてLaTeXをインストールする必要があります。
xelatex:これには、Pandocに加えてXeLaTeXのインストールが必要です(追加パッケージとして一般 TeX分布 )。
context:これには、Pandocに加えてConTeXtをインストールする必要があります。 ConTeXtは、最も一般的な TeXディストリビューション )の追加パッケージとして利用できます。
lualatex:これには、Pandocに加えてLuaTeXをインストールする必要があります(一般的な TeXディストリビューション )の追加パッケージとしても利用できます。
pdfroff:これには、Pandocに加えてGNU Roffをインストールする必要があります。
wkhtml2pdf:これには、Pandocに加えてwkhtmltopdfをインストールする必要があります。
prince:これには、Pandocに加えてPrinceXMLをインストールする必要があります。
weasyprint:これには、Pandocに加えてweasyprintをインストールする必要があります。
Pandocに統合されたいくつかの新しいPDFエンジンがありますが、これはまだ使用していませんが、詳細を説明することはできません:tectonic =およびlatexmk。
警告:元のドキュメントの外観が、印刷プレビューまたはPDF出力のすべてで同一になるとは思わないでくださいPDF ODTのエクスポート! Pandoc、がレイアウトを保存しない場合、contentsおよびstructure文書:段落は段落のまま、強調された単語は強調されたまま、見出しは見出しのままです。しかし、全体的な外観はかなり変わる可能性があります。
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より少し大きい)を使用し、上部の端に2cm、他の3つの端に1.12cmのマージンを設定します)。
この非常にシンプルで軽量な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