Changeset 1004
- Timestamp:
- 01/10/10 05:15:02 (2 years ago)
- Location:
- trunk/docx4j
- Files:
-
- 8 added
- 2 deleted
- 24 edited
-
src/main/java/org/docx4j/Dom4jUtils.java (deleted)
-
src/main/java/org/docx4j/TextUtils.java (modified) (1 diff)
-
src/main/java/org/docx4j/XmlUtils.java (modified) (4 diffs)
-
src/main/java/org/docx4j/jaxb/Context.java (modified) (2 diffs)
-
src/main/java/org/docx4j/model/datastorage/Dom4jCustomXmlDataStorage.java (deleted)
-
src/main/java/org/docx4j/openpackaging/Base.java (modified) (2 diffs)
-
src/main/java/org/docx4j/openpackaging/contenttype/CTDefault.java (added)
-
src/main/java/org/docx4j/openpackaging/contenttype/CTOverride.java (added)
-
src/main/java/org/docx4j/openpackaging/contenttype/CTTypes.java (added)
-
src/main/java/org/docx4j/openpackaging/contenttype/ContentTypeManager.java (modified) (11 diffs)
-
src/main/java/org/docx4j/openpackaging/contenttype/ObjectFactory.java (added)
-
src/main/java/org/docx4j/openpackaging/contenttype/package-info.java (added)
-
src/main/java/org/docx4j/openpackaging/exceptions/InvalidFormatException.java (modified) (1 diff)
-
src/main/java/org/docx4j/openpackaging/io/Load.java (modified) (2 diffs)
-
src/main/java/org/docx4j/openpackaging/io/LoadFromJCR.java (modified) (5 diffs)
-
src/main/java/org/docx4j/openpackaging/io/LoadFromZipFile.java (modified) (5 diffs)
-
src/main/java/org/docx4j/openpackaging/io/LoadFromZipNG.java (modified) (5 diffs)
-
src/main/java/org/docx4j/openpackaging/io/SaveToJCR.java (modified) (3 diffs)
-
src/main/java/org/docx4j/openpackaging/io/SaveToZipFile.java (modified) (5 diffs)
-
src/main/java/org/docx4j/openpackaging/packages/WordprocessingMLPackage.java (modified) (6 diffs)
-
src/main/java/org/docx4j/openpackaging/parts/CustomXmlDataStoragePart.java (modified) (2 diffs)
-
src/main/java/org/docx4j/openpackaging/parts/CustomXmlDataStoragePropertiesPart.java (modified) (1 diff)
-
src/main/java/org/docx4j/openpackaging/parts/Part.java (modified) (2 diffs)
-
src/main/java/org/docx4j/openpackaging/parts/WordprocessingML/MainDocumentPart.java (modified) (3 diffs)
-
src/main/java/org/docx4j/openpackaging/parts/relationships/Namespaces.java (modified) (2 diffs)
-
src/main/java/org/docx4j/openpackaging/parts/relationships/RelationshipsPart.java (modified) (2 diffs)
-
src/main/java/org/docx4j/samples/CopyPart.java (modified) (1 diff)
-
src/main/java/org/docx4j/samples/CreateDocxWithCustomXml.java (modified) (4 diffs)
-
src/main/java/org/docx4j/samples/CreatePdf.java (modified) (1 diff)
-
src/main/java/org/docx4j/samples/CreateWordprocessingMLDocument.java (modified) (3 diffs)
-
src/main/java/org/docx4j/samples/ImportForeignPart.java (modified) (3 diffs)
-
xsd/contentTypes (added)
-
xsd/contentTypes/README (added)
-
xsd/contentTypes/opc-contentTypes.xsd (added)
Legend:
- Unmodified
- Added
- Removed
-
trunk/docx4j/src/main/java/org/docx4j/TextUtils.java
r869 r1004 23 23 24 24 import java.io.IOException; 25 import java.io.InputStream;26 import java.io.OutputStream;27 import java.io.ByteArrayOutputStream;28 25 import java.io.OutputStreamWriter; 29 import java.io.StringWriter;30 26 import java.io.Writer; 31 import java.util.Iterator;32 import java.util.Map;33 27 34 28 import javax.xml.bind.JAXBContext; 35 import javax.xml.bind.JAXBElement;36 import javax.xml.bind.JAXBException;37 29 import javax.xml.bind.Marshaller; 38 import javax.xml.bind.Unmarshaller;39 import javax.xml.parsers.DocumentBuilderFactory;40 import javax.xml.parsers.ParserConfigurationException;41 42 import javax.xml.transform.ErrorListener;43 import javax.xml.transform.Templates;44 import javax.xml.transform.Transformer;45 import javax.xml.transform.TransformerConfigurationException;46 import javax.xml.transform.TransformerException;47 import javax.xml.transform.dom.DOMSource;48 import javax.xml.transform.stream.StreamResult;49 import javax.xml.transform.stream.StreamSource;50 30 51 31 import org.apache.log4j.Logger; 52 import org.apache.xml.dtm.ref.DTMNodeProxy;53 32 import org.docx4j.jaxb.Context; 54 33 import org.docx4j.jaxb.NamespacePrefixMapperUtils; 55 import org.docx4j.openpackaging.exceptions.Docx4JException;56 34 import org.docx4j.openpackaging.packages.WordprocessingMLPackage; 57 35 import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart; 58 59 import org.dom4j.DocumentException;60 import org.dom4j.Element;61 import org.dom4j.io.DOMWriter;62 import org.dom4j.io.OutputFormat;63 import org.dom4j.io.XMLWriter;64 import org.w3c.dom.Attr;65 import org.w3c.dom.Document;66 import org.w3c.dom.DocumentFragment;67 import org.w3c.dom.NamedNodeMap;68 import org.w3c.dom.Node;69 import org.w3c.dom.NodeList;70 import org.xml.sax.Attributes;71 import org.xml.sax.ContentHandler;72 import org.xml.sax.Locator;73 36 import org.xml.sax.SAXException; 74 37 import org.xml.sax.helpers.DefaultHandler; -
trunk/docx4j/src/main/java/org/docx4j/XmlUtils.java
r999 r1004 58 58 import org.docx4j.openpackaging.exceptions.Docx4JException; 59 59 60 import org.dom4j.DocumentException;61 import org.dom4j.Element;62 import org.dom4j.io.DOMWriter;63 import org.dom4j.io.OutputFormat;64 import org.dom4j.io.XMLWriter;65 60 import org.w3c.dom.Attr; 66 61 import org.w3c.dom.Document; … … 74 69 private static Logger log = Logger.getLogger(XmlUtils.class); 75 70 76 /** Make a dom4j element into something JAXB can unmarshall */77 @Deprecated78 private static java.io.InputStream getInputStreamFromDom4jEl(Element el) {79 80 // Write it to an output stream81 java.io.ByteArrayOutputStream out = new java.io.ByteArrayOutputStream();82 OutputFormat format = OutputFormat.createPrettyPrint();83 try {84 XMLWriter xmlWriter = new XMLWriter( out, format );85 xmlWriter.write(el);86 xmlWriter.flush();87 } catch (IOException e) {88 e.printStackTrace();89 return null;90 }91 92 byte[] bytes = out.toByteArray();93 94 // Now return an input stream95 return new java.io.ByteArrayInputStream(bytes);96 97 }98 71 99 72 public static String TRANSFORMER_FACTORY_ORIGINAL; … … 181 154 } 182 155 183 /** Unmarshal a Dom4j element as JAXB object using JAXBContext Context.jc */ 184 @Deprecated 185 public static Object unmarshalDom4jDoc(org.dom4j.Document doc) { 186 187 JAXBContext jc = Context.jc; 188 189 Object o = null; 190 try { 191 org.dom4j.io.DOMWriter writer = new org.dom4j.io.DOMWriter(); 192 org.w3c.dom.Document w3cDoc = writer.write(doc); 193 194 // JAXBContext jc = JAXBContext 195 // .newInstance("org.docx4j.jaxb.document"); 196 Unmarshaller u = jc.createUnmarshaller(); 197 u.setEventHandler(new org.docx4j.jaxb.JaxbValidationEventHandler()); 198 199 o = u.unmarshal( w3cDoc ); 200 201 System.out.println("unmarshalled "); 202 203 } catch (Exception ex) { 204 ex.printStackTrace(); 205 } 206 return o; 207 } 208 209 /** Unmarshal a Dom4j element as an object in the package org.docx4j.jaxb.document. 210 * 211 * Since most of our types don't have an XmlRootElement, here we use 212 * the version of the unmarshal method that takes the 'expectedType' argument. 213 * See https://jaxb.dev.java.net/guide/_XmlRootElement_and_unmarshalling.html 214 * 215 * */ 216 @Deprecated 217 public static <T> JAXBElement<T> unmarshalDom4jEl(Element el, Class<T> declaredType) { 218 219 JAXBElement<T> o = null; 220 //Object o = null; 221 try { 222 223 JAXBContext jc = Context.jc; 224 225 Unmarshaller u = jc.createUnmarshaller(); 226 227 //u.setSchema(null); 228 //u.setValidating( false ); 229 230 u.setEventHandler(new org.docx4j.jaxb.JaxbValidationEventHandler()); 231 232 // // Convert dom4j el to W3C 233 // org.dom4j.io.DOMWriter writer = new org.dom4j.io.DOMWriter(); 234 // org.w3c.dom.Document w3cDoc = writer.write(el); // Only takes Document objects :( 235 236 o = u.unmarshal(new StreamSource(org.docx4j.XmlUtils.getInputStreamFromDom4jEl(el)), declaredType); 237 238 System.out.println("unmarshalled "); 239 240 } catch (Exception ex) { 241 ex.printStackTrace(); 242 } 243 return o; 244 } 156 245 157 246 158 /** Unmarshal an InputStream as an object in the package org.docx4j.jaxb.document. … … 287 199 } 288 200 289 /** Marshal to a Dom4j document */290 @Deprecated291 public static org.dom4j.Document marshaltoDom4jDocument(Object o) {292 // TODO - refactor this.293 try {294 JAXBContext jc = Context.jc;295 296 Marshaller marshaller=jc.createMarshaller();297 298 javax.xml.parsers.DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();299 dbf.setNamespaceAware(true);300 org.w3c.dom.Document doc = dbf.newDocumentBuilder().newDocument();301 NamespacePrefixMapperUtils.setProperty(marshaller,302 NamespacePrefixMapperUtils.getPrefixMapper());303 marshaller.marshal(o, doc);304 305 // Now convert the W3C document to a dom4j document306 org.dom4j.io.DOMReader xmlReader = new org.dom4j.io.DOMReader();307 308 /* Should be able to do ..309 *310 * dom4j has DocumentResult that extends Result, so you can do:311 312 DocumentResult dr = new DocumentResult();313 marshaller.marshal( object, dr );314 o = dr.getDocument();315 316 *317 *318 */319 return xmlReader.read(doc);320 } catch (JAXBException e) {321 // TODO Auto-generated catch block322 e.printStackTrace();323 } catch (ParserConfigurationException e) {324 // TODO Auto-generated catch block325 e.printStackTrace();326 }327 return null;328 }329 201 330 202 /** Marshal to a String */ -
trunk/docx4j/src/main/java/org/docx4j/jaxb/Context.java
r973 r1004 36 36 public static JAXBContext jcRelationships; 37 37 public static JAXBContext jcCustomXmlProperties; 38 public static JAXBContext jcContentTypes; 38 39 39 40 private static Logger log = Logger.getLogger(Context.class); … … 73 74 jcRelationships = JAXBContext.newInstance("org.docx4j.relationships",classLoader ); 74 75 jcCustomXmlProperties = JAXBContext.newInstance("org.docx4j.customXmlProperties",classLoader ); 76 jcContentTypes = JAXBContext.newInstance("org.docx4j.openpackaging.contenttype",classLoader ); 75 77 76 78 } catch (Exception ex) { -
trunk/docx4j/src/main/java/org/docx4j/openpackaging/Base.java
r954 r1004 24 24 25 25 import org.apache.log4j.Logger; 26 import org.docx4j.openpackaging.contenttype.CTDefault; 26 27 import org.docx4j.openpackaging.contenttype.ContentType; 28 import org.docx4j.openpackaging.contenttype.ObjectFactory; 27 29 import org.docx4j.openpackaging.exceptions.InvalidFormatException; 28 30 import org.docx4j.openpackaging.packages.Package; … … 181 183 182 184 // Make sure content manager knows how to handle .rels 185 ObjectFactory factory = new ObjectFactory(); 186 CTDefault relsCT = factory.createCTDefault(); 187 relsCT.setExtension("rels"); 188 relsCT.setContentType(org.docx4j.openpackaging.contenttype.ContentTypes.RELATIONSHIPS_PART); 189 183 190 getPackage().getContentTypeManager().addDefaultContentType("rels", 184 org.docx4j.openpackaging.contenttype.ContentTypes.RELATIONSHIPS_PART);191 relsCT); 185 192 } 186 193 -
trunk/docx4j/src/main/java/org/docx4j/openpackaging/contenttype/ContentTypeManager.java
r954 r1004 60 60 import java.util.zip.ZipOutputStream; 61 61 62 import javax.xml.bind.JAXBElement; 63 import javax.xml.bind.JAXBException; 64 import javax.xml.bind.Marshaller; 65 import javax.xml.bind.Unmarshaller; 66 62 67 import org.apache.log4j.Logger; 68 import org.docx4j.jaxb.Context; 69 import org.docx4j.jaxb.NamespacePrefixMapperUtils; 63 70 import org.docx4j.openpackaging.exceptions.InvalidFormatException; 64 71 import org.docx4j.openpackaging.exceptions.PartUnrecognisedException; … … 67 74 import org.docx4j.openpackaging.parts.*; 68 75 import org.docx4j.openpackaging.parts.WordprocessingML.*; 69 import org.dom4j.Document;70 import org.dom4j.DocumentException;71 import org.dom4j.DocumentHelper;72 import org.dom4j.Element;73 import org.dom4j.Namespace;74 import org.dom4j.QName;75 import org.dom4j.io.SAXReader;76 76 77 77 … … 115 115 * Default content type tree. <Extension, ContentType> 116 116 */ 117 private TreeMap<String, String> defaultContentType;117 private TreeMap<String, CTDefault> defaultContentType; 118 118 119 119 /** 120 120 * Override content type tree. 121 121 */ 122 private TreeMap<URI, String> overrideContentType; 123 124 /** 125 * Constructor. Parses the content of the specified input stream. 126 * 127 * @param archive 128 * If different of <i>null</i> then the content types part is 129 * retrieve and parse. 130 * @throws InvalidFormatException 131 * If the content types part content is not valid. 132 */ 133 public ContentTypeManager(Document contentTypes) throws InvalidFormatException { 134 init(); 135 if (contentTypes != null) { 136 try { 137 parseContentTypesFile(contentTypes); 138 } catch (InvalidFormatException e) { 139 throw new InvalidFormatException( 140 "Can't read content types part !"); 141 } 142 } else { 143 log.warn("Passed null content types ?!"); 144 } 145 } 122 private TreeMap<URI, CTOverride> overrideContentType; 123 124 private static ObjectFactory ctFactory = new ObjectFactory(); 146 125 147 126 public ContentTypeManager() { … … 150 129 151 130 private void init() { 152 defaultContentType = new TreeMap<String, String>();153 overrideContentType = new TreeMap<URI, String>();154 } 155 156 /**157 * Build association extention-> content type (will be stored in158 * [Content_Types].xml) for example ContentType="image/png" Extension="png"159 *160 * @param partUri161 * the uri that will be stored162 * @return <b>false</b> if an error occured.163 */164 public void addContentType(PartName partName, String contentType) {165 boolean defaultCTExists = false;166 String extension = partName.getExtension();167 if ((extension.length() == 0)168 || (this.defaultContentType.containsKey(extension)169 && !(defaultCTExists = this.defaultContentType.containsValue(contentType)))) {170 this.addOverrideContentType(partName.getURI(), contentType);171 } else if (!defaultCTExists) {172 this.addDefaultContentType(extension, contentType);173 }174 }131 defaultContentType = new TreeMap<String, CTDefault>(); 132 overrideContentType = new TreeMap<URI, CTOverride>(); 133 } 134 135 // /** 136 // * Build association extention-> content type (will be stored in 137 // * [Content_Types].xml) for example ContentType="image/png" Extension="png" 138 // * 139 // * @param partUri 140 // * the uri that will be stored 141 // * @return <b>false</b> if an error occured. 142 // */ 143 // public void addContentType(PartName partName, String contentType) { 144 // boolean defaultCTExists = false; 145 // String extension = partName.getExtension(); 146 // if ((extension.length() == 0) 147 // || (this.defaultContentType.containsKey(extension) 148 // && !(defaultCTExists = this.defaultContentType.containsValue(contentType)))) { 149 // this.addOverrideContentType(partName.getURI(), contentType); 150 // } else if (!defaultCTExists) { 151 // this.addDefaultContentType(extension, contentType); 152 // } 153 // } 175 154 176 155 /** … … 182 161 * Content type of the part. 183 162 */ 184 public void addOverrideContentType(URI partUri, StringcontentType) {163 public void addOverrideContentType(URI partUri, CTOverride contentType) { 185 164 log.info("Registered " + partUri.toString() ); 186 165 overrideContentType.put(partUri, contentType); 166 } 167 168 public void addOverrideContentType(URI partUri, String contentType) { 169 170 CTOverride overrideCT = ctFactory.createCTOverride(); 171 overrideCT.setPartName( partUri.toASCIIString() ); 172 overrideCT.setContentType(contentType ); 173 174 overrideContentType.put(partUri, overrideCT); 175 187 176 } 188 177 … … 205 194 if (e != null) { 206 195 log.debug("Inspecting " + e.getValue()); 207 if ( (( String)e.getValue()).equals(contentType) ) {196 if ( ((CTOverride)e.getValue()).getContentType().equals(contentType) ) { 208 197 log.debug("Matched!"); 209 198 return (URI)e.getKey(); … … 222 211 223 212 // look for an override 224 String contentType = (String)overrideContentType.get(new URI(partName)); 225 if (contentType!=null ) { 213 CTOverride overrideCT = (CTOverride) overrideContentType.get(new URI(partName)); 214 if (overrideCT!=null ) { 215 String contentType = overrideCT.getContentType(); 226 216 log.debug("Found content type '" + contentType + "' for " + partName); 227 217 p = newPartForContentType(contentType, partName); … … 233 223 String ext = partName.substring(partName.indexOf(".") + 1); 234 224 log.info("Looking at extension '" + ext); 235 contentType = (String)defaultContentType.get(ext); 236 if (contentType!=null ) { 225 CTDefault defaultCT = (CTDefault)defaultContentType.get(ext); 226 if (defaultCT!=null ) { 227 String contentType = defaultCT.getContentType(); 237 228 log.info("Found content type '" + contentType + "' for " 238 229 + partName); … … 442 433 * The content type associated with the specified extension. 443 434 */ 444 public void addDefaultContentType(String extension, StringcontentType) {435 public void addDefaultContentType(String extension, CTDefault contentType) { 445 436 log.debug("Registered " + extension ); 446 437 defaultContentType.put(extension, contentType); 447 438 } 439 440 public void addDefaultContentType(String extension, String contentType) { 441 442 CTDefault defaultCT = ctFactory.createCTDefault(); 443 defaultCT.setExtension("extension"); 444 defaultCT.setContentType(contentType); 445 446 log.debug("Registered " + extension ); 447 defaultContentType.put(extension, defaultCT); 448 } 449 448 450 449 451 /** … … 506 508 if ((this.overrideContentType != null) 507 509 && this.overrideContentType.containsKey(partName.getURI())) 508 return this.overrideContentType.get(partName.getURI()) ;510 return this.overrideContentType.get(partName.getURI()).getContentType(); 509 511 510 512 String extension = partName.getExtension(); 511 513 if (this.defaultContentType.containsKey(extension)) 512 return this.defaultContentType.get(extension) ;514 return this.defaultContentType.get(extension).getContentType(); 513 515 514 516 return null; … … 533 535 } 534 536 535 /** 536 * Parse the content types part. 537 * 538 * @throws InvalidFormatException 539 * Throws if the content type doesn't exist or the XML format is 540 * invalid. 541 */ 542 public void parseContentTypesFile(Document xmlContentTypeDoc) 543 throws InvalidFormatException { 544 //log.info("parseContentTypesFile"); 537 538 public void parseContentTypesFile(InputStream contentTypes) 539 throws InvalidFormatException { 540 541 CTTypes types; 542 545 543 try { 546 547 // Default content types 548 List defaultTypes = xmlContentTypeDoc.getRootElement().elements( 549 DEFAULT_TAG_NAME); 550 Iterator elementIteratorDefault = defaultTypes.iterator(); 551 while (elementIteratorDefault.hasNext()) { 552 Element element = (Element) elementIteratorDefault.next(); 553 String extension = element.attribute(EXTENSION_ATTRIBUTE_NAME) 554 .getValue(); 555 //log.info("found " + DEFAULT_TAG_NAME + extension); 556 String contentType = element.attribute( 557 CONTENT_TYPE_ATTRIBUTE_NAME).getValue(); 558 addDefaultContentType(extension, contentType); 544 545 Unmarshaller u = Context.jcContentTypes.createUnmarshaller(); 546 547 //u.setSchema(org.docx4j.jaxb.WmlSchema.schema); 548 u.setEventHandler(new org.docx4j.jaxb.JaxbValidationEventHandler()); 549 550 log.debug("unmarshalling " + this.getClass().getName() ); 551 552 Object res = u.unmarshal( contentTypes ); 553 types = (CTTypes)((JAXBElement)res).getValue(); 554 log.debug( types.getClass().getName() + " unmarshalled" ); 555 556 CTDefault defaultCT; 557 CTOverride overrideCT; 558 for(Object o : types.getDefaultOrOverride() ) { 559 560 if (o instanceof CTDefault) { 561 defaultCT = (CTDefault)o; 562 addDefaultContentType( defaultCT.getExtension(), defaultCT ); 563 } 564 565 if (o instanceof CTOverride) { 566 overrideCT = (CTOverride)o; 567 URI uri = new URI(overrideCT.getPartName() ); 568 addOverrideContentType(uri, overrideCT ); 569 } 559 570 } 560 561 // Overriden content types 562 List overrideTypes = xmlContentTypeDoc.getRootElement().elements( 563 OVERRIDE_TAG_NAME); 564 Iterator elementIteratorOverride = overrideTypes.iterator(); 565 while (elementIteratorOverride.hasNext()) { 566 Element element = (Element) elementIteratorOverride.next(); 567 URI uri = new URI(element.attribute(PART_NAME_ATTRIBUTE_NAME) 568 .getValue()); 569 String contentType = element.attribute( 570 CONTENT_TYPE_ATTRIBUTE_NAME).getValue(); 571 addOverrideContentType(uri, contentType); 571 572 } catch (Exception e ) { 573 log.error(e); 574 throw new InvalidFormatException("Bad [Content_Types].xml", e); 575 } 576 577 578 } 579 580 private CTTypes buildTypes() { 581 582 // Build the JAXB object 583 ObjectFactory factory = new ObjectFactory(); 584 CTTypes types = factory.createCTTypes(); 585 586 for (Entry<String, CTDefault> entry : defaultContentType.entrySet()) { 587 types.getDefaultOrOverride().add(entry.getValue()); 588 } 589 590 if (overrideContentType != null) { 591 for (Entry<URI, CTOverride> entry : overrideContentType.entrySet()) { 592 types.getDefaultOrOverride().add(entry.getValue()); 572 593 } 573 } catch (URISyntaxException urie) { 574 throw new InvalidFormatException(urie.getMessage()); 575 } 576 } 577 578 /** 579 * Generates the XML for the contents type part. 580 * 581 * @param outStream 582 * The output stream use to save the XML content of the content 583 * types part. 584 * @return <b>true</b> if the operation success, else <b>false</b>. 585 */ 586 public Document getDocument() { 587 Document xmlOutDoc = DocumentHelper.createDocument(); 588 589 // Building namespace 590 Namespace dfNs = Namespace.get("", TYPES_NAMESPACE_URI); 591 Element typesElem = xmlOutDoc 592 .addElement(new QName(TYPES_TAG_NAME, dfNs)); 593 594 // Adding default types 595 for (Entry<String, String> entry : defaultContentType.entrySet()) { 596 appendDefaultType(typesElem, entry); 597 } 598 599 // Adding specific types if any exist 600 if (overrideContentType != null) { 601 for (Entry<URI, String> entry : overrideContentType.entrySet()) { 602 appendSpecificTypes(typesElem, entry); 603 } 604 } 605 xmlOutDoc.normalize(); 606 607 return xmlOutDoc; 608 } 609 610 /** 611 * Use to append specific type XML elements, use by the save() method. 612 * 613 * @param root 614 * XML parent element use to append this override type element. 615 * @param entry 616 * The values to append. 617 * @see #save(ZipOutputStream) 618 */ 619 private void appendSpecificTypes(Element root, Entry<URI, String> entry) { 620 root.addElement(OVERRIDE_TAG_NAME).addAttribute( 621 PART_NAME_ATTRIBUTE_NAME, ((URI) entry.getKey()).getPath()) 622 .addAttribute(CONTENT_TYPE_ATTRIBUTE_NAME, 623 (String) entry.getValue()); 624 } 625 626 /** 627 * Use to append default types XML elements, use by the save() metid. 628 * 629 * @param root 630 * XML parent element use to append this default type element. 631 * @param entry 632 * The values to append. 633 * @see #save(ZipOutputStream) 634 */ 635 private void appendDefaultType(Element root, Entry<String, String> entry) { 636 root.addElement(DEFAULT_TAG_NAME).addAttribute( 637 EXTENSION_ATTRIBUTE_NAME, (String) entry.getKey()) 638 .addAttribute(CONTENT_TYPE_ATTRIBUTE_NAME, 639 (String) entry.getValue()); 640 641 } 594 } 595 return types; 596 } 597 598 public void marshal(org.w3c.dom.Node node) throws JAXBException { 599 600 try { 601 Marshaller marshaller = Context.jcContentTypes.createMarshaller(); 602 603 NamespacePrefixMapperUtils.setProperty(marshaller, 604 NamespacePrefixMapperUtils.getPrefixMapper() ); 605 606 log.debug("marshalling " + this.getClass().getName() + " ..." ); 607 608 marshaller.marshal(buildTypes(), node); 609 610 log.info("content types marshalled \n\n" ); 611 612 } catch (JAXBException e) { 613 //e.printStackTrace(); 614 log.error(e); 615 throw e; 616 } 617 } 618 619 public void marshal(java.io.OutputStream os) throws JAXBException { 620 621 try { 622 Marshaller marshaller = Context.jcContentTypes.createMarshaller(); 623 624 NamespacePrefixMapperUtils.setProperty(marshaller, 625 NamespacePrefixMapperUtils.getPrefixMapper() ); 626 627 log.debug("marshalling " + this.getClass().getName() + " ..." ); 628 629 marshaller.marshal(buildTypes(), os); 630 631 log.info("content types marshalled \n\n" ); 632 633 } catch (JAXBException e) { 634 //e.printStackTrace(); 635 log.error(e); 636 throw e; 637 } 638 } 639 640 642 641 643 642 /* Return a package of the appropriate type. Used when loading an existing -
trunk/docx4j/src/main/java/org/docx4j/openpackaging/exceptions/InvalidFormatException.java
r9 r1004 35 35 super(message); 36 36 } 37 38 public InvalidFormatException(String msg, Exception e) { 39 super(msg, e); 40 } 41 42 public InvalidFormatException(String msg, Throwable t) { 43 super(msg, t); 44 } 45 37 46 } -
trunk/docx4j/src/main/java/org/docx4j/openpackaging/io/Load.java
r1003 r1004 51 51 import org.docx4j.openpackaging.parts.relationships.Namespaces; 52 52 import org.docx4j.relationships.Relationship; 53 import org.dom4j.Document;54 import org.dom4j.io.OutputFormat;55 import org.dom4j.io.XMLWriter;56 53 57 54 … … 107 104 } 108 105 109 protected static void debugPrint( Document coreDoc) {110 try {111 OutputFormat format = OutputFormat.createPrettyPrint();112 113 StringWriter sWriter = new StringWriter();114 XMLWriter xmlWriter = new XMLWriter( sWriter, format );115 xmlWriter.write( coreDoc );116 log.warn(sWriter.toString() );117 } catch (Exception e ) {118 e.printStackTrace();119 }120 }121 106 122 107 /** -
trunk/docx4j/src/main/java/org/docx4j/openpackaging/io/LoadFromJCR.java
r1003 r1004 26 26 import java.net.URISyntaxException; 27 27 28 import java.util.HashMap;29 import java.util.Iterator;30 31 28 import javax.jcr.Node; 32 import javax.jcr. NodeIterator;29 import javax.jcr.PathNotFoundException; 33 30 import javax.jcr.Property; 34 import javax.jcr.Repository ;31 import javax.jcr.RepositoryException; 35 32 import javax.jcr.Session; 36 import javax.jcr.SimpleCredentials;37 import javax.jcr.ValueFormatException;38 39 import javax.jcr.PathNotFoundException;40 import javax.jcr.RepositoryException;41 42 import javax.xml.bind.JAXBContext;43 44 //import org.apache.jackrabbit.core.TransientRepository;45 33 46 34 import org.apache.log4j.Logger; 47 48 35 import org.docx4j.JcrNodeMapper.NodeMapper; 49 36 import org.docx4j.jaxb.Context; 50 37 import org.docx4j.model.datastorage.CustomXmlDataStorage; 38 import org.docx4j.openpackaging.Base; 51 39 import org.docx4j.openpackaging.URIHelper; 52 40 import org.docx4j.openpackaging.contenttype.ContentTypeManager; 41 import org.docx4j.openpackaging.exceptions.Docx4JException; 53 42 import org.docx4j.openpackaging.exceptions.InvalidFormatException; 54 import org.docx4j.openpackaging. Base;43 import org.docx4j.openpackaging.exceptions.PartUnrecognisedException; 55 44 import org.docx4j.openpackaging.packages.Package; 56 45 import org.docx4j.openpackaging.parts.DefaultXmlPart; … … 60 49 import org.docx4j.openpackaging.parts.relationships.Namespaces; 61 50 import org.docx4j.openpackaging.parts.relationships.RelationshipsPart; 62 import org.docx4j.relationships.Relationships;63 51 import org.docx4j.relationships.Relationship; 64 65 import org.docx4j.openpackaging.exceptions.Docx4JException;66 import org.docx4j.openpackaging.exceptions.PartUnrecognisedException;67 68 // Aim to remove dependency on any XML API from69 // this package.70 import org.dom4j.Document;71 import org.dom4j.DocumentException;72 import org.dom4j.io.SAXReader;73 52 74 53 … … 242 221 docxContentNode, "[Content_Types].xml"); 243 222 244 // Document ctmDocument = 245 // deprecatedGetDocumentFromJCRPart(jcrSession, nodeMapper, 246 // contentTypesPartNode); 247 InputStream in = getInputStreamFromJCRPart(nodeMapper, 223 InputStream is = getInputStreamFromJCRPart(nodeMapper, 248 224 contentTypesPartNode); 249 SAXReader xmlReader = new SAXReader(); 250 Document ctmDocument = null; 251 try { 252 ctmDocument = xmlReader.read(in); 253 debugPrint(ctmDocument); 254 } catch (DocumentException e) { 255 e.printStackTrace(); 256 throw e; 257 } 258 259 ctm.parseContentTypesFile(ctmDocument); 225 226 ctm.parseContentTypesFile(is); 260 227 261 228 } catch (Exception e) { … … 367 334 public static InputStream getInputStreamFromJCRPart(NodeMapper nodeMapper, 368 335 Node contentNode) 369 throws DocumentException,RepositoryException, PathNotFoundException {336 throws RepositoryException, PathNotFoundException { 370 337 371 338 try { … … 383 350 public static Node getPartNode(Session jcrSession, 384 351 NodeMapper nodeMapper, Node docxNode, String partName) 385 throws DocumentException,RepositoryException, PathNotFoundException {352 throws RepositoryException, PathNotFoundException { 386 353 387 354 long startTime = 0; -
trunk/docx4j/src/main/java/org/docx4j/openpackaging/io/LoadFromZipFile.java
r1003 r1004 51 51 import org.docx4j.openpackaging.parts.relationships.RelationshipsPart; 52 52 import org.docx4j.relationships.Relationship; 53 import org.dom4j.Document;54 import org.dom4j.DocumentException;55 import org.dom4j.io.SAXReader;56 53 57 54 … … 130 127 // but only the WordML package exists at present 131 128 132 Document ctmDocument = null;133 129 try { 134 ctmDocument = deprecatedGetDocumentFromZippedPart(zf, "[Content_Types].xml"); 135 } catch (Exception e) { 136 // Shouldn't happen 137 throw new Docx4JException("Couldn't get [Content_Types].xml", e); 138 } 139 debugPrint(ctmDocument); 140 ctm.parseContentTypesFile(ctmDocument); 130 InputStream is = getInputStreamFromZippedPart( zf, "[Content_Types].xml"); 131 ctm.parseContentTypesFile(is); 132 } catch (IOException e) { 133 throw new Docx4JException("Couldn't get [Content_Types].xml from ZipFile", e); 134 } 135 141 136 Package p = ctm.createPackage(); 142 137 … … 236 231 237 232 private static InputStream getInputStreamFromZippedPart(ZipFile zf, String partName) 238 throws DocumentException,IOException {233 throws IOException { 239 234 240 235 InputStream in = null; … … 244 239 245 240 246 private static Document deprecatedGetDocumentFromZippedPart(ZipFile zf, String partName)247 throws DocumentException, IOException {248 249 InputStream in = null;250 in = zf.getInputStream( zf.getEntry(partName ) );251 SAXReader xmlReader = new SAXReader();252 Document contents = null;253 try {254 contents = xmlReader.read(in);255 } catch (DocumentException e) {256 // Will land here for binary files eg gif file257 // These do get handled ..258 log.error("DocumentException on " + partName + " . Check this is binary content.");259 //e.printStackTrace() ;260 throw e;261 } finally {262 if (in != null) {263 try {264 in.close();265 } catch (IOException exc) {266 exc.printStackTrace();267 }268 }269 }270 return contents;271 }272 241 273 242 /* recursively … … 579 548 } 580 549 581 private void dumpZipFileContents(ZipFile zf) {582 Enumeration entries = zf.entries();583 // Enumerate through the Zip entries until we find the one named584 // '[Content_Types].xml'.585 while (entries.hasMoreElements()) {586 ZipEntry entry = (ZipEntry) entries.nextElement();587 log.info( "\n\n" + entry.getName() + "\n" );588 InputStream in = null;589 try {590 in = zf.getInputStream(entry);591 } catch (IOException e) {592 e.printStackTrace() ;593 }594 SAXReader xmlReader = new SAXReader();595 Document xmlDoc = null;596 try {597 xmlDoc = xmlReader.read(in);598 } catch (DocumentException e) {599 // Will land here for binary files eg gif file600 e.printStackTrace() ;601 } finally {602 if (in != null) {603 try {604 in.close();605 } catch (IOException exc) {606 exc.printStackTrace();607 }608 }609 }610 debugPrint(xmlDoc);611 612 }613 614 }615 616 617 618 619 620 550 621 551 } -
trunk/docx4j/src/main/java/org/docx4j/openpackaging/io/LoadFromZipNG.java
r1003 r1004 59 59 import org.docx4j.relationships.Relationship; 60 60 61 import org.dom4j.Document;62 import org.dom4j.DocumentException;63 import org.dom4j.io.SAXReader;64 61 65 62 … … 187 184 // Eventually, you'll also be able to create an Excel package etc 188 185 // but only the WordML package exists at present 189 190 Document ctmDocument = null; 186 191 187 try { 192 ctmDocument = deprecatedGetDocumentFromZippedPart(partByteArrays, "[Content_Types].xml"); 193 } catch (Exception e) { 194 // Shouldn't happen 195 throw new Docx4JException("Couldn't get [Content_Types].xml", e); 196 } 197 debugPrint(ctmDocument); 198 ctm.parseContentTypesFile(ctmDocument); 188 InputStream is = getInputStreamFromZippedPart( partByteArrays, "[Content_Types].xml"); 189 ctm.parseContentTypesFile(is); 190 } catch (IOException e) { 191 throw new Docx4JException("Couldn't get [Content_Types].xml from ZipFile", e); 192 } 193 199 194 Package p = ctm.createPackage(); 200 195 … … 290 285 String partName) 291 286 //private static InputStream getInputStreamFromZippedPart(ZipFile zf, String partName) 292 throws DocumentException,IOException {287 throws IOException { 293 288 294 289 InputStream in = null; … … 298 293 } 299 294 300 301 private static Document deprecatedGetDocumentFromZippedPart(HashMap<String, ByteArray> partByteArrays, 302 String partName) 303 //private static Document deprecatedGetDocumentFromZippedPart(ZipFile zf, String partName) 304 throws DocumentException, IOException { 305 306 InputStream in = null; 307 // in = zf.getInputStream( zf.getEntry(partName ) ); 308 in = partByteArrays.get(partName).getInputStream(); 309 SAXReader xmlReader = new SAXReader(); 310 Document contents = null; 311 try { 312 contents = xmlReader.read(in); 313 } catch (DocumentException e) { 314 // Will land here for binary files eg gif file 315 // These do get handled .. 316 log.error("DocumentException on " + partName + " . Check this is binary content."); 317 //e.printStackTrace() ; 318 throw e; 319 } finally { 320 if (in != null) { 321 try { 322 in.close(); 323 } catch (IOException exc) { 324 exc.printStackTrace(); 325 } 326 } 327 } 328 return contents; 329 } 330 295 331 296 /* recursively 332 297 (i) create new Parts for each thing listed … … 632 597 return part; 633 598 } 634 635 private void dumpZipFileContents(ZipFile zf) { 636 Enumeration entries = zf.entries(); 637 // Enumerate through the Zip entries until we find the one named 638 // '[Content_Types].xml'. 639 while (entries.hasMoreElements()) { 640 ZipEntry entry = (ZipEntry) entries.nextElement(); 641 log.info( "\n\n" + entry.getName() + "\n" ); 642 InputStream in = null; 643 try { 644 in = zf.getInputStream(entry); 645 } catch (IOException e) { 646 e.printStackTrace() ; 647 } 648 SAXReader xmlReader = new SAXReader(); 649 Document xmlDoc = null; 650 try { 651 xmlDoc = xmlReader.read(in); 652 } catch (DocumentException e) { 653 // Will land here for binary files eg gif file 654 e.printStackTrace() ; 655 } finally { 656 if (in != null) { 657 try { 658 in.close(); 659 } catch (IOException exc) { 660 exc.printStackTrace(); 661 } 662 } 663 } 664 debugPrint(xmlDoc); 665 666 } 667 668 } 669 599 670 600 class ByteArray { 671 601 -
trunk/docx4j/src/main/java/org/docx4j/openpackaging/io/SaveToJCR.java
r1003 r1004 63 63 import org.docx4j.openpackaging.exceptions.Docx4JException; 64 64 65 import org.dom4j.Document;66 import org.dom4j.DocumentException;67 import org.dom4j.io.OutputFormat;68 import org.dom4j.io.XMLWriter;69 70 65 import org.merlin.io.DOMSerializerEngine; 71 66 import org.merlin.io.OutputEngineInputStream; … … 141 136 // 3. Get [Content_Types].xml 142 137 ContentTypeManager ctm = p.getContentTypeManager(); 143 org.w3c.dom.Document w3cDoc = null; 144 // convert dom4j node to real W3C dom node 145 w3cDoc = new org.dom4j.io.DOMWriter() 146 .write(ctm.getDocument()); 147 saveRawXmlPart(jcrSession, baseNode, "[Content_Types].xml", w3cDoc ); 138 javax.xml.parsers.DocumentBuilderFactory dbf = javax.xml.parsers.DocumentBuilderFactory.newInstance(); 139 dbf.setNamespaceAware(true); 140 org.w3c.dom.Document w3cDoc = dbf.newDocumentBuilder().newDocument(); 141 142 ctm.marshal( w3cDoc ); 143 144 saveRawXmlPart(jcrSession, baseNode, "[Content_Types].xml", w3cDoc); 145 148 146 149 147 // 4. Start with _rels/.rels … … 766 764 } 767 765 768 769 770 protected void debugPrint( Document coreDoc) {771 try {772 OutputFormat format = OutputFormat.createPrettyPrint();773 XMLWriter writer = new XMLWriter( System.out, format );774 writer.write( coreDoc );775 } catch (Exception e ) {776 e.printStackTrace();777 }778 }779 766 780 767 // // Testing - Jackrabbit only -
trunk/docx4j/src/main/java/org/docx4j/openpackaging/io/SaveToZipFile.java
r1003 r1004 26 26 import java.io.FileOutputStream; 27 27 import java.io.IOException; 28 import java.io.InputStream;29 28 import java.io.OutputStream; 30 29 import java.net.URI; 31 import java.util.Enumeration;32 import java.util.Iterator;33 30 import java.util.zip.ZipEntry; 34 import java.util.zip.ZipFile;35 31 import java.util.zip.ZipOutputStream; 36 32 … … 44 40 import org.docx4j.openpackaging.parts.WordprocessingML.BinaryPart; 45 41 import org.docx4j.openpackaging.parts.relationships.RelationshipsPart; 46 import org.docx4j.relationships.Relationships;47 42 import org.docx4j.relationships.Relationship; 48 49 import org.dom4j.Document;50 import org.dom4j.DocumentException;51 import org.dom4j.io.OutputFormat;52 import org.dom4j.io.SAXReader;53 import org.dom4j.io.XMLWriter;54 43 55 44 … … 107 96 108 97 109 // 3. Get[Content_Types].xml98 // 3. Save [Content_Types].xml 110 99 ContentTypeManager ctm = p.getContentTypeManager(); 111 deprecatedSaveRawXmlPart(out, "[Content_Types].xml", ctm.getDocument() ); 100 out.putNextEntry(new ZipEntry("[Content_Types].xml")); 101 ctm.marshal(out); 102 out.closeEntry(); 112 103 113 104 // 4. Start with _rels/.rels … … 228 219 } 229 220 230 protected void deprecatedSaveRawXmlPart(ZipOutputStream out, String partName, Document xml) throws Docx4JException {231 232 try {233 // Add ZIP entry to output stream.234 out.putNextEntry(new ZipEntry(partName));235 236 237 OutputFormat format = OutputFormat.createPrettyPrint();238 format.setEncoding("UTF-8");239 XMLWriter writer = new XMLWriter( out, format );240 writer.write( xml );241 // Complete the entry242 out.closeEntry();243 log.info( "PUT SUCCESS: " + partName);244 } catch (Exception e ) {245 e.printStackTrace();246 throw new Docx4JException("Failed to put " + partName, e);247 }248 249 }250 221 251 222 /* recursively … … 403 374 404 375 405 406 private void dumpZipFileContents(ZipFile zf) {407 Enumeration entries = zf.entries();408 // Enumerate through the Zip entries until we find the one named409 // '[Content_Types].xml'.410 while (entries.hasMoreElements()) {411 ZipEntry entry = (ZipEntry) entries.nextElement();412 log.info( "\n\n" + entry.getName() + "\n" );413 InputStream in = null;414 try {415 in = zf.getInputStream(entry);416 } catch (IOException e) {417 e.printStackTrace() ;418 }419 SAXReader xmlReader = new SAXReader();420 Document xmlDoc = null;421 try {422 xmlDoc = xmlReader.read(in);423 } catch (DocumentException e) {424 // Will land here for binary files eg gif file425 e.printStackTrace() ;426 }427 debugPrint(xmlDoc);428 429 }430 431 }432 433 434 private void debugPrint( Document coreDoc) {435 try {436 OutputFormat format = OutputFormat.createPrettyPrint();437 XMLWriter writer = new XMLWriter( System.out, format );438 writer.write( coreDoc );439 } catch (Exception e ) {440 e.printStackTrace();441 }442 }443 444 445 446 376 } -
trunk/docx4j/src/main/java/org/docx4j/openpackaging/packages/WordprocessingMLPackage.java
r995 r1004 24 24 import java.io.FileInputStream; 25 25 import java.io.FileNotFoundException; 26 import java.io.FileOutputStream; 26 27 import java.util.Map; 27 28 … … 30 31 import javax.xml.bind.JAXBException; 31 32 import javax.xml.bind.Marshaller; 33 import javax.xml.bind.PropertyException; 32 34 import javax.xml.bind.Unmarshaller; 33 35 import javax.xml.transform.Source; … … 41 43 import org.docx4j.fonts.Mapper; 42 44 import org.docx4j.jaxb.Context; 45 import org.docx4j.jaxb.NamespacePrefixMapperUtils; 43 46 import org.docx4j.model.structure.DocumentModel; 44 47 import org.docx4j.model.structure.HeaderFooterPolicy; … … 197 200 */ 198 201 public void save(java.io.File docxFile) throws Docx4JException { 199 202 203 if (docxFile.getName().endsWith(".xml")) { 204 205 // Create a org.docx4j.wml.Package object 206 FlatOpcXmlCreator worker = new FlatOpcXmlCreator(this); 207 org.docx4j.xmlPackage.Package pkg = worker.get(); 208 209 // Now marshall it 210 JAXBContext jc = Context.jcXmlPackage; 211 try { 212 Marshaller marshaller=jc.createMarshaller(); 213 214 marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); 215 NamespacePrefixMapperUtils.setProperty(marshaller, 216 NamespacePrefixMapperUtils.getPrefixMapper()); 217 218 marshaller.marshal(pkg, new FileOutputStream(docxFile)); 219 } catch (Exception e) { 220 throw new Docx4JException("Error saving Flat OPC XML", e); 221 } 222 return; 223 } 224 200 225 SaveToZipFile saver = new SaveToZipFile(this); 201 226 saver.save(docxFile); … … 379 404 380 405 // Create main document part 381 Part wordDocumentPart = new org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart();406 MainDocumentPart wordDocumentPart = new MainDocumentPart(); 382 407 383 408 // Create main document part content 384 org.docx4j.wml.ObjectFactory factory = new org.docx4j.wml.ObjectFactory(); 385 386 org.docx4j.wml.Body body = factory.createBody(); 387 409 org.docx4j.wml.ObjectFactory factory = Context.getWmlObjectFactory(); 410 org.docx4j.wml.Body body = factory.createBody(); 388 411 org.docx4j.wml.Document wmlDocumentEl = factory.createDocument(); 412 389 413 wmlDocumentEl.setBody(body); 390 414 … … 397 421 398 422 // Put the content in the part 399 ((org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart)wordDocumentPart).setJaxbElement(wmlDocumentEl);423 wordDocumentPart.setJaxbElement(wmlDocumentEl); 400 424 401 425 // Add the main document part to the package relationships -
trunk/docx4j/src/main/java/org/docx4j/openpackaging/parts/CustomXmlDataStoragePart.java
r848 r1004 27 27 28 28 import javax.xml.bind.JAXBContext; 29 import javax.xml.bind.JAXBException;30 import javax.xml.bind.Marshaller;31 29 import javax.xml.transform.Source; 32 30 import javax.xml.transform.Templates; … … 38 36 import org.docx4j.jaxb.Context; 39 37 import org.docx4j.model.datastorage.CustomXmlDataStorage; 40 import org.docx4j.model.datastorage.CustomXmlDataStorageImpl;41 38 import org.docx4j.openpackaging.exceptions.Docx4JException; 42 39 import org.docx4j.openpackaging.exceptions.InvalidFormatException; 43 import org.docx4j.openpackaging.parts.Part;44 40 import org.docx4j.openpackaging.parts.WordprocessingML.DocumentPart; 45 41 import org.docx4j.openpackaging.parts.relationships.Namespaces; 46 47 import org.dom4j.Document;48 49 42 50 43 -
trunk/docx4j/src/main/java/org/docx4j/openpackaging/parts/CustomXmlDataStoragePropertiesPart.java
r817 r1004 24 24 import org.docx4j.customXmlProperties.DatastoreItem; 25 25 import org.docx4j.openpackaging.exceptions.InvalidFormatException; 26 import org.docx4j.openpackaging.parts.Part;27 26 import org.docx4j.openpackaging.parts.relationships.Namespaces; 28 29 import org.dom4j.Document;30 31 27 32 28 -
trunk/docx4j/src/main/java/org/docx4j/openpackaging/parts/Part.java
r995 r1004 30 30 import org.docx4j.openpackaging.parts.relationships.RelationshipsPart; 31 31 import org.docx4j.relationships.Relationship; 32 33 import org.dom4j.Document;34 32 35 33 import org.apache.log4j.Logger; … … 137 135 138 136 139 /**140 * Constructor.141 *142 * @param partName143 * The part name, relative to the parent Package root.144 * @throws InvalidFormatException145 * If the specified URI is not valid.146 */147 public Part(PartName partName, Document document)148 throws InvalidFormatException {149 this.partName = partName;150 }151 137 152 138 /** -
trunk/docx4j/src/main/java/org/docx4j/openpackaging/parts/WordprocessingML/MainDocumentPart.java
r995 r1004 48 48 import org.docx4j.wml.Style; 49 49 import org.docx4j.wml.Styles; 50 import org.dom4j.Document;51 import org.dom4j.io.OutputFormat;52 import org.dom4j.io.XMLWriter;53 50 54 51 … … 512 509 } 513 510 514 private void debugPrint( Document coreDoc) {515 try {516 OutputFormat format = OutputFormat.createPrettyPrint();517 XMLWriter writer = new XMLWriter( System.out, format );518 writer.write( coreDoc );519 } catch (Exception e ) {520 e.printStackTrace();521 }522 }523 511 524 512 /** … … 627 615 public void addObject(Object o) { 628 616 629 org.docx4j.wml.Document wmlDocumentEl = (org.docx4j.wml.Document)this.getJaxbElement(); 630 Body body = wmlDocumentEl.getBody(); 617 Body body = this.jaxbElement.getBody(); 631 618 body.getEGBlockLevelElts().add(o); 632 619 -
trunk/docx4j/src/main/java/org/docx4j/openpackaging/parts/relationships/Namespaces.java
r954 r1004 20 20 21 21 package org.docx4j.openpackaging.parts.relationships; 22 23 import org.dom4j.Namespace;24 22 25 23 public class Namespaces { … … 148 146 149 147 public final static String W_NAMESPACE_DECLARATION = "xmlns:w=\"" + NS_WORD12 + "\""; 150 151 // This is dom4j specific 152 @Deprecated 153 public final static Namespace namespaceWord = new Namespace("w", NS_WORD12); 154 148 155 149 public final static String HYPERLINK = 156 150 "http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink"; -
trunk/docx4j/src/main/java/org/docx4j/openpackaging/parts/relationships/RelationshipsPart.java
r962 r1004 62 62 import org.docx4j.openpackaging.Base; 63 63 import org.docx4j.openpackaging.URIHelper; 64 import org.docx4j.openpackaging.contenttype.CTDefault; 65 import org.docx4j.openpackaging.contenttype.CTOverride; 64 66 import org.docx4j.openpackaging.contenttype.ContentTypeManager; 65 67 import org.docx4j.openpackaging.contenttype.ContentTypes; 68 import org.docx4j.openpackaging.contenttype.ObjectFactory; 66 69 import org.docx4j.openpackaging.exceptions.InvalidFormatException; 67 70 import org.docx4j.openpackaging.packages.Package; … … 427 430 428 431 // Add an override to ContentTypeManager 432 ObjectFactory ctFactory = new ObjectFactory(); 433 429 434 if ( part.getContentType().equals( ContentTypes.IMAGE_JPEG) ) { 430 435 431 ctm.addDefaultContentType("jpeg", ContentTypes.IMAGE_JPEG); 436 CTDefault defaultCT = ctFactory.createCTDefault(); 437 defaultCT.setExtension("jpeg"); 438 defaultCT.setContentType(ContentTypes.IMAGE_JPEG); 439 ctm.addDefaultContentType("jpeg",defaultCT ); 432 440 433 441 } else if ( part.getContentType().equals( ContentTypes.EXTENSION_GIF ) ) { 434 442 435 ctm.addDefaultContentType("gif", ContentTypes.EXTENSION_GIF); 443 CTDefault defaultCT = ctFactory.createCTDefault(); 444 defaultCT.setExtension("gif"); 445 defaultCT.setContentType(ContentTypes.EXTENSION_GIF); 446 ctm.addDefaultContentType("gif", defaultCT); 436 447 437 448 } else if ( part.getContentType().equals( ContentTypes.EXTENSION_PNG ) ) { 438 449 439 ctm.addDefaultContentType("png", ContentTypes.IMAGE_PNG); 450 CTDefault defaultCT = ctFactory.createCTDefault(); 451 defaultCT.setExtension("png"); 452 defaultCT.setContentType(ContentTypes.IMAGE_PNG); 453 ctm.addDefaultContentType("png", defaultCT); 440 454 441 455 } else { 442 ctm.addOverrideContentType(part.getPartName().getURI(), part.getContentType()); 456 CTOverride overrideCT = ctFactory.createCTOverride(); 457 overrideCT.setPartName(part.getPartName().getName() ); 458 overrideCT.setContentType(part.getContentType()); 459 460 ctm.addOverrideContentType(part.getPartName().getURI(), overrideCT ); 443 461 } 444 462 -
trunk/docx4j/src/main/java/org/docx4j/samples/CopyPart.java
r962 r1004 22 22 package org.docx4j.samples; 23 23 24 import java.io.File;25 24 import java.io.FileInputStream; 26 import java.io.FileOutputStream;27 import java.io.IOException;28 import java.io.InputStream;29 25 30 import javax.jcr.Node;31 import javax.jcr.Session;32 26 import javax.xml.bind.JAXBContext; 33 27 import javax.xml.bind.JAXBElement; 34 import javax.xml.bind.Marshaller;35 28 import javax.xml.bind.Unmarshaller; 36 29 37 import org.docx4j.JcrNodeMapper.NodeMapper;38 import org.docx4j.convert.out.flatOpcXml.FlatOpcXmlCreator;39 import org.docx4j.dml.Inline;40 import org.docx4j.docProps.extended.Properties;41 30 import org.docx4j.jaxb.Context; 42 import org.docx4j.openpackaging.Base;43 31 import org.docx4j.openpackaging.packages.WordprocessingMLPackage; 44 import org.docx4j.openpackaging.exceptions.Docx4JException;45 import org.docx4j.openpackaging.exceptions.InvalidFormatException;46 import org.docx4j.openpackaging.io.Load;47 import org.docx4j.openpackaging.io.SaveToZipFile;48 49 import org.docx4j.openpackaging.parts.DocPropsExtendedPart;50 32 import org.docx4j.openpackaging.parts.Part; 51 33 import org.docx4j.openpackaging.parts.PartName; 52 import org.docx4j.openpackaging.contenttype.ContentType;53 import org.docx4j.openpackaging.contenttype.ContentTypeManager;54 import org.docx4j.openpackaging.contenttype.ContentTypes;55 import org.docx4j.relationships.Relationship;56 import org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage;57 34 import org.docx4j.openpackaging.parts.relationships.Namespaces; 58 35 import org.docx4j.openpackaging.parts.relationships.RelationshipsPart; 59 import org.dom4j.Document; 60 import org.dom4j.DocumentException; 61 import org.dom4j.io.SAXReader; 36 import org.docx4j.relationships.Relationship; 62 37 63 38 /** -
trunk/docx4j/src/main/java/org/docx4j/samples/CreateDocxWithCustomXml.java
r819 r1004 24 24 import java.io.File; 25 25 26 import org.docx4j.model.datastorage.Dom4jCustomXmlDataStorage; 26 import org.docx4j.model.datastorage.CustomXmlDataStorage; 27 import org.docx4j.model.datastorage.CustomXmlDataStorageImpl; 27 28 import org.docx4j.openpackaging.Base; 28 29 import org.docx4j.openpackaging.packages.WordprocessingMLPackage; … … 32 33 import org.docx4j.openpackaging.exceptions.InvalidFormatException; 33 34 import org.docx4j.openpackaging.io.SaveToZipFile; 34 import org.dom4j.Document;35 import org.dom4j.DocumentHelper;36 import org.dom4j.Element;37 35 38 36 /** … … 73 71 // Defaults to /customXml/item1.xml 74 72 75 Dom4jCustomXmlDataStorage data = new Dom4jCustomXmlDataStorage();73 CustomXmlDataStorage data = new CustomXmlDataStorageImpl(); 76 74 data.setDocument(createCustomXmlDocument()); 77 75 … … 90 88 } 91 89 92 public static Document createCustomXmlDocument() {90 public static org.w3c.dom.Document createCustomXmlDocument() { 93 91 94 Document document = DocumentHelper.createDocument(); 95 Element root = document.addElement("root"); 92 // TODO: implement 96 93 97 Element myChild = root.addElement("myChild").addAttribute("att1", "att1Val").addAttribute("att2", "att2Val").addText("some text"); 98 99 return document; 94 return null; 100 95 101 96 } -
trunk/docx4j/src/main/java/org/docx4j/samples/CreatePdf.java
r1000 r1004 49 49 throws Exception { 50 50 51 boolean save = true;51 boolean save = false; 52 52 53 53 String inputfilepath = System.getProperty("user.dir") + "/sample-docs/sample-docx.xml"; -
trunk/docx4j/src/main/java/org/docx4j/samples/CreateWordprocessingMLDocument.java
r955 r1004 34 34 import org.docx4j.openpackaging.parts.PartName; 35 35 import org.docx4j.openpackaging.parts.WordprocessingML.AlternativeFormatInputPart; 36 import org.docx4j.openpackaging.contenttype.CTDefault; 36 37 import org.docx4j.openpackaging.contenttype.ContentType; 38 import org.docx4j.openpackaging.contenttype.ContentTypes; 39 import org.docx4j.openpackaging.contenttype.ObjectFactory; 37 40 import org.docx4j.openpackaging.exceptions.InvalidFormatException; 38 41 import org.docx4j.openpackaging.io.SaveToZipFile; … … 124 127 ac.setId(altChunkRel.getId() ); 125 128 wordMLPackage.getMainDocumentPart().addObject(ac); 129 126 130 // .. content type 127 wordMLPackage.getContentTypeManager().addDefaultContentType("html", "text/html"); 131 ObjectFactory ctFactory = new ObjectFactory(); 132 CTDefault defaultCT = ctFactory.createCTDefault(); 133 defaultCT.setExtension("html"); 134 defaultCT.setContentType("text/html"); 135 wordMLPackage.getContentTypeManager().addDefaultContentType("html", defaultCT); 128 136 129 137 //injectDocPropsCustomPart(wordMLPackage); … … 132 140 if (save) { 133 141 System.out.println("Saved."); 134 wordMLPackage.save(new java.io.File(System.getProperty("user.dir") + "/a c.docx") );142 wordMLPackage.save(new java.io.File(System.getProperty("user.dir") + "/ad.docx") ); 135 143 } else { 136 144 // Create a org.docx4j.wml.Package object -
trunk/docx4j/src/main/java/org/docx4j/samples/ImportForeignPart.java
r856 r1004 48 48 import org.docx4j.openpackaging.parts.Part; 49 49 import org.docx4j.openpackaging.parts.PartName; 50 import org.docx4j.openpackaging.contenttype.CTOverride; 50 51 import org.docx4j.openpackaging.contenttype.ContentType; 51 52 import org.docx4j.openpackaging.contenttype.ContentTypeManager; 52 53 import org.docx4j.openpackaging.contenttype.ContentTypes; 54 import org.docx4j.openpackaging.contenttype.ObjectFactory; 53 55 import org.docx4j.relationships.Relationship; 54 56 import org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage; 55 57 import org.docx4j.openpackaging.parts.relationships.Namespaces; 56 import org.dom4j.Document;57 import org.dom4j.DocumentException;58 import org.dom4j.io.SAXReader;59 58 60 59 /** … … 73 72 // Need to know how what type of part to map to 74 73 InputStream in = new FileInputStream("/home/dev/workspace/docx4j/foregin_parts/[Content_Types].xml"); 75 SAXReader xmlReader = new SAXReader();76 Document ctmDocument = null;77 try {78 ctmDocument = xmlReader.read(in);79 } catch (DocumentException e) {80 e.printStackTrace();81 throw e;82 }83 74 ContentTypeManager externalCtm = new ContentTypeManager(); 84 externalCtm.parseContentTypesFile( ctmDocument);75 externalCtm.parseContentTypesFile(in); 85 76 86 77 // Example of a part which become a rel of the word document … … 112 103 // Add content type 113 104 ContentTypeManager packageCtm = wordMLPackage.getContentTypeManager(); 114 packageCtm.addOverrideContentType(foreignPart.getPartName().getURI(), foreignPart.getContentType()); 105 ObjectFactory ctFactory = new ObjectFactory(); 106 CTOverride overrideCT = ctFactory.createCTOverride(); 107 overrideCT.setPartName(foreignPart.getPartName().getName() ); 108 overrideCT.setContentType(foreignPart.getContentType()); 109 110 packageCtm.addOverrideContentType(foreignPart.getPartName().getURI(), overrideCT ); 115 111 116 112 System.out.println("Attached foreign part: " + resolvedPartUri);
Note: See TracChangeset
for help on using the changeset viewer.
