如何构建可编辑的文本文档及其动态生成的基本内容?

时间:2013-06-25 09:30:18

标签: latex pdf-generation restructuredtext libreoffice desktop-publishing

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

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

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

Soutions首先看了:

  • 我看了一下LaTeX,但似乎数据和样式混合在一起,与HTML和CSS相对,这明显区分了我觉得更容易使用的内容和样式。
  • 我考虑过直接使用HTML和CSS,但它可能太技术化了。
  • 我还查看了一个允许直接从python生成PDF的库,如ReportLab(http://www.reportlab.com/software/documentation/tutorial/product-catalogue/)。但是,一旦构建PDF并且可能需要技术人员进行一些修改,这不允许修改任何内容。

因此,如果您对此类工作有所了解,那么我将非常乐意获得有关正确技术的一些提示。非常感谢你。

4 个答案:

答案 0 :(得分: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}

答案 1 :(得分:1)

OpenDocument Format(ODF)方法

为什么:

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

如何:

ODF格式非常复杂,但有些库已经存在以帮助生成文件,Python中有一些可用:odfpylpodJODreportsApache odf toolkit ,... 他们似乎做了这个工作!

Simliar question但是对于Java

答案 2 :(得分:0)

您要找的是database publishing。这可以通过批处理格式化程序(例如TeX或XSL-FO)来完成,或者 - 如果您不需要100%自动化 - 可以使用InDesign和Quark等DTP程序的插件。

答案 3 :(得分:0)

数据库发布

是的,正如Martin Schroeder所指出的那样是关于数据库发布。最近类似的specific question是关于使用pod工具生成LibreOffice ODT文件。

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

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

<强>优势 这种方法的优点是普通用户只需使用LibreOffice就可以改变报告。批处理程序解释的插入命令可以轻松放置在正确的位置。这些命令可能具有DSL的形式。