用java创建(复杂的?)doc/pdf文档-最好的方法是什么?

用java创建(复杂的?)doc/pdf文档-最好的方法是什么?,java,templates,pdf,doc,Java,Templates,Pdf,Doc,我们需要创建包含部分模型数据的pdf或doc文档。每个模型对象都包含单个值,加上少量的相关数据集合,它们具有不同的长度。现在,可以禁用模型数据的某些部分,这样就不应该将它们包含在最终文档中。我需要一种聪明的方法来创建一个文档,只使用模型数据的选定部分,我不想遇到如下混乱情况: if (DATA_TITLE is selected) add DATA_TITLE to document if (DATA_AUTHOR is selected) add DATA_TITLE to doc

我们需要创建包含部分模型数据的pdf或doc文档。每个模型对象都包含单个值,加上少量的相关数据集合,它们具有不同的长度。现在,可以禁用模型数据的某些部分,这样就不应该将它们包含在最终文档中。我需要一种聪明的方法来创建一个文档,只使用模型数据的选定部分,我不想遇到如下混乱情况:

if (DATA_TITLE is selected)
   add DATA_TITLE to document
if (DATA_AUTHOR is selected)
   add DATA_TITLE to document
etc..
我怎样才能优雅地避免这种情况

还有一件事:目前我想“以编程方式”创建文档,例如使用ApachePOI库。但是,也许还有其他方法,我可以使用文档模板并用EL表达式填充数据,从而使用模板中的${data.author}字段。但是,如何管理这样一个事实:并非所有的数据元素都可以被选择用于文档导出,而且相关数据的集合可能具有不同的长度


我需要您的宝贵知识:)

如果您不想以编程方式进行转换,可以使用XSL-FO转换


我仍然推荐iText。

要回答您的第一个问题,我将使用Observer设计模式仅在受影响的字段以编程方式更改时更新文档模型

对于第二个问题,如果您将文档模型与观察者一起使用,您可以简单地为字段创建一个默认实现,该实现只能通过将事件编码到观察者中来更改


查看模式:

我不确定该将模式粘贴到哪里。事实上,我不确定我们对自己的理解是否正确。在模型中,数据是一组书籍。这些图书有各种描述它们的数据,如作者、标题等。用户通过web界面选择图书描述的哪些部分应包含在导出的文档中。目前,我有一个所有书籍的分类列表,如果选择了书籍描述部分,我可以使用
book.hasPart(PART\u NAME)
进行检查。现在,我需要将所有这些数据放入pdf或doc文档:)那么,您关于Observer模式的提示是否仍然有效?我将向您的代码中添加一个Observer,以侦听用户选择应包含的内容。选择/取消选择后,观察者可以找到有问题的书(这里最好是地图实现集合),并相应地更新变量。