【问题标题】:Java docx4j modify template for header footer with SQL dataJava docx4j 修改带有 SQL 数据的页眉页脚模板
【发布时间】:2014-05-11 10:09:55
【问题描述】:

我想要做的是接受一个 word doc/docx 模板,该模板已经具有预先设计的页眉和页脚,并将某些单词替换为适用于该文档的单词,该文档由用户输入的内容生成并通过 MySQL 保存.我已经有一个程序可以获取用户输入并保存到 MySQL。但是,我对“操纵”一词如何起作用感到有些困惑。 我找到了 docx4j 和一个显示我正在寻找的内容的教程 here 并在此站点示例代码 here 上的另一个问题上找到了。由于我是使用此功能的初学者,因此我感到困惑的是:

  • 我了解 JAXB 用于在 XML 之间进行转换。为什么在这种情况下这很重要?或者如果不是,在什么情况下会是?
  • 我看到两个版本的加载:

    WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(new java.io.File("P:\\Engineering\\Projects\\Naming\\EX_TEMP.docx"));
    

........以及第二个例子:

    private WordprocessingMLPackage getTemplate(String name) throws Docx4JException, FileNotFoundException {
    WordprocessingMLPackage template = WordprocessingMLPackage.load(new FileInputStream(new File(name)));
    return template;
}

(你会把第二个代码的文件目录放在哪里,或者你如何指定你要加载的文件?)

  • hyperlinkresolver 有什么作用,为什么需要它? (第二个链接)
  • 在这种情况下应用绑定是什么? (第二个链接)
  • 什么是内容访问器? (第一个链接)
  • 我这样做的方法是否正确,还是有更简单/更好的方法?

如果有帮助,我将在 Windows 7 上使用带有 Java 的 Eclipse。 我会很感激任何帮助,谢谢! 另外,如果有人有任何具有良好 cmets 或解释的示例,那将很有帮助!

【问题讨论】:

  • 我只允许使用上面的两个链接,但我想将this link 作为一个有用的细分,让一些事情更容易理解,但并不能真正回答我的大部分问题问题。我只是想,如果其他人也在努力理解这些东西,它可能会很有用。

标签: java jaxb footer docx4j


【解决方案1】:

您可能应该退后一步,决定采用哪种方法来注入您的数据。 Docx4j 支持三种方法:

  1. 替换文档表面的变量(脆弱但简单)
  2. 邮件合并(使用 MERGEFIELD),适用于遗留文档
  3. 内容控制数据绑定(您的第二个链接;现代/复杂/强大的方法,但您需要了解 XML,在这里可能有点矫枉过正)

有关您的大多数具体问题的答案,请花时间阅读 docx4j 的 Getting Started 指南。

【讨论】:

  • 谢谢 Jason,您的初学者指南很有帮助。我将尝试使用仅替换文档表面上的变量的第一种方法,前提是我可以访问页眉和页脚。我仍然坚持的一件事是 JAXBElement。我知道这是组成 doc 一词的 zip 的一部分,但我不明白它是在哪里定义的。我尝试实现的每个示例都缺乏我能说的来源。也许我错过了一些东西。我读到您需要使用 get/setContents,但是如何使用呢?再次感谢!
  • JAXB 有 javax.xml.bind.JAXBElement 用于包装一些对象以提供有关相应 Xml 元素的额外信息。在 docx4j 中,每个具有使用 JAXB 表示的内容的“部分”都有一个包含其内容模型的根对象的字段,您可以通过 getContents() 访问该根对象。不幸的是,我们将该字段称为 jaxbElement,这可能有点令人困惑。
  • getContents() 为您提供与相关部件相关的任何对象。所以对于主文档部分,它是一个 org.docx4j.wml.Document 对象;对于页眉或页脚,它是另一回事。然后,您可以使用 Document 对象的方法来操作它。
猜你喜欢
  • 2016-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-25
  • 1970-01-01
  • 2014-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多