如何在 bash 中将 libreoffice ODT 转换为 PDF

如何在 bash 中将 libreoffice ODT 转换为 PDF

我在 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:..。这是我建议您执行的操作:

  1. 停止 libreoffice 的所有实例
  2. 从命令行启动 libreoffice 而不指定--headless

    libreoffice -env:UserInstallation=file:///home/username/.config/libreoffice-alt
    

    您应该替换/home/username 为您的主目录(.config如果您的 CentOS 上没有该目录,请进行调整,我在 Ubuntu 和 Linux Mint 上执行了此操作)。上面的代码将在 .config 目录中为备用 libreoffice 创建一个新的配置目录,如果没有该目录,您将收到一些有关找不到 java 的错误。

  3. 退出该 libreoffice 实例
  4. /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 发行版)。

  • 卢拉泰克斯:这需要LuaTeX除了 Pandoc 之外还可以安装(也可以作为通用包的附加包)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 团队已修复此问题。

相关内容