Changeset 1716 for trunk/docx4j/src/main
- Timestamp:
- 11/18/11 05:43:44 (6 months ago)
- Location:
- trunk/docx4j/src/main/java/org/docx4j
- Files:
-
- 2 edited
-
convert/in/css/Importer.java (modified) (11 diffs)
-
model/datastorage/BindingHandler.java (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/docx4j/src/main/java/org/docx4j/convert/in/css/Importer.java
r1715 r1716 13 13 import org.apache.log4j.Logger; 14 14 import org.docx4j.XmlUtils; 15 import org.docx4j.dml.wordprocessingDrawing.Inline; 15 16 import org.docx4j.jaxb.Context; 16 17 import org.docx4j.model.properties.Property; … … 19 20 import org.docx4j.model.properties.run.AbstractRunProperty; 20 21 import org.docx4j.openpackaging.packages.WordprocessingMLPackage; 22 import org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage; 21 23 import org.docx4j.openpackaging.parts.WordprocessingML.NumberingDefinitionsPart; 22 24 import org.docx4j.openpackaging.parts.relationships.Namespaces; … … 27 29 import org.docx4j.org.xhtmlrenderer.css.style.DerivedValue; 28 30 import org.docx4j.org.xhtmlrenderer.css.style.FSDerivedValue; 31 import org.docx4j.org.xhtmlrenderer.docx.Docx4JFSImage; 32 import org.docx4j.org.xhtmlrenderer.docx.Docx4jUserAgent; 29 33 import org.docx4j.org.xhtmlrenderer.docx.DocxRenderer; 30 34 import org.docx4j.org.xhtmlrenderer.layout.Styleable; … … 33 37 import org.docx4j.org.xhtmlrenderer.render.Box; 34 38 import org.docx4j.org.xhtmlrenderer.render.InlineBox; 35 import org.docx4j.relationships.Relationships;36 39 import org.docx4j.wml.Numbering; 37 40 import org.docx4j.wml.P; 41 import org.docx4j.wml.P.Hyperlink; 38 42 import org.docx4j.wml.PPr; 43 import org.docx4j.wml.PPrBase.NumPr; 44 import org.docx4j.wml.PPrBase.NumPr.Ilvl; 45 import org.docx4j.wml.PPrBase.NumPr.NumId; 39 46 import org.docx4j.wml.R; 40 47 import org.docx4j.wml.RPr; 41 48 import org.docx4j.wml.Text; 42 import org.docx4j.wml.P.Hyperlink;43 import org.docx4j.wml.PPrBase.NumPr;44 import org.docx4j.wml.PPrBase.NumPr.Ilvl;45 import org.docx4j.wml.PPrBase.NumPr.NumId;46 49 import org.w3c.dom.Element; 47 50 import org.w3c.dom.css.CSSValue; … … 73 76 private P currentP; 74 77 78 private WordprocessingMLPackage wordMLPackage; 75 79 private RelationshipsPart rp; 76 80 private NumberingDefinitionsPart ndp; … … 78 82 private ListHelper listHelper; 79 83 80 private Importer(RelationshipsPart rp, NumberingDefinitionsPart ndp) { 81 this.rp = rp; 82 this.ndp = ndp; 84 private DocxRenderer renderer; 85 86 private Importer(WordprocessingMLPackage wordMLPackage) { 87 this.wordMLPackage= wordMLPackage; 88 rp = wordMLPackage.getMainDocumentPart().getRelationshipsPart(); 89 ndp = wordMLPackage.getMainDocumentPart().getNumberingDefinitionsPart(); 90 83 91 listHelper = new ListHelper(); 84 92 } 85 93 86 public static List<Object> convert(File file, RelationshipsPart rp, NumberingDefinitionsPart ndp) throws IOException { 87 88 DocxRenderer renderer = new DocxRenderer(); 89 renderer.setDocument(file); 90 renderer.layout(); 94 public static List<Object> convert(File file, WordprocessingMLPackage wordMLPackage) throws IOException { 95 96 Importer importer = new Importer(wordMLPackage); 97 98 importer.renderer = new DocxRenderer(); 99 importer.renderer.setDocument(file); 100 importer.renderer.layout(); 91 101 92 Importer importer = new Importer(rp, ndp); 93 importer.traverse(renderer.getRootBox(), ""); 102 importer.traverse(importer.renderer.getRootBox(), ""); 94 103 95 104 return importer.imports; 96 105 } 97 106 98 public static List<Object> convert(String uri, RelationshipsPart rp, NumberingDefinitionsPart ndp) { 99 100 DocxRenderer renderer = new DocxRenderer(); 101 renderer.setDocument(uri); 102 renderer.layout(); 107 public static List<Object> convert(String uri, WordprocessingMLPackage wordMLPackage) { 108 109 Importer importer = new Importer(wordMLPackage); 110 111 importer.renderer = new DocxRenderer(); 112 importer.renderer.setDocument(uri); 113 importer.renderer.layout(); 103 114 104 Importer importer = new Importer(rp, ndp); 105 importer.traverse(renderer.getRootBox(), ""); 115 importer.traverse(importer.renderer.getRootBox(), ""); 106 116 107 117 return importer.imports; 108 118 } 109 119 110 public static List<Object> convertFromString(String content, RelationshipsPart rp, NumberingDefinitionsPart ndp) { 111 112 DocxRenderer renderer = new DocxRenderer(); 113 renderer.setDocumentFromString(content); 114 renderer.layout(); 120 public static List<Object> convertFromString(String content, WordprocessingMLPackage wordMLPackage, String baseUrl) { 121 122 Importer importer = new Importer(wordMLPackage); 123 124 importer.renderer = new DocxRenderer(); 125 importer.renderer.setDocumentFromString(content, baseUrl); 126 importer.renderer.layout(); 115 127 116 Importer importer = new Importer(rp, ndp); 117 importer.traverse(renderer.getRootBox(), ""); 128 importer.traverse(importer.renderer.getRootBox(), ""); 118 129 119 130 return importer.imports; … … 160 171 private void traverse(Box box, String indents) { 161 172 162 //log.info(box.getClass().getName() );173 log.info(box.getClass().getName() ); 163 174 if (box instanceof BlockBox) { 164 175 BlockBox blockBox = ((BlockBox)box); … … 209 220 210 221 if (e.getNodeName().equals("li")) { 211 212 213 Numbering.Num num = null; 214 try { 215 if ( cssMap.get("list-style-type" ).getCssText().equals("decimal")) { 216 num = listHelper.getOrderedList(ndp); 217 } 218 if (cssMap.get("list-style-type" ).getCssText().equals("disc")) { 219 num = listHelper.getUnorderedList(ndp); 220 } 221 222 // TODO: support other list-style-type 223 224 // TODO: generate list definitions based on CSS 225 // (and multiple list definitions) 226 227 } catch (JAXBException je) { 228 // Shouldn't happen 229 je.printStackTrace(); 230 log.error(e); 231 } 232 233 if (num==null) { 234 log.warn( "No support for list-style-type: " 235 + cssMap.get("list-style-type" ).getCssText() ); // eg decimal, disc 236 237 } else { 238 239 paraStillEmpty = false; 240 241 // Create and add <w:numPr> 242 NumPr numPr = Context.getWmlObjectFactory().createPPrBaseNumPr(); 243 currentP.getPPr().setNumPr(numPr); 244 245 // The <w:numId> element 246 NumId numIdElement = Context.getWmlObjectFactory().createPPrBaseNumPrNumId(); 247 numPr.setNumId(numIdElement); 248 numIdElement.setVal( num.getNumId() ); // point to the correct list 249 250 // The <w:ilvl> element 251 Ilvl ilvlElement = Context.getWmlObjectFactory().createPPrBaseNumPrIlvl(); 252 numPr.setIlvl(ilvlElement); 253 ilvlElement.setVal(BigInteger.valueOf(0)); 254 255 // TMP: don't let this override our numbering 256 currentP.getPPr().setInd(null); 257 } 222 addNumbering(e, cssMap); 223 } else if (e.getNodeName().equals("img")) { 224 // TODO, should we be using ReplacedElementFactory approach instead? 225 addImage(e); 258 226 } 259 227 … … 294 262 } 295 263 264 private void addImage(Element e) { 265 System.out.println("Detected an image!!! " + e.getAttribute("src")); 266 267 Docx4jUserAgent docx4jUserAgent = renderer.getDocx4jUserAgent(); 268 Docx4JFSImage docx4JFSImage = docx4jUserAgent.getDocx4JImageResource( e.getAttribute("src") ); 269 270 BinaryPartAbstractImage imagePart; 271 Inline inline = null; 272 try { 273 274 imagePart = BinaryPartAbstractImage.createImagePart( 275 wordMLPackage, 276 docx4JFSImage.getBytes()); 277 inline = imagePart.createImageInline( null, null, 0, 1, false); 278 279 } catch (Exception e1) { 280 // TODO Auto-generated catch block 281 e1.printStackTrace(); 282 } 283 284 // Now add the inline in w:p/w:r/w:drawing 285 org.docx4j.wml.R run = Context.getWmlObjectFactory().createR(); 286 currentP.getContent().add(run); 287 org.docx4j.wml.Drawing drawing = Context.getWmlObjectFactory().createDrawing(); 288 run.getContent().add(drawing); 289 drawing.getAnchorOrInline().add(inline); 290 291 paraStillEmpty = false; 292 293 } 294 295 private void addNumbering(Element e, Map<String, CSSValue> cssMap) { 296 Numbering.Num num = null; 297 try { 298 if ( cssMap.get("list-style-type" ).getCssText().equals("decimal")) { 299 num = listHelper.getOrderedList(ndp); 300 } 301 if (cssMap.get("list-style-type" ).getCssText().equals("disc")) { 302 num = listHelper.getUnorderedList(ndp); 303 } 304 305 // TODO: support other list-style-type 306 307 // TODO: generate list definitions based on CSS 308 // (and multiple list definitions) 309 310 } catch (JAXBException je) { 311 // Shouldn't happen 312 je.printStackTrace(); 313 log.error(e); 314 } 315 316 if (num==null) { 317 log.warn( "No support for list-style-type: " 318 + cssMap.get("list-style-type" ).getCssText() ); // eg decimal, disc 319 320 } else { 321 322 paraStillEmpty = false; 323 324 // Create and add <w:numPr> 325 NumPr numPr = Context.getWmlObjectFactory().createPPrBaseNumPr(); 326 currentP.getPPr().setNumPr(numPr); 327 328 // The <w:numId> element 329 NumId numIdElement = Context.getWmlObjectFactory().createPPrBaseNumPrNumId(); 330 numPr.setNumId(numIdElement); 331 numIdElement.setVal( num.getNumId() ); // point to the correct list 332 333 // The <w:ilvl> element 334 Ilvl ilvlElement = Context.getWmlObjectFactory().createPPrBaseNumPrIlvl(); 335 numPr.setIlvl(ilvlElement); 336 ilvlElement.setVal(BigInteger.valueOf(0)); 337 338 // TMP: don't let this override our numbering 339 currentP.getPPr().setInd(null); 340 } 341 } 342 296 343 private void processInlineBox( InlineBox inlineBox, String indents) { 297 344 … … 496 543 // File f = new File(System.getProperty("user.dir") + "/input.html"); 497 544 // File f = new File(System.getProperty("user.dir") + "/src/test/resources/xhtml/inheritance.html"); 498 File f = new File(System.getProperty("user.dir") + "/src/test/resources/xhtml/ extjs-cleaned-omitDepr.xhtml");545 File f = new File(System.getProperty("user.dir") + "/src/test/resources/xhtml/img.xhtml"); 499 546 500 547 WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage(); … … 505 552 506 553 wordMLPackage.getMainDocumentPart().getContent().addAll( 507 convert(f, wordMLPackage .getMainDocumentPart().getRelationshipsPart(), ndp) );554 convert(f, wordMLPackage) ); 508 555 509 556 System.out.println( -
trunk/docx4j/src/main/java/org/docx4j/model/datastorage/BindingHandler.java
r1715 r1716 282 282 } 283 283 284 List<Object> results = Importer.convertFromString(unescaped, sourcePart.getRelationshipsPart(), ndp ); 284 String baseUrl = null; 285 List<Object> results = Importer.convertFromString(unescaped, pkg, baseUrl ); 285 286 log.info("Got results: " + results.size() ); 286 287
Note: See TracChangeset
for help on using the changeset viewer.
