我在 CentOS 6 下使用 libreoffice。我可以使用以下命令将 ODT 文件转换为 PDF:
libreoffice --headless --convert-to pdf *.odt
但问题是它只有在 libreoffice 中没有打开文档时才有效。
当我--env:UserInstallation=file:///path/to/some/directory
按照评论之一的建议指定时这个问题 ,这没有帮助。
我究竟做错了什么?在运行 before 命令之前关闭所有 libreoffice 实例很麻烦。
答案1
一种可能的方法是安装unoconv
(如果尚未安装)和
unoconv file.odt
unoconv
详情请见man
unoconv
是一个命令行实用程序,可以将 LibreOffice 可以导入的任何文件格式转换为 LibreOffice 能够导出的任何文件格式。unoconv
使用 LibreOffice 的 UNO 绑定进行非交互式转换......
在某些平台上还需要安装libreoffice-headless
\thanks{Aaron}
答案2
这不太可能起作用,因为评论中的建议既不完整(您不能只指定某个目录)又不正确(--env:...
应该是-env:..
。这是我建议您执行的操作:
- 停止 libreoffice 的所有实例
从命令行启动 libreoffice 而不指定
--headless
:libreoffice -env:UserInstallation=file:///home/username/.config/libreoffice-alt
您应该替换
/home/username
为您的主目录(.config
如果您的 CentOS 上没有该目录,请进行调整,我在 Ubuntu 和 Linux Mint 上执行了此操作)。上面的代码将在 .config 目录中为备用 libreoffice 创建一个新的配置目录,如果没有该目录,您将收到一些有关找不到 java 的错误。- 退出该 libreoffice 实例
/home/username/.config/libreoffice-alt
现在应该已经为您创建了该目录。
现在libreoffice
从命令行启动另一个实例(如果启动第二个实例时出现问题,这样做可以让您看到一些有用的消息),无需-env:...
,并且在仍在运行时使用以下命令启动转换:
libreoffice -env:UserInstallation=file:///home/username/.config/libreoffice-alt --headless --convert-to pdf *.odt
答案3
这是一种完全不同的方法。
这是可能的,因为最近开辟了一系列新的转化路径潘多克的新获得读取 ODT 文件的能力。
当 Pandoc 读取文件格式时,它会将其转换为内部格式“本机”(这是 JSON 的一种形式)。
然后,它可以将文档从其原始格式导出为一系列其他格式。不仅是 PDF,还有 DocBook、HTML、EPUB、DOCX、ASCIIdoc、DokuWiki、MediaWiki 等等...
由于这里想要的输出格式是 PDF,因此我们还有不同路径的另一种选择,由 Pandoc 所提供的pdf引擎。以下是当前可用的 PDF 引擎的列表(适用于 Pandoc v2.7.2 及更高版本 - 以前的版本可能仅支持较小的列表):
pdf乳胶:这需要乳胶除了 Pandoc 之外还要安装。
乳胶:这需要XeLaTeX除了 Pandoc 之外还可以安装(也可以作为通用包的附加包)TeX 发行版)。
语境:这需要语境除了 Pandoc 之外还要安装; ConTeXt 可作为最通用的附加包TeX 发行版)。
pdfroff:这需要GNU罗夫除了 Pandoc 之外还要安装。
wkhtml2pdf:这需要wkhtml转pdf除了 Pandoc 之外还要安装。
王子:这需要PrinceXML除了 Pandoc 之外还要安装。
韦易打印:这需要威易印刷除了 Pandoc 之外还要安装。
Pandoc 中现在集成了一些更多、更新的 PDF 引擎,我自己还没有使用过,目前无法更详细地描述:构造的和乳胶。
警告:不要指望原始文档的外观在所有 PDF 输出中与 ODT 的打印预览或 PDF 导出相同! Pandoc,转换时不保留布局,它保留了内容和结构文件的内容:段落仍然是段落,强调的单词仍然强调,标题仍然是标题,等等。但整体外观可能会发生很大变化。
命令示例
pdf乳胶:
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 特罗夫:
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
韦易打印:
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 厘米)。
答案4
你可以试试这个:
$ libreoffice2 pdf *.odt
无论如何,这个 pb.至少从 libreoffice 6 开始,libreoffice 团队已修复此问题。