Ignore:
Timestamp:
03/12/08 08:10:43 (4 years ago)
Author:
jharrop
Message:

Ability to marshall to a structure /pkg:package/pkg:part/pkg:xmlData, mimicking Word 2007's ActiveDocument?.WordOpenXML. This seems a better idea than the old wordDocument.


Location:
trunk/docx4j/src/main/java/org/docx4j/openpackaging/packages
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/docx4j/src/main/java/org/docx4j/openpackaging/packages/WordprocessingMLPackage.java

    r176 r177  
    190190         * our main document and style definition parts. 
    191191         *  
    192          * For now, I've just edited it a little to accept our parts wrapped 
    193          * in a <w:wordDocument> element.  Since that's a completely 
    194          * arbitrary format, it may be better in due course to process 
    195          * pck:package/pck:part 
     192         * I've adapted the stylesheet to process the 
     193         * pck:package/pck:part stuff emitted by Word 2007. 
    196194         *  
    197195         */ 
    198196         
    199197                // so, put the 2 parts together into a single document  
    200         // The JAXB object org.docx4j.wml.WordDocument is 
     198        // The JAXB object org.docx4j.wml.Package is 
    201199        // custom built for this purpose. 
    202200         
    203         // Create a org.docx4j.wml.WordDocument object 
     201        // Create a org.docx4j.wml.Package object 
    204202        org.docx4j.wml.ObjectFactory factory = new org.docx4j.wml.ObjectFactory(); 
    205         org.docx4j.wml.WordDocument wd = factory.createWordDocument(); 
     203        org.docx4j.wml.Package pkg = factory.createPackage(); 
     204         
    206205        // Set its parts 
     206         
    207207        // .. the main document part 
     208        org.docx4j.wml.Package.Part pkgPartDocument = factory.createPackagePart(); 
     209                 
    208210                MainDocumentPart documentPart = getMainDocumentPart();  
    209                 org.docx4j.wml.Document wmlDocumentEl = (org.docx4j.wml.Document)documentPart.getJaxbElement();          
    210         wd.setDocument(wmlDocumentEl); 
     211                 
     212        pkgPartDocument.setName(documentPart.getPartName().getName()); 
     213        pkgPartDocument.setContentType(documentPart.getContentType() ); 
     214                 
     215        org.docx4j.wml.Package.Part.XmlData XmlDataDoc = factory.createPackagePartXmlData(); 
     216         
     217                org.docx4j.wml.Document wmlDocumentEl = (org.docx4j.wml.Document)documentPart.getJaxbElement(); 
     218                 
     219                XmlDataDoc.setDocument(wmlDocumentEl); 
     220                pkgPartDocument.setXmlData(XmlDataDoc); 
     221                pkg.getPart().add(pkgPartDocument); 
     222                                 
    211223        // .. the style part 
     224        org.docx4j.wml.Package.Part pkgPartStyles = factory.createPackagePart(); 
     225 
    212226        org.docx4j.openpackaging.parts.WordprocessingML.StyleDefinitionsPart stylesPart = documentPart.getStyleDefinitionsPart(); 
     227         
     228        pkgPartDocument.setName(stylesPart.getPartName().getName()); 
     229        pkgPartDocument.setContentType(stylesPart.getContentType() ); 
     230         
     231        org.docx4j.wml.Package.Part.XmlData XmlDataStyles = factory.createPackagePartXmlData(); 
     232         
    213233        org.docx4j.wml.Styles styles = (org.docx4j.wml.Styles)stylesPart.getJaxbElement(); 
    214         wd.setStyles(styles); 
     234         
     235                XmlDataStyles.setStyles(styles); 
     236                pkgPartStyles.setXmlData(XmlDataStyles); 
     237                pkg.getPart().add(pkgPartStyles);        
     238         
    215239        // Now marshall it 
    216240                JAXBContext jc = Context.jc; 
     
    218242                org.w3c.dom.Document doc = org.docx4j.XmlUtils.neww3cDomDocument(); 
    219243 
    220                 marshaller.marshal(wd, doc); 
     244                marshaller.marshal(pkg, doc); 
    221245                 
    222246                log.info("wordDocument created for PDF rendering!"); 
     
    249273                javax.xml.transform.Templates template = tfactory.newTemplates( 
    250274                                new javax.xml.transform.stream.StreamSource(is)); 
    251                  
    252275                // Use the template to create a transformer 
    253276                javax.xml.transform.Transformer xformer = template.newTransformer(); 
     
    269292                xformer.setParameter("substituterInstance", fontSubstituter); 
    270293                xformer.setParameter("fontFamilyStack", fontFamilyStack); 
    271                  
    272294                 
    273295                //DEBUGGING  
  • trunk/docx4j/src/main/java/org/docx4j/openpackaging/packages/wordml2html-2007.xslt

    r164 r177  
    77- xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"  
    88 
     9Works with the output of Word 2007's ActiveDocument.WordOpenXML, 
     10        which looks like: 
     11         
     12        /pkg:package/pkg:part/pkg:xmlData        
     13         
    914Version 1.3-.NET-script 
    1015 
     
    2328        xmlns:aml="http://schemas.microsoft.com/aml/2001/core" 
    2429        xmlns:w10="urn:schemas-microsoft-com:office:word" 
     30        xmlns:pkg="http://schemas.microsoft.com/office/2006/xmlPackage"          
    2531        xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
    2632        xmlns:ext="http://www.xmllab.net/wordml2html/ext" 
     
    145151 
    146152 
    147 <xsl:variable name="nsStyles" select="/w:wordDocument[1]/w:styles[1]/w:style"/> 
    148 <xsl:variable name="ndLists" select="/w:wordDocument[1]/w:lists[1]|//w:cfChunk/w:lists"/> 
    149 <xsl:variable name="ndDocPr" select="/w:wordDocument[1]/w:docPr[1]"/> 
    150 <xsl:variable name="ndDocInfo" select="/w:wordDocument[1]/w:docInfo[1]"/> 
    151 <xsl:variable name="ndOfficeDocPr" select="/w:wordDocument[1]/o:DocumentProperties[1]"/> 
     153<xsl:variable name="nsStyles" select="/pkg:package/pkg:part/pkg:xmlData/w:styles[1]/w:style"/> 
     154         
     155<!-- 2008 03 12: TODO following parts currently not included in our pkg:package -->      
     156<xsl:variable name="ndLists" select="/pkg:package/pkg:part/pkg:xmlData/w:lists[1]|/w:cfChunk/w:lists"/> 
     157<xsl:variable name="ndDocPr" select="/pkg:package/pkg:part/pkg:xmlData/w:docPr[1]"/> 
     158<xsl:variable name="ndDocInfo" select="/pkg:package/pkg:part/pkg:xmlData/w:docInfo[1]"/> 
     159<xsl:variable name="ndOfficeDocPr" select="/pkg:package/pkg:part/pkg:xmlData/o:DocumentProperties[1]"/> 
    152160 
    153161 
     
    49674975</xsl:template> 
    49684976 
    4969  
     4977<!-- 
    49704978<xsl:template match="/w:wordDocument"> 
     4979        --> 
     4980<xsl:template match="/pkg:package"> 
    49714981        <xsl:choose> 
    49724982                 
     
    50495059                                                <xsl:comment> 
    50505060                                                        /*font definitions*/ 
     5061                                                        <!-- 2008 03 12: TODO font part currently not included in our pkg:package --> 
    50515062                                                        <xsl:apply-templates select="w:fonts[1]/w:font"/> 
    50525063                                                        /*element styles*/ 
    50535064                                                        <xsl:choose> 
     5065                                                                <!-- 2008 03 12: TODO docPr currently not included in our pkg:package --> 
    50545066                                                                <xsl:when test="w:docPr/w:revisionView/@w:markup = 'off'"> 
    50555067                                                                del {display:none;} 
     
    51095121 
    51105122<!-- was <xsl:apply-templates select="w:body|w:cfChunk"/> --> 
    5111                                         <xsl:apply-templates select="w:document/w:body|w:cfChunk"/> 
     5123                                        <xsl:apply-templates select="pkg:part/pkg:xmlData/w:document/w:body|w:cfChunk"/> 
    51125124 
    51135125                                         
Note: See TracChangeset for help on using the changeset viewer.