使用命令行中的值填充现有 LibreOffice 文档

Posted

技术标签:

【中文标题】使用命令行中的值填充现有 LibreOffice 文档【英文标题】:Fill an existing LibreOffice document with values from the command line 【发布时间】:2019-05-12 15:10:58 【问题描述】:

我运行了一个 bash 脚本,该脚本在计费运行结束时生成 PDF。我曾经用 LaTeX 做到这一点,但用户要求更多类似 MS Office 的解决方案。所以我正在考虑使用 LibreOffice 文档并在命令行上使用 LibreOffice 来生成 PDF。这样可行。但我不知道如何在生成 PDF 之前将需要更改的值(例如地址和帐单信息)注入该文档。

假设example.odt 文档包含以下文本:

Dear $fist_name,

you own us $amount USD.

Regards
xyz

由于 example.odt 不是很容易从 Bash 脚本编辑,我正在寻找另一种方法来为 $first_name$amount 注入值。

最好的方法是什么?

【问题讨论】:

请查看How to Create a Minimal, Complete, and Verifiable example。您提到了以前的 LaTeX 解决方案,这可能是您帖子中有价值的补充。 您可能首先意识到 ODT 文件只是一个 ZIP 文件。因此,您可以使用unzip -x mydoc.odt 之类的命令解压缩它。内容位于名为 content.xml 的 XML 文件中。 通过 odt 文件的格式化方式,如果您解压缩并手动编辑 content.xml,则无法保证文本会保持在一起。有时它有效,但有点不稳定。 【参考方案1】:

LibreOffice 文件是一个 zip 档案,可以用

解压缩
unzip old.odt -d example
cd example

文件的内容在文件content.xml中。可以使用sed 或任何其他工具进行更改。之后必须再次创建.odt 文件:

zip -r ../new.odt .

之后可以使用此命令创建 PDF(路径来自 OS X):

/Applications/LibreOffice.app/Contents/MacOS/soffice --headless 
--convert-to pdf:writer_pdf_Export --outdir ~/Desktop/ ~/Desktop/new.odt

【讨论】:

以上是关于使用命令行中的值填充现有 LibreOffice 文档的主要内容,如果未能解决你的问题,请参考以下文章

如何在 HTML 表单中“预填充”文本区域的值? [复制]

有条件地显示具有匹配值的单元格的行中的值

用最相似行中的值填充缺失值

将 LibreOffice Writer 中的模板应用到现有文档

如果下面行中的值非空白,则连接列标题

获取使用Javascript单击的行中HTML单元格的值