有人知道如何将ODT
文件(LibreOffice)转换为吗PDF
?
答案1
您还可以使用命令行libreoffice
来实现您的目的。这为您提供了批量转换的优势。但单个文件也是可能的。此示例将当前目录中的所有 ODT 文件转换为 PDF:
libreoffice --convert-to pdf *.odt
在 LibreOffice 7.5.5.2 50(Build:2)、Ubuntu 23.04 上测试。
早期版本的 libreoffice 可能还需要--headless
阻止 GUI 打开的选项:
libreoffice --headless --convert-to pdf *.odt
但 7.5.5.2--help
规定这--convert-to
意味着--headless
:
--convert-to OutputFileExtension[:OutputFilterName]
批量转换文件(隐含 --headless)。如果未指定 --outdir,则当前工作目录将用作 output_dir。
使用以下命令获取有关命令行选项的更多信息:
man libreoffice
答案2
只需使用 libre office 打开文档并选择导出为 PDF...:
对于命令行解决方案反卷积从命令行转换文件:
unoconv -f pdf mydocument.odt
笔记:unoconv 依赖于 Libre Office。
答案3
以下是有关“非 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 GUI 实例,则该命令将不起作用。这是由错误引起的#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
在我使用 LibreOffice v5.1.2.2 的 Mac OS X Yosemite 10.10.5 上,此方法有效(使用我指定的二进制文件路径,
soffice
但在 Ubuntu 上会有所不同...)。它也适用于 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 文件时,在命令行中添加一个参数以强制应用输入过滤器:--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"
答案4
我正在添加一个新答案,因为最近一系列新的转换路径被打开了潘多克获得读取 ODT 文件的能力。
当 Pandoc 读取文件格式时,它会将其转换为内部格式“本机”(JSON 的一种形式)。
然后,它可以将文档从其原始格式导出为一系列其他格式。不仅是 PDF,还有 DocBook、HTML、EPUB、DOCX、ASCIIdoc、DokuWiki、MediaWiki 等等……
由于这里想要的输出格式是 PDF,我们还有另一种不同的路径选择,由 Pandoc 所称的pdf 引擎。以下是当前可用的 PDF 引擎列表(适用于 Pandoc v2.7.2 及更高版本 - 以前的版本可能仅支持较小的列表):
pdflatex:这需要乳胶除了 Pandoc 之外还需要安装。
xelatex:这需要西拉特克斯除了 Pandoc 之外还要安装(也可以作为一般TeX 发行版)。
语境:这需要语境除了 Pandoc 之外还需要安装;ConTeXt 可作为大多数通用TeX 发行版)。
pdfroff:这需要GNU罗夫除了 Pandoc 之外还需要安装。
wkhtml2pdf:这需要转PDF除了 Pandoc 之外还需要安装。
王子:这需要PrinceXML除了 Pandoc 之外还需要安装。
weeasyprint:这需要韋斯印除了 Pandoc 之外还需要安装。
Pandoc 中现在集成了一些更新的 PDF 引擎,我自己还没有使用过,目前无法更详细地描述:构造和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
语境:
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
weeasyprint:
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 厘米)。