2

我有一个公司提出的大约 3000 种产品的关系数据库(PostgreSQL 8.4)。该数据库用于在公司网站上显示产品(在 python 2.6 应用程序上运行)。我的最终目标是构建一个 PDF 文件以打印产品目录的纸质版本,我想知道为此目的使用什么技术。对于每个新目录,该操作必须每年重复一次,所以我想自动化目录生成,但仍然提供一些灵活性,因为我不会永远留在公司,并且没有技术人员可以取代我(小公司,小预算)。

理想情况下,我想在文本编辑器(例如 OpenOffice)中动态生成 3000 个产品的结构化内容,原因如下:

  • 内容是动态生成的,因此无需重新输入所有内容
  • 只有内容结构是动态生成的,而不是样式,因此非技术用户可以自定义样式。
  • 该文档是可编辑的,非技术用户可以轻松地在目录中添加页面,例如欢迎页面、注释页面、条款和条件。换句话说,文本编辑器很棒,我不想重新发明轮子,但我不想让一个人重新输入 3000 种产品的所有数据。

苏苏斯首先看了:

  • 我看了一下 LaTeX,但似乎数据和样式混合在一起,与 HTML 和 CSS 相反,它们清楚地将内容和样式分开,我发现这更容易使用。
  • 我考虑过直接使用 HTML 和 CSS,但它可能过于技术化。
  • 我还查看了一个允许直接从 Python 生成 PDF 的库,例如 ReportLab(http://www.reportlab.com/software/documentation/tutorial/product-catalogue/)。但是,一旦生成 PDF,就不允许修改任何内容,并且可能需要技术人员进行一些修改。

因此,如果您对此类工作有想法,那么我将很高兴获得有关正确技术的一些提示。非常感谢你。

4

4 回答 4

1

LaTeX 中的方法

一般的

LaTeX 确实允许将内容与样式分开,因为它是一种标记语言(如果您来自它,感觉很像 HTML 和 CSS)。

http://en.wikipedia.org/wiki/Markup_language#TeX

http://en.wikibooks.org/wiki/LaTeX/Modular_Documents#Getting_LaTeX_to_process_multiple_files

这样,您可以将所有格式选项放入基本文件中,然后输入或包含包含工作实际内容的文件。这意味着您工作过程的重要部分,即写作,在很大程度上与格式选择分开(这是 LaTeX 非常适合严肃写作的主要原因之一!)因此您将只处理文本并且非常基本诸如 \section、\emph 等命令。您的文档将整洁且更易于使用。

命令\input{filename}\include{filename}插入文本文件(有或没有 LaTex 命令)。

要进行更多自定义,您需要自己的宏来读取内容文件并相应地设置它们的样式。

有关定义宏的一些资源(由于我现在的声誉,我无法提供链接的超链接):

en.wikibooks.org/wiki/LaTeX/Macros

en.wikibooks.org/wiki/LaTeX/Creating_Packages

一个具体的例子

我写了一个软件文档,实际的源代码存储在单独的文件中。该lstinputlisting包读取源代码并以“样式化方式”输出。

\lstinputlisting[caption=My caption]{sourcefile.lang}
于 2013-06-26T08:17:00.660 回答
1

开放文档格式 (ODF) 方法

为什么:

  • 它是一种开放格式,可以保证长期解决方案,而且它没有成本(小公司,小预算)。
  • 它将内容和样式分开。
  • 有成熟的免费开源软件与之兼容:OpenOffice.org、LibreOffice。这些对于非程序员用户来说很容易使用。

如何:

The ODF format is quite complex but some libraries already exist to help generating files, and there are some available in Python: odfpy, lpod,JODreports, Apache odf toolkit, ... And they seem to do the job!

Simliar question but for Java

于 2013-06-28T13:08:20.607 回答
0

您正在寻找的是所谓的数据库发布。这可以通过批处理格式化程序(例如 TeX 或 XSL-FO)或 - 如果您不需要 100% 自动化 - 使用 InDesign 和 Quark 等 DTP 程序的插件来完成。

于 2013-06-25T20:06:07.543 回答
0

数据库发布

是的,正如 Martin Schroeder 指出的,这是关于数据库发布的。最近一个类似的具体问题是关于使用pod工具生成 LibreOffice ODT 文件。

pod方法使用Python。Python 语句位于 ODF 模板文件中。您可以将此方法与任何脚本语言一起使用。

LibreOffice Writer 还有一种“平面 XML”文件格式。数据库发布批处理需要用从数据库生成的 XML 代码替换某些占位符。这可能由一个解释器完成,该解释器通过您的“平面 XML”文件并查找某些关键字或命令,然后执行它们。

优点 这种方法的优点是普通用户只需使用 LibreOffice 即可更改报告。由批处理程序解释的插入命令可以很容易地放置在正确的位置。这些命令可能具有DSL的形式。

于 2013-06-27T20:36:02.010 回答