Changeset 1135
- Timestamp:
- 07/08/10 13:00:13 (19 months ago)
- Location:
- trunk/docx4j
- Files:
-
- 4 added
- 8 edited
-
src/main/java/org/docx4j/convert/out/pdf/viaXSLFO/Conversion.java (modified) (5 diffs)
-
src/main/java/org/docx4j/convert/out/pdf/viaXSLFO/LayoutMasterSetBuilder.java (added)
-
src/main/java/org/docx4j/convert/out/pdf/viaXSLFO/docx2fo.xslt (modified) (6 diffs)
-
src/main/java/org/docx4j/jaxb/Context.java (modified) (3 diffs)
-
src/main/java/org/docx4j/model/structure/DocumentModel.java (modified) (1 diff)
-
src/main/java/org/docx4j/model/structure/HeaderFooterPolicy.java (modified) (1 diff)
-
src/main/java/org/docx4j/model/structure/SectionWrapper.java (modified) (2 diffs)
-
src/main/java/org/docx4j/model/structure/jaxb (added)
-
src/main/java/org/docx4j/model/structure/jaxb/ObjectFactory.java (added)
-
src/main/java/org/docx4j/model/structure/jaxb/Sections.java (added)
-
src/main/java/org/docx4j/openpackaging/packages/WordprocessingMLPackage.java (modified) (3 diffs)
-
xsd/sections.xsd (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/docx4j/src/main/java/org/docx4j/convert/out/pdf/viaXSLFO/Conversion.java
r1127 r1135 33 33 import org.docx4j.fonts.PhysicalFonts; 34 34 import org.docx4j.jaxb.Context; 35 import org.docx4j.jaxb.NamespacePrefixMapperUtils; 35 36 import org.docx4j.model.PropertyResolver; 36 37 import org.docx4j.model.TransformState; … … 41 42 import org.docx4j.model.properties.paragraph.Indent; 42 43 import org.docx4j.model.properties.run.Font; 44 import org.docx4j.model.structure.SectionWrapper; 45 import org.docx4j.model.structure.jaxb.ObjectFactory; 46 import org.docx4j.model.structure.jaxb.Sections; 47 import org.docx4j.model.structure.jaxb.Sections.Section; 43 48 import org.docx4j.model.table.TableModel.TableModelTransformState; 44 49 import org.docx4j.openpackaging.exceptions.Docx4JException; 45 50 import org.docx4j.openpackaging.packages.WordprocessingMLPackage; 51 import org.docx4j.openpackaging.parts.relationships.RelationshipsPart; 46 52 import org.docx4j.wml.Ftr; 47 53 import org.docx4j.wml.Hdr; … … 49 55 import org.docx4j.wml.RFonts; 50 56 import org.docx4j.wml.RPr; 57 import org.docx4j.wml.SectPr; 51 58 import org.docx4j.wml.Tbl; 52 59 import org.docx4j.wml.Tc; … … 261 268 */ 262 269 //Document domDoc = XmlPackage.getFlatDomDocument(wordMLPackage); 263 Document domDoc = XmlUtils.marshaltoW3CDomDocument(wordMLPackage.getMainDocumentPart().getJaxbElement()); 270 //Document domDoc = XmlUtils.marshaltoW3CDomDocument(wordMLPackage.getMainDocumentPart().getJaxbElement()); 271 272 Sections sections = createSectionContainers(wordMLPackage); 273 Document domDoc = XmlUtils.marshaltoW3CDomDocument(sections, Context.jcSectionModel); 264 274 265 275 java.util.HashMap<String, Object> settings = new java.util.HashMap<String, Object>(); … … 330 340 331 341 } 342 343 private Sections createSectionContainers(WordprocessingMLPackage wordMLPackage) { 344 345 ObjectFactory factory = new ObjectFactory(); 346 347 Sections sections = factory.createSections(); 348 Section section = factory.createSectionsSection(); 349 section.setName("s1"); // name must match fo master 350 351 sections.getSection().add(section); 352 353 org.docx4j.wml.Document doc = (org.docx4j.wml.Document)wordMLPackage.getMainDocumentPart().getJaxbElement(); 354 355 int i = 2; 356 for (Object o : doc.getBody().getEGBlockLevelElts() ) { 357 358 if (o instanceof org.docx4j.wml.P) { 359 if (((org.docx4j.wml.P)o).getPPr() != null ) { 360 org.docx4j.wml.PPr ppr = ((org.docx4j.wml.P)o).getPPr(); 361 if (ppr.getSectPr()!=null) { 362 section = factory.createSectionsSection(); 363 section.setName("s" +i); // name must match fo master 364 sections.getSection().add(section); 365 i++; 366 } 367 } 368 } 369 section.getAny().add( marshall(o) ); 370 // TODO: since the section model knows nothing about WML, 371 // we have to marshall each object separately. 372 // To fix this, next time wml is generated, include the section model there! 373 } 374 return sections; 375 } 376 377 private Element marshall(Object o) { 378 379 try { 380 org.w3c.dom.Document w3cDoc = 381 XmlUtils.marshaltoW3CDomDocument(o); 382 383 384 /* Force the RelationshipsPart to be marshalled using 385 * the normal non-rels part NamespacePrefixMapper, 386 * since otherwise (because we'd be using 2 namespace 387 * prefix mappers?) we end up with errant xmlns="", 388 * which is wrong and stops Word 2007 from loading the 389 * document. 390 * 391 * Note that xmlPackage.xsd defines: 392 * <xsd:complexType name="CT_XmlData"> 393 <xsd:sequence> 394 <xsd:any processContents="skip" /> 395 </xsd:sequence> 396 * 397 * Note also that marshaltoString uses 398 * just the normal non-rels part NamespacePrefixMapper, 399 * so if/when this is marshalled again, that could 400 * have been causing problems as well?? 401 */ 402 return w3cDoc.getDocumentElement(); 403 } catch (Exception e) { 404 // TODO Auto-generated catch block 405 e.printStackTrace(); 406 } 407 return null; 408 409 } 410 411 332 412 333 413 /* ---------------Xalan XSLT Extension Functions ---------------- */ -
trunk/docx4j/src/main/java/org/docx4j/convert/out/pdf/viaXSLFO/docx2fo.xslt
r1131 r1135 79 79 </xsl:template> 80 80 81 <!-- Not used, if we just pass in document.xml -->81 <!-- Not used, if we just pass in document.xml 82 82 <xsl:template match="/pkg:package"> 83 83 … … 87 87 88 88 <xsl:template match="w:document"> 89 90 --> 91 92 93 <xsl:template match="sections"> 89 94 90 95 <xsl:variable name="logging" … … 100 105 <fo:root> 101 106 102 <fo:layout-master-set> 103 <!-- fo:layout-master-set defines in its children the page layout: 104 the pagination and layout specifications 105 - page-masters: have the role of describing the intended subdivisions 106 of a page and the geometry of these subdivisions 107 In this case there is only a simple-page-master which defines the 108 layout for all pages of the text 109 110 We handle headers/footers, but not yet on a per section basis. 111 112 See http://www.dpawson.co.uk/xsl/sect3/headers.html 113 --> 114 115 <!-- First Page --> 116 <xsl:if 117 test="java:org.docx4j.model.structure.HeaderFooterPolicy.hasFirstHeaderOrFooter($wmlPackage)"> 118 <fo:simple-page-master master-name="firstpage" 119 page-height="297mm" page-width="210mm" margin-top="10mm" 120 margin-bottom="10mm" margin-left="25mm" margin-right="20mm"> 121 122 <fo:region-body margin-top="20mm" 123 margin-bottom="20mm" margin-left="0mm" margin-right="0mm" /> 124 125 126 <!-- First Page Header --> 127 <xsl:if 128 test="java:org.docx4j.model.structure.HeaderFooterPolicy.hasFirstHeader($wmlPackage)"> 129 <fo:region-before 130 region-name="xsl-region-before-firstpage" extent="10mm" /> 131 </xsl:if> 132 133 <!-- First Page Footer --> 134 <xsl:if 135 test="java:org.docx4j.model.structure.HeaderFooterPolicy.hasFirstFooter($wmlPackage)"> 136 <fo:region-after 137 region-name="xsl-region-after-firstpage" extent="10mm" /> 138 </xsl:if> 139 140 </fo:simple-page-master> 141 </xsl:if> 142 <xsl:if 143 test="java:org.docx4j.model.structure.HeaderFooterPolicy.hasEvenOrOddHeaderOrFooter($wmlPackage)"> 144 <!-- layout for the even page --> 145 <fo:simple-page-master master-name="evenpage" 146 page-height="297mm" page-width="210mm" margin-top="10mm" 147 margin-bottom="10mm" margin-left="25mm" margin-right="20mm"> 148 149 <fo:region-body margin-top="20mm" 150 margin-bottom="20mm" margin-left="0mm" margin-right="0mm" /> 151 <xsl:if 152 test="java:org.docx4j.model.structure.HeaderFooterPolicy.hasEvenHeader($wmlPackage)"> 153 <fo:region-before 154 region-name="xsl-region-before-evenpage" extent="10mm" /> 155 </xsl:if> 156 <xsl:if 157 test="java:org.docx4j.model.structure.HeaderFooterPolicy.hasEvenFooter($wmlPackage)"> 158 <fo:region-after 159 region-name="xsl-region-after-evenpage" extent="10mm" /> 160 </xsl:if> 161 </fo:simple-page-master> 162 <!-- layout for the odd page --> 163 <fo:simple-page-master master-name="oddpage" 164 page-height="297mm" page-width="210mm" margin-top="10mm" 165 margin-bottom="10mm" margin-left="25mm" margin-right="20mm"> 166 167 <fo:region-body margin-top="20mm" 168 margin-bottom="20mm" margin-left="0mm" margin-right="0mm" /> 169 <xsl:if 170 test="java:org.docx4j.model.structure.HeaderFooterPolicy.hasOddHeader($wmlPackage)"> 171 <fo:region-before 172 region-name="xsl-region-before-default" extent="10mm" /> 173 </xsl:if> 174 <xsl:if 175 test="java:org.docx4j.model.structure.HeaderFooterPolicy.hasOddFooter($wmlPackage)"> 176 <fo:region-after 177 region-name="xsl-region-after-default" extent="10mm" /> 178 </xsl:if> 179 </fo:simple-page-master> 180 </xsl:if> 181 <xsl:if 182 test="java:org.docx4j.model.structure.HeaderFooterPolicy.hasDefaultHeaderOrFooter($wmlPackage)"> 183 <fo:simple-page-master master-name="default" 184 page-height="297mm" page-width="210mm" margin-top="10mm" 185 margin-bottom="10mm" margin-left="25mm" margin-right="20mm"> 186 187 <fo:region-body margin-top="20mm" 188 margin-bottom="20mm" margin-left="0mm" margin-right="0mm" /> 189 <xsl:if 190 test="java:org.docx4j.model.structure.HeaderFooterPolicy.hasDefaultHeader($wmlPackage)"> 191 <fo:region-before 192 region-name="xsl-region-before-default" extent="10mm" /> 193 </xsl:if> 194 <xsl:if 195 test="java:org.docx4j.model.structure.HeaderFooterPolicy.hasDefaultFooter($wmlPackage)"> 196 <fo:region-after 197 region-name="xsl-region-after-default" extent="10mm" /> 198 </xsl:if> 199 </fo:simple-page-master> 200 </xsl:if> 201 202 <fo:simple-page-master master-name="simple" 203 page-height="29.7cm" page-width="21cm" margin-top="1cm" 204 margin-bottom="2cm" margin-left="2.5cm" margin-right="2.5cm"> 205 <fo:region-body margin-top="3cm" /> 206 <fo:region-before extent="3cm" /> 207 <fo:region-after extent="1.5cm" /> 208 </fo:simple-page-master> 209 210 211 <fo:page-sequence-master master-name="twoside"> 212 213 <fo:repeatable-page-master-alternatives> 214 <xsl:if 215 test="java:org.docx4j.model.structure.HeaderFooterPolicy.hasFirstHeaderOrFooter($wmlPackage)"> 216 <fo:conditional-page-master-reference 217 master-reference="firstpage" page-position="first" /> 218 </xsl:if> 219 220 <xsl:choose> 221 <xsl:when test="java:org.docx4j.model.structure.HeaderFooterPolicy.hasEvenHeaderOrFooter($wmlPackage)"> 222 <fo:conditional-page-master-reference 223 master-reference="evenpage" odd-or-even="even" /> 224 <fo:conditional-page-master-reference 225 master-reference="oddpage" odd-or-even="odd" /> 226 </xsl:when> 227 <xsl:when test="java:org.docx4j.model.structure.HeaderFooterPolicy.hasDefaultHeaderOrFooter($wmlPackage)"> 228 <fo:conditional-page-master-reference 229 master-reference="default" /> 230 </xsl:when> 231 <xsl:otherwise> 232 <fo:conditional-page-master-reference 233 master-reference="simple" /> 234 </xsl:otherwise> 235 </xsl:choose> 236 <!-- 237 <xsl:if 238 test="java:org.docx4j.model.structure.HeaderFooterPolicy.hasDefaultFooter($wmlPackage)"> 239 <fo:conditional-page-master-reference 240 master-reference="default" /> 241 </xsl:if> 242 <xsl:if 243 test="java:org.docx4j.model.structure.HeaderFooterPolicy.hasOddHeaderOrFooter($wmlPackage)"> 244 <fo:conditional-page-master-reference 245 master-reference="oddpage" odd-or-even="odd" /> 246 </xsl:if> 247 <xsl:if 248 test="java:org.docx4j.model.structure.HeaderFooterPolicy.hasEvenHeaderOrFooter($wmlPackage)"> 249 <fo:conditional-page-master-reference 250 master-reference="evenpage" odd-or-even="even" /> 251 </xsl:if> 252 --> 253 </fo:repeatable-page-master-alternatives> 254 </fo:page-sequence-master> 255 </fo:layout-master-set> 107 <xsl:copy-of select="java:org.docx4j.convert.out.pdf.viaXSLFO.LayoutMasterSetBuilder.getLayoutMasterSetFragment( 108 $wmlPackage)" /> 109 110 <xsl:apply-templates match="section"/> 111 112 </fo:root> 113 </xsl:template> 114 115 116 <xsl:template match="section"> 117 256 118 257 119 <!-- start page-sequence … … 261 123 which is to be used to layout the text contained in this 262 124 page-sequence--> 263 <fo:page-sequence master-reference=" twoside">125 <fo:page-sequence master-reference="{@name}"> 264 126 265 127 <!-- First Page Header --> … … 396 258 select="java:org.docx4j.convert.out.pdf.viaXSLFO.PartTracker.inMainDocumentPart($wmlPackage, $modelStates)" /> 397 259 398 <xsl:apply-templates select="w:body/*" /> 260 <!--<xsl:apply-templates select="w:body/*" />--> 261 <xsl:apply-templates select="*" /> 399 262 400 263 <xsl:call-template name="pretty-print-block"/> … … 417 280 418 281 <!-- end: defines page layout --> 419 420 421 422 423 </fo:root> 424 </xsl:template> 282 283 284 </xsl:template> 425 285 426 286 <!-- the extension functions fetch these -
trunk/docx4j/src/main/java/org/docx4j/jaxb/Context.java
r1121 r1135 33 33 public static JAXBContext jcDocPropsCustom; 34 34 public static JAXBContext jcDocPropsExtended; 35 public static JAXBContext jcXmlPackage;36 35 public static JAXBContext jcRelationships; 37 36 public static JAXBContext jcCustomXmlProperties; 38 37 public static JAXBContext jcContentTypes; 38 39 public static JAXBContext jcXmlPackage; 40 41 private static JAXBContext jcXslFo; 42 public static JAXBContext jcSectionModel; 39 43 40 44 private static Logger log = Logger.getLogger(Context.class); … … 81 85 jcCustomXmlProperties = JAXBContext.newInstance("org.docx4j.customXmlProperties",classLoader ); 82 86 jcContentTypes = JAXBContext.newInstance("org.docx4j.openpackaging.contenttype",classLoader ); 87 88 jcSectionModel = JAXBContext.newInstance("org.docx4j.model.structure.jaxb",classLoader ); 89 83 90 log.info(".. others loaded .."); 84 91 … … 98 105 99 106 } 100 107 108 public static JAXBContext getXslFoContext() { 109 if (jcXslFo==null) { 110 try { 111 Context tmp = new Context(); 112 java.lang.ClassLoader classLoader = tmp.getClass().getClassLoader(); 113 114 jcXslFo = JAXBContext.newInstance("org.plutext.jaxb.xslfo",classLoader ); 115 116 } catch (Exception ex) { 117 ex.printStackTrace(); 118 } 119 } 120 return jcXslFo; 121 } 122 101 123 } -
trunk/docx4j/src/main/java/org/docx4j/model/structure/DocumentModel.java
r966 r1135 63 63 // section they are in, and nor does a SectionWrapper 64 64 // know which objects are in it. 65 // We will soon add objects to a SectionWrapper (but not 66 // vice versa) 65 // Should we add objects to a SectionWrapper? 66 // PDF via XSL FO pre-processes the document to wrap 67 // section containers, but that is only done in the PDF stuff. 67 68 68 69 public DocumentModel(WordprocessingMLPackage wordMLPackage) { -
trunk/docx4j/src/main/java/org/docx4j/model/structure/HeaderFooterPolicy.java
r1127 r1135 176 176 } 177 177 178 179 178 180 // ------------------------------------------------------------- 179 181 // XSLT extension functions, used by docx2fo.xslt 180 182 // and DocX2Html.xslt 183 184 // Yuck! Getting rid of as many of these as possible .... 181 185 182 186 public static boolean hasFirstHeaderOrFooter(WordprocessingMLPackage wordmlPackage) { -
trunk/docx4j/src/main/java/org/docx4j/model/structure/SectionWrapper.java
r943 r1135 19 19 */ 20 20 package org.docx4j.model.structure; 21 22 import java.util.ArrayList; 23 import java.util.List; 21 24 22 25 import org.docx4j.openpackaging.parts.relationships.RelationshipsPart; … … 73 76 return sectPr; 74 77 } 78 79 // protected List<Object> egBlockLevelElts; 80 // 81 // public List<Object> getEGBlockLevelElts() { 82 // if (egBlockLevelElts == null) { 83 // egBlockLevelElts = new ArrayList<Object>(); 84 // } 85 // return this.egBlockLevelElts; 86 // } 87 75 88 76 89 } -
trunk/docx4j/src/main/java/org/docx4j/openpackaging/packages/WordprocessingMLPackage.java
r1050 r1135 25 25 import java.io.FileNotFoundException; 26 26 import java.io.FileOutputStream; 27 import java.util.HashMap; 27 28 import java.util.Map; 28 29 … … 40 41 import org.docx4j.XmlUtils; 41 42 import org.docx4j.convert.out.flatOpcXml.FlatOpcXmlCreator; 43 import org.docx4j.convert.out.pdf.viaXSLFO.Conversion; 44 import org.docx4j.convert.out.pdf.viaXSLFO.PartTracker; 42 45 import org.docx4j.fonts.IdentityPlusMapper; 43 46 import org.docx4j.fonts.Mapper; 44 47 import org.docx4j.jaxb.Context; 45 48 import org.docx4j.jaxb.NamespacePrefixMapperUtils; 49 import org.docx4j.model.TransformState; 46 50 import org.docx4j.model.structure.DocumentModel; 47 51 import org.docx4j.model.structure.HeaderFooterPolicy; … … 417 421 418 422 } 419 423 420 424 public static class FilterSettings { 421 425 -
trunk/docx4j/xsd/sections.xsd
r1133 r1135 1 1 <?xml version="1.0" encoding="utf-8"?> 2 <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 2 <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" 3 xmlns:xs="http://www.w3.org/2001/XMLSchema" 4 xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 5 xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" jaxb:version="2.1" 6 jaxb:extensionBindingPrefixes="xjc"> 7 8 <!-- 9 10 JAXB INSTRUCTIONS 11 12 To generate java classes, you need xjc, from the JAXB 2.1 RI. 13 14 (I used JAXB 2.1.10 included in JDK 1.6.0_15) 15 16 To generate the classes (from the same directory) 17 18 xjc sections.xsd -d ~/workspace/docx4j/src/main/java -no-header -target 2.0 -extension 19 20 It would be nice to be able to add the fluent api 21 22 sh ~/jaxb-ri-20071219/bin/xjc.sh -classpath ~/workspace/docx4j/m2/org/jvnet/jaxb2_commons/ppp/parent-pointer-plugin/1.0/parent-pointer-plugin-1.0.jar:~/workspace/docx4j/lib/jaxb-fluent-api-2.1.8.jar -Xfluent-api -Xparent-pointer wml.xsd -d tmp/ -no-header -target 2.0 23 24 jaxb-ri-20071219 is 2.1.6; jaxb-ri-20070917 works equally well. 25 26 27 --> 28 29 <xs:annotation> 30 <xs:appinfo> 31 <xs:appinfo> 32 <jaxb:globalBindings> 33 </jaxb:globalBindings> 34 </xs:appinfo> 35 <jaxb:schemaBindings> 36 <jaxb:package name="org.docx4j.model.structure.jaxb"/> 37 </jaxb:schemaBindings> 38 </xs:appinfo> 39 </xs:annotation> 40 41 3 42 <xs:element name="sections"> 4 43 <xs:complexType> … … 7 46 <xs:complexType> 8 47 <xs:sequence> 9 <xs:any processContents="skip" minOccurs="0" />48 <xs:any processContents="skip" minOccurs="0" maxOccurs="unbounded" /> 10 49 </xs:sequence> 11 50 <xs:attribute name="name" type="xs:string" use="required" />
Note: See TracChangeset
for help on using the changeset viewer.
