[
https://issues.apache.org/jira/browse/ISIS-172?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13494152#comment-13494152
]
Dan Haywood commented on ISIS-172:
----------------------------------
I found an API - docx4j - and have implemented up on github
[https://github.com/danhaywood/docx-service]. I'll be donating this code back
into Isis once we have our git repo up and running (INFRA-5502).
The input format is XHTML. See the readme on the github page for more info,
> Domain Service (in domain-libs) to allow domain object entities to build
> .docx (OpenXML) documents against a template .docx, merging in an XML (or
> perhaps JSON) input format.
> ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: ISIS-172
> URL: https://issues.apache.org/jira/browse/ISIS-172
> Project: Isis
> Issue Type: New Feature
> Components: Domain: Services
> Reporter: Dan Haywood
> Assignee: Mike Burton
> Priority: Minor
> Labels: newbie
> Original Estimate: 24h
> Remaining Estimate: 24h
>
> Provide a standalone implementation of a document builder service that can
> be registered as a hidden service, and injected into domain objects so that
> they are able to send build OpenXml documents. The input could be an
> XML-based notation (or perhaps JSON) along with a template .docx document.
> The signature of the interface would be something like:
> [Hidden]
> public interface OpenXmlDocumentBuilder {
> byte[] build(byte[] documentTemplate, org.w3c.Document xmlDoc);
> }
> eg where the XML format is something like:
> <input>
> <LetterDate type="date">2012-01-30</LetterDate>
> <CustomerTitle type="rich">Dear Mrs. Jenkins</CustomerTitle>
> <Blurb>As requested, here are the recent payments made from your
> account</Blurb>
> <Payments type="rich-table">
> <row>
> <Date>2012-01-20</Date>
> <Merchant>Walmart</Merchant>
> <Amount>123.45</Date>
> </row>
> <row>
> <Date>2012-01-21</Date>
> <Merchant>Esso</Merchant>
> <Amount>45.23</Date>
> </row>
> <row>
> <Date>2012-01-22</Date>
> <Merchant>Starbucks</Merchant>
> <Amount>12.01</Date>
> </row>
> <row>
> <Date>2012-01-22</Date>
> <Merchant>Amazon</Merchant>
> <Amount>89.99</Date>
> </row>
> </Payments>
> </input>
> so that the information is used to merge into fields within the OpenXml.
> (NB: if using MS Word, this would correspond to "Content Controls", as per
> the Developer tab).
> ~~~~~~~~~~~~~
> In terms of how a domain object would use this service, one design is to have
> a CommunicationTemplate domain object, which holds the .docx (or .odf) (eg as
> a base 64 encoded string). The CommunicationTemplate acts as a factory for
> Communication objects, requiring that the appropriate XML be provided to it.
> The template then calls the DocumentBuilderService and gets back a
> mail-merged version; this is stored in the resultant Communication (eg again
> base 64 encoded).
> The sequence diagram below shows how this service could be used by a
> CommunicationTemplate and Communication domain object:
> http://www.websequencediagrams.com/cgi-bin/cdraw?lz=dGl0bGUgY3JlYXRlIENvbW11bmljYXRpb24KCkN1c3RvbWVyLT4rAA0NVGVtcGxhdGVSZXBvc2l0b3J5OiBsb29rdXAodAAUB0NvZGUpCgAXHy0tPi0AXAg6IABkDAAMCmJ1aWxkIHhtbABtIjoAgUAHKHhtbCkKAGcWLT4rRG9jdW1lbnRCdWlsZGVyU2VydmljZTogbWFpbE1lcmdlKHRoaXMub2RmAIFgCCwgAE0FACMWAIFABQB5Fm1lcmdlZE9kZgB0GQCCZA06IGluc3RhbnRpYXRlKAA0CQCBMhkAgi8PCg&s=qsd
> ~~~~~~~~~~~~
> generated at http://www.websequencediagrams.com/ using the following script:
> title create Communication
> Customer->+CommunicationTemplateRepository: lookup(templateCode)
> CommunicationTemplateRepository-->-Customer:
> Customer->Customer: build xml
> Customer->+CommunicationTemplate: create(xml)
> CommunicationTemplate->+DocumentBuilderService: mailMerge(this.odfTemplate,
> xml)
> DocumentBuilderService-->-CommunicationTemplate: mergedOdf
> CommunicationTemplate->Communication: instantiate(mergedOdf)
> CommunicationTemplate-->-Customer:
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira