Changeset 1631
- Timestamp:
- 07/31/11 14:04:51 (10 months ago)
- Location:
- trunk/docx4j/src
- Files:
-
- 4 added
- 14 edited
-
main/java/org/docx4j/convert/out/AbstractConversionSettings.java (added)
-
main/java/org/docx4j/convert/out/html/AbstractHtmlExporter.java (modified) (7 diffs)
-
main/java/org/docx4j/convert/out/html/HtmlExporterNG2.java (modified) (6 diffs)
-
main/java/org/docx4j/convert/out/html/docx2xhtmlNG2.xslt (modified) (3 diffs)
-
main/java/org/docx4j/convert/out/pdf/PdfConversion.java (modified) (2 diffs)
-
main/java/org/docx4j/convert/out/pdf/viaXSLFO/Conversion.java (modified) (7 diffs)
-
main/java/org/docx4j/convert/out/pdf/viaXSLFO/PdfSettings.java (added)
-
main/java/org/docx4j/convert/out/pdf/viaXSLFO/docx2fo.xslt (modified) (3 diffs)
-
main/java/org/docx4j/model/images/AbstractWordXmlPicture.java (modified) (2 diffs)
-
main/java/org/docx4j/model/images/ConversionImageHandler.java (added)
-
main/java/org/docx4j/model/images/DefaultConversionImageHandler.java (added)
-
main/java/org/docx4j/model/images/WordXmlPictureE10.java (modified) (9 diffs)
-
main/java/org/docx4j/model/images/WordXmlPictureE20.java (modified) (9 diffs)
-
main/java/org/docx4j/samples/CreatePdf.java (modified) (2 diffs)
-
main/java/org/docx4j/utils/VFSUtils.java (modified) (3 diffs)
-
pptx4j/java/org/pptx4j/convert/out/svginhtml/PictureExporter.java (modified) (6 diffs)
-
pptx4j/java/org/pptx4j/convert/out/svginhtml/SvgExporter.java (modified) (8 diffs)
-
pptx4j/java/org/pptx4j/convert/out/svginhtml/pptx2svginhtml.xslt (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/docx4j/src/main/java/org/docx4j/convert/out/html/AbstractHtmlExporter.java
r1398 r1631 12 12 import org.apache.log4j.Logger; 13 13 import org.docx4j.UnitsOfMeasurement; 14 import org.docx4j.convert.out.AbstractConversionSettings; 14 15 import org.docx4j.convert.out.Output; 15 16 import org.docx4j.fonts.Mapper; … … 20 21 import org.docx4j.model.properties.Property; 21 22 import org.docx4j.model.properties.PropertyFactory; 22 import org.docx4j.model.properties.paragraph.Indent;23 23 import org.docx4j.model.properties.paragraph.PBorderBottom; 24 24 import org.docx4j.model.properties.paragraph.PBorderTop; … … 30 30 import org.docx4j.model.properties.table.BorderTop; 31 31 import org.docx4j.model.styles.StyleTree; 32 import org.docx4j.model.styles.StyleTree.AugmentedStyle; 32 33 import org.docx4j.model.styles.Tree; 33 import org.docx4j.model.styles.StyleTree.AugmentedStyle;34 34 import org.docx4j.openpackaging.exceptions.Docx4JException; 35 35 import org.docx4j.openpackaging.packages.OpcPackage; … … 40 40 import org.docx4j.wml.CTTblStylePr; 41 41 import org.docx4j.wml.PPr; 42 import org.docx4j.wml.PPrBase.Ind; 42 43 import org.docx4j.wml.RPr; 43 44 import org.docx4j.wml.STBorder; … … 47 48 import org.docx4j.wml.TcPr; 48 49 import org.docx4j.wml.TrPr; 49 import org.docx4j.wml.PPrBase.Ind;50 50 import org.w3c.dom.Document; 51 51 import org.w3c.dom.DocumentFragment; … … 281 281 // } 282 282 283 public static class HtmlSettings { 284 285 private Map<String, Object> settings; 283 public static class HtmlSettings extends AbstractConversionSettings { 284 285 public static final String CONDITIONAL_COMMENTS = "conditionalComments"; 286 public static final String FONT_FAMILY_STACK = "fontFamilyStack"; 287 public static final String USER_CSS = "userCSS"; 288 public static final String USER_SCRIPT = "userScript"; 289 public static final String USER_BODY_TOP = "userBodyTop"; 290 public static final String USER_BODY_TAIL = "userBodyTail"; 286 291 287 292 public HtmlSettings() { 288 settings = new java.util.HashMap<String, Object>(); 289 settings.put("conditionalComments", Boolean.FALSE); 290 settings.put("fontFamilyStack", Boolean.FALSE); 291 settings.put("imageDirPath", ""); 292 293 settings.put("userCSS", ""); 294 settings.put("userScript", ""); 295 settings.put("userBodyTop", "<!-- userBodyTop goes here -->"); 296 settings.put("userBodyTail", "<!-- userBodyTail goes here -->"); 297 298 } 299 300 public Map<String, Object> getSettings() { 301 return settings; 302 } 303 304 public void setWmlPackage(OpcPackage wmlPackage) { 305 settings.put("wmlPackage", wmlPackage); 306 } 307 public OpcPackage getWmlPackage() { 308 return (OpcPackage)settings.get("wmlPackage"); 293 settings.put(CONDITIONAL_COMMENTS, Boolean.FALSE); 294 settings.put(FONT_FAMILY_STACK, Boolean.FALSE); 295 296 settings.put(USER_CSS, ""); 297 settings.put(USER_SCRIPT, ""); 298 settings.put(USER_BODY_TOP, "<!-- userBodyTop goes here -->"); 299 settings.put(USER_BODY_TAIL, "<!-- userBodyTail goes here -->"); 300 309 301 } 310 302 … … 322 314 public Mapper getFontMapper() { 323 315 return (Mapper)settings.get("fontMapper"); 324 }325 326 // If this is set to something, images in327 // internal binary parts will be saved to this directory;328 // otherwise they won't329 public void setImageDirPath(String imageDirPath) {330 settings.put("imageDirPath", imageDirPath);331 }332 public String getImageDirPath() {333 return (String)settings.get("imageDirPath");334 316 } 335 317 -
trunk/docx4j/src/main/java/org/docx4j/convert/out/html/HtmlExporterNG2.java
r1450 r1631 40 40 import org.docx4j.model.TransformState; 41 41 import org.docx4j.model.SymbolModel.SymbolModelTransformState; 42 import org.docx4j.model.images.DefaultConversionImageHandler; 42 43 import org.docx4j.model.styles.StyleTree; 43 44 import org.docx4j.model.styles.Tree; … … 168 169 * 169 170 * */ 171 @Override 170 172 @Deprecated 171 173 public void html(WordprocessingMLPackage wmlPackage, javax.xml.transform.Result result, … … 175 177 } 176 178 179 @Override 177 180 @Deprecated 178 181 public void html(WordprocessingMLPackage wmlPackage, javax.xml.transform.Result result, boolean fontFamilyStack, … … 197 200 * 198 201 * */ 202 @Override 199 203 public void html(WordprocessingMLPackage wmlPackage, 200 204 javax.xml.transform.Result result, HtmlSettings htmlSettings) … … 221 225 } 222 226 227 // Ensure that the imageHandler is set up 228 boolean privateImageHandler = false; 229 if (htmlSettings.getImageHandler() == null) { 230 htmlSettings.setImageHandler(htmlSettings.getImageDirPath() != null ? 231 new DefaultConversionImageHandler(htmlSettings.getImageDirPath()) : 232 new DefaultConversionImageHandler()); 233 privateImageHandler = true; 234 } 235 223 236 if (htmlSettings.getFontMapper() == null) { 224 237 htmlSettings.setFontMapper(wmlPackage.getFontMapper()); … … 259 272 result); 260 273 274 if (privateImageHandler) { 275 //remove a locally created imageHandler in case the HtmlSettings get reused 276 htmlSettings.getSettings().remove(HtmlSettings.IMAGE_HANDLER); 277 } 261 278 log.info("wordDocument transformed to xhtml .."); 262 279 -
trunk/docx4j/src/main/java/org/docx4j/convert/out/html/docx2xhtmlNG2.xslt
r1555 r1631 32 32 <xsl:param name="wmlPackage"/> <!-- select="'passed in'"--> 33 33 <xsl:param name="modelStates"/> <!-- select="'passed in'"--> 34 <xsl:param name="image DirPath"/>34 <xsl:param name="imageHandler"/> 35 35 36 36 <!-- Used in extension function for mapping fonts --> … … 345 345 <xsl:copy-of select="java:org.docx4j.model.images.WordXmlPictureE20.createHtmlImgE20( 346 346 $wmlPackage, 347 string($imageDirPath),347 $imageHandler, 348 348 $wpinline)" /> 349 349 </xsl:when> … … 367 367 <xsl:copy-of select="java:org.docx4j.model.images.WordXmlPictureE10.createHtmlImgE10( 368 368 $wmlPackage, 369 string($imageDirPath),369 $imageHandler, 370 370 $wpict)" /> 371 371 </xsl:when> -
trunk/docx4j/src/main/java/org/docx4j/convert/out/pdf/PdfConversion.java
r1168 r1631 1 1 package org.docx4j.convert.out.pdf; 2 2 3 import java.io.File;4 3 import java.io.OutputStream; 5 4 6 5 import org.apache.log4j.Logger; 6 import org.docx4j.convert.out.pdf.viaXSLFO.PdfSettings; 7 7 import org.docx4j.openpackaging.exceptions.Docx4JException; 8 8 import org.docx4j.openpackaging.packages.WordprocessingMLPackage; … … 25 25 */ 26 26 public abstract class PdfConversion { 27 27 28 28 // can't implement Output interface, because PDF output isn't XML 29 29 // so instead, have something similar: 30 public abstract void output(OutputStream os ) throws Docx4JException;30 public abstract void output(OutputStream os, PdfSettings settings) throws Docx4JException; 31 31 32 32 protected static Logger log = Logger.getLogger(PdfConversion.class); -
trunk/docx4j/src/main/java/org/docx4j/convert/out/pdf/viaXSLFO/Conversion.java
r1572 r1631 43 43 import org.docx4j.jaxb.Context; 44 44 import org.docx4j.model.PropertyResolver; 45 import org.docx4j.model.SymbolModel.SymbolModelTransformState; 45 46 import org.docx4j.model.TransformState; 46 import org.docx4j.model. SymbolModel.SymbolModelTransformState;47 import org.docx4j.model.images.DefaultConversionImageHandler; 47 48 import org.docx4j.model.listnumbering.Emulator.ResultTriple; 48 49 import org.docx4j.model.properties.Property; … … 61 62 import org.docx4j.openpackaging.packages.WordprocessingMLPackage; 62 63 import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart; 63 import org.docx4j.wml.Body;64 64 import org.docx4j.wml.CTPageNumber; 65 65 import org.docx4j.wml.CTSimpleField; 66 66 import org.docx4j.wml.NumberFormat; 67 67 import org.docx4j.wml.PPr; 68 import org.docx4j.wml.PPrBase.NumPr.Ilvl; 68 69 import org.docx4j.wml.RPr; 69 70 import org.docx4j.wml.Style; 70 71 import org.docx4j.wml.TcPr; 71 import org.docx4j.wml.PPrBase.NumPr.Ilvl;72 72 import org.w3c.dom.Document; 73 73 import org.w3c.dom.DocumentFragment; … … 221 221 * @param os 222 222 * The OutputStream to write the pdf to 223 * @param settings 224 * The configuration for the conversion 223 225 * 224 226 * */ 225 public void output(OutputStream os) throws Docx4JException { 227 @Override 228 public void output(OutputStream os, PdfSettings settings) throws Docx4JException { 226 229 227 230 // See http://xmlgraphics.apache.org/fop/0.95/embedding.html … … 294 297 Context.jcSectionModel); 295 298 296 java.util.HashMap<String, Object> settings = new java.util.HashMap<String, Object>(); 297 settings.put("wmlPackage", wordMLPackage); 298 String imageDirPath = System.getProperty("java.io.tmpdir"); 299 settings.put("imageDirPath", imageDirPath); 299 if (settings == null) { 300 settings = new PdfSettings(); 301 } 302 settings.setWmlPackage(wordMLPackage); 303 boolean privateImageHandler = false; 304 if (settings.getImageHandler() == null) { 305 settings.setImageHandler(settings.getImageDirPath() != null ? 306 new DefaultConversionImageHandler(settings.getImageDirPath()) : 307 new DefaultConversionImageHandler()); 308 privateImageHandler = true; 309 } 310 300 311 301 312 // Resulting SAX events (the generated FO) must be piped through to … … 309 320 // per converter. 310 321 HashMap<String, TransformState> modelStates = new HashMap<String, TransformState>(); 311 settings. put("modelStates", modelStates);322 settings.getSettings().put("modelStates", modelStates); 312 323 313 324 // Converter c = new Converter(); … … 335 346 Result intermediateResult = new StreamResult(intermediate); 336 347 337 XmlUtils.transform(domDoc, xslt, settings , intermediateResult);348 XmlUtils.transform(domDoc, xslt, settings.getSettings(), intermediateResult); 338 349 339 350 String fo = intermediate.toString("UTF-8"); … … 351 362 } else { 352 363 353 XmlUtils.transform(domDoc, xslt, settings, result); 364 XmlUtils.transform(domDoc, xslt, settings.getSettings(), result); 365 } 366 367 if (privateImageHandler) { 368 //remove a locally created imageHandler in case the HtmlSettings get reused 369 settings.getSettings().remove(PdfSettings.IMAGE_HANDLER); 354 370 } 355 371 -
trunk/docx4j/src/main/java/org/docx4j/convert/out/pdf/viaXSLFO/docx2fo.xslt
r1368 r1631 63 63 <xsl:param name="wmlPackage"/> <!-- select="'passed in'"--> 64 64 <xsl:param name="modelStates"/> <!-- select="'passed in'"--> 65 <xsl:param name="image DirPath"/>65 <xsl:param name="imageHandler"/> 66 66 67 67 <!-- Used in extension function for mapping fonts --> … … 487 487 488 488 <xsl:copy-of select="java:org.docx4j.model.images.WordXmlPictureE20.createXslFoImgE20( 489 $wmlPackage, string($imageDirPath),489 $wmlPackage, $imageHandler, 490 490 $wpinline, $modelStates)" /> 491 491 </xsl:when> … … 509 509 510 510 <xsl:copy-of select="java:org.docx4j.model.images.WordXmlPictureE10.createXslFoImgE10( 511 $wmlPackage, string($imageDirPath),511 $wmlPackage, $imageHandler, 512 512 $wpict, $modelStates)" /> 513 513 </xsl:when> -
trunk/docx4j/src/main/java/org/docx4j/model/images/AbstractWordXmlPicture.java
r1625 r1631 1 1 package org.docx4j.model.images; 2 3 import java.io.IOException;4 import java.io.OutputStream;5 import java.util.concurrent.locks.ReadWriteLock;6 import java.util.concurrent.locks.ReentrantReadWriteLock;7 2 8 3 import javax.xml.parsers.DocumentBuilderFactory; 9 4 import javax.xml.parsers.ParserConfigurationException; 10 5 11 import org.apache.commons.codec.binary.Base64;12 import org.apache.commons.vfs.CacheStrategy;13 import org.apache.commons.vfs.FileObject;14 import org.apache.commons.vfs.FileSystemException;15 import org.apache.commons.vfs.FileSystemManager;16 import org.apache.commons.vfs.impl.StandardFileSystemManager;17 6 import org.apache.log4j.Logger; 18 7 import org.docx4j.openpackaging.packages.WordprocessingMLPackage; 19 8 import org.docx4j.openpackaging.parts.Part; 20 9 import org.docx4j.openpackaging.parts.WordprocessingML.BinaryPart; 21 import org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage;22 10 import org.docx4j.openpackaging.parts.WordprocessingML.MetafileEmfPart; 23 import org.docx4j.openpackaging.parts.WordprocessingML.MetafilePart;24 11 import org.docx4j.openpackaging.parts.WordprocessingML.MetafileWmfPart; 25 12 import org.docx4j.openpackaging.parts.WordprocessingML.MetafileWmfPart.SvgDocument; … … 263 250 } 264 251 252 protected void handleImageRel(ConversionImageHandler imageHandler, String imgRelId, Part sourcePart) { 253 Relationship rel = sourcePart.getRelationshipsPart().getRelationshipByID(imgRelId); 254 Part part = null; 255 String uri = null; 256 boolean ignoreImage = false; 257 setID(imgRelId); 258 259 if (rel.getTargetMode() == null || rel.getTargetMode().equals("Internal")) { 260 part = sourcePart.getRelationshipsPart().getPart(rel); 261 if (!(part instanceof BinaryPart)) { 262 log.error("Invalid part type id: " + imgRelId + ", class = " + part.getClass().getName()); 263 ignoreImage = true; 264 } 265 } 266 if (!ignoreImage) { 267 uri = handlePart(imageHandler, this, rel, (BinaryPart)part); 268 if (uri != null) { 269 this.setSrc(uri); 270 } 271 } 272 } 265 273 266 274 /** 267 * @param image DirPath275 * @param imageHandler 268 276 * @param picture 277 * @param relationship 269 278 * @param part 270 279 * @return uri for the image we've saved, or null 271 280 */ 272 protected static String handlePart(String imageDirPath, AbstractWordXmlPicture picture, 273 Part part) { 274 try { 275 276 if (imageDirPath.equals("")) { 277 278 // TODO: this isn't going to work for XSL FO! 279 // So for XSL FO, you always need an imageDirPath! 280 281 // <img 282 // src="data:image/gif;base64,R0lGODlhEAAOALMAAOazToeHh0tLS/7LZv/0jvb29t/f3//Ub/ 283 // 284 // which is nice, except it doesn't work in IE7, 285 // and is limited to 32KB in IE8! 286 287 java.nio.ByteBuffer bb = ((BinaryPart) part) 288 .getBuffer(); 289 bb.clear(); 290 byte[] bytes = new byte[bb.capacity()]; 291 bb.get(bytes, 0, bytes.length); 292 293 byte[] encoded = Base64.encodeBase64(bytes, true); 294 295 picture 296 .setSrc("data:" + part.getContentType() 297 + ";base64," 298 + (new String(encoded, "UTF-8"))); 299 300 return null; 301 302 } else { 303 // Need to save the image 304 305 // To create directory: 306 FileObject folder = getFileSystemManager() 307 .resolveFile(imageDirPath); 308 if (!folder.exists()) { 309 folder.createFolder(); 310 } 311 312 // Construct a file name from the part name 313 String partname = part.getPartName().toString(); 314 String filename = partname.substring(partname 315 .lastIndexOf("/") + 1); 316 317 // Don't want multiple threads using the same file 318 if (Thread.currentThread().getName()!=null) { 319 filename = Thread.currentThread().getName() + filename; 320 } 321 322 323 log.debug("image file name: " + filename); 324 325 FileObject fo = folder.resolveFile(filename); 326 if (fo.exists()) { 327 328 log.warn("Overwriting (!) existing file!"); 329 330 } else { 331 fo.createFile(); 332 } 333 // System.out.println("URL: " + 334 // fo.getURL().toExternalForm() ); 335 // System.out.println("String: " + fo.toString() ); 336 337 // Save the file 338 OutputStream out = fo.getContent() 339 .getOutputStream(); 340 // instance of org.apache.commons.vfs.provider.DefaultFileContent$FileContentOutputStream 341 // which extends MonitorOutputStream 342 // which in turn extends BufferedOutputStream 343 // which in turn extends FilterOutputStream. 344 345 String src; 346 try { 347 java.nio.ByteBuffer bb = ((BinaryPart) part) 348 .getBuffer(); 349 bb.clear(); 350 byte[] bytes = new byte[bb.capacity()]; 351 bb.get(bytes, 0, bytes.length); 352 353 out.write(bytes); 354 355 // Set the attribute 356 src = fixImgSrcURL(fo); 357 picture.setSrc(src); 358 log.info("Wrote @src='" + src); 359 return src; 360 } finally { 361 try { 362 fo.close(); 363 // That Closes this file, and its content. 364 // Closing the content in turn 365 // closes any open stream. 366 // out.flush() is unnecessary, since 367 // FilterOutputStream's close() does do flush() first. 368 } catch (IOException ioe) { 369 ioe.printStackTrace(); 370 } 371 } 372 373 } 374 375 } catch (Exception e) { 376 e.printStackTrace(); 377 log.error(e); 378 } 379 return null; 380 } 381 382 private static FileSystemManager fileSystemManager; 383 private static ReadWriteLock aLock = new ReentrantReadWriteLock(true); 384 385 public static FileSystemManager getFileSystemManager() { 386 aLock.readLock().lock(); 387 388 try { 389 if (fileSystemManager == null) { 390 try { 391 StandardFileSystemManager fm = new StandardFileSystemManager(); 392 fm.setCacheStrategy(CacheStrategy.MANUAL); 393 fm.init(); 394 fileSystemManager = fm; 395 } catch (Exception exc) { 396 throw new RuntimeException(exc); 397 } 398 } 399 400 return fileSystemManager; 401 } 402 finally 403 { 404 aLock.readLock().unlock(); 405 } 406 } 407 408 /** 409 * imageDirPath is anything VFSJFileChooser can resolve into a FileObject. 410 * That's enough for saving the image. In order for a web browser to 411 * display it, the URI Scheme has to be something a web browser can 412 * understand. So at that point, webdav:// will have to become http://, 413 * and smb:// become file:// ... 414 */ 415 static String fixImgSrcURL( FileObject fo) 416 { 417 String itemUrl = null; 418 try { 419 itemUrl = fo.getURL().toExternalForm(); 420 log.debug(itemUrl); 421 422 String itemUrlLower = itemUrl.toLowerCase(); 423 if (itemUrlLower.startsWith("http://") 424 || itemUrlLower.startsWith("https://")) { 425 return itemUrl; 426 } else if (itemUrlLower.startsWith("file://")) { 427 // we'll convert file protocol to relative reference 428 // if this is html output 429 430 if (fo.getParent() == null) { 431 return itemUrl; 432 } else if (fo.getParent().getURL().toExternalForm().equalsIgnoreCase( 433 getFileSystemManager().resolveFile(System.getProperty("java.io.tmpdir")).getURL().toExternalForm() )) { 434 435 // The image is being stored in the system temp directory, 436 // so assume this is a pdf export, and preserve the absolute 437 // file path 438 439 // org.apache.commons.vfs.provider.local.LocalFile has a 440 // method doIsSameFile, but the point of using FileObject is 441 // that it won't necessarily be a local file. 442 443 return itemUrl; 444 } else { 445 // Otherwise, assume it is an html export and return a relative path 446 return fo.getParent().getName().getBaseName() 447 + "/" + fo.getName().getBaseName(); 448 } 449 450 } else if (itemUrlLower.startsWith("webdav://")) { 451 // TODO - convert to http:, dropping username / password 452 return itemUrl; 453 } 454 log.warn("How to handle scheme: " + itemUrl ); 455 } catch (FileSystemException e) { 456 log.error("Problem fixing Img Src URL", e); 457 } 458 return itemUrl; 459 } 460 461 281 protected String handlePart(ConversionImageHandler imageHandler, AbstractWordXmlPicture picture, Relationship relationship, BinaryPart binaryPart) { 282 return imageHandler.handleImage(picture, relationship, binaryPart); 283 } 462 284 463 285 // void setAttribute(Node imageElement, String name, String value) { -
trunk/docx4j/src/main/java/org/docx4j/model/images/WordXmlPictureE10.java
r1463 r1631 22 22 import java.util.HashMap; 23 23 24 import javax.xml.namespace.QName; 24 import javax.xml.bind.JAXBElement; 25 import javax.xml.bind.JAXBException; 25 26 import javax.xml.parsers.DocumentBuilderFactory; 26 27 import javax.xml.parsers.ParserConfigurationException; … … 33 34 import org.docx4j.openpackaging.packages.WordprocessingMLPackage; 34 35 import org.docx4j.openpackaging.parts.Part; 35 import org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage;36 import org.docx4j.relationships.Relationship;37 36 import org.docx4j.vml.CTImageData; 38 37 import org.docx4j.vml.CTShape; 39 import org.docx4j.vml.CTShapetype;40 38 import org.docx4j.wml.Pict; 41 39 import org.w3c.dom.Document; … … 43 41 import org.w3c.dom.Node; 44 42 import org.w3c.dom.traversal.NodeIterator; 45 46 import javax.xml.bind.JAXBElement;47 import javax.xml.bind.JAXBException;48 import javax.xml.bind.Unmarshaller;49 43 50 44 /** … … 164 158 private static WordXmlPictureE10 createWordXmlPictureFromE10( 165 159 WordprocessingMLPackage wmlPackage, 166 String imageDirPath,160 ConversionImageHandler imageHandler, 167 161 NodeIterator wpict, 168 162 Part sourcePart) { … … 193 187 if (imgRelId!=null && !imgRelId.equals("")) { 194 188 log.debug("Handling " + imgRelId); 195 converter.handleImageRel(im gRelId, imageDirPath, sourcePart);189 converter.handleImageRel(imageHandler, imgRelId, sourcePart); 196 190 } else { 197 191 log.error("No relId?!"); … … 213 207 public static DocumentFragment createHtmlImgE10( 214 208 WordprocessingMLPackage wmlPackage, 215 String imageDirPath,209 ConversionImageHandler imageHandler, 216 210 NodeIterator wpict) { 217 211 218 212 219 213 WordXmlPictureE10 converter = createWordXmlPictureFromE10( wmlPackage, 220 image DirPath,214 imageHandler, 221 215 wpict, wmlPackage.getMainDocumentPart()); 222 216 … … 236 230 public static DocumentFragment createXslFoImgE10( 237 231 WordprocessingMLPackage wmlPackage, 238 String imageDirPath,232 ConversionImageHandler imageHandler, 239 233 NodeIterator wpict, 240 234 HashMap<String, TransformState> modelStates) { … … 244 238 245 239 WordXmlPictureE10 converter = createWordXmlPictureFromE10( wmlPackage, 246 image DirPath,240 imageHandler, 247 241 wpict, sourcePart); 248 242 249 log.debug("imageDirPath: " + imageDirPath);243 //log.debug("imageDirPath: " + imageDirPath); 250 244 251 245 if (converter==null) { … … 297 291 // this.data = value; 298 292 // } 299 300 301 302 303 private void handleImageRel(String imgRelId, String imageDirPath, Part sourcePart) {304 305 setID(imgRelId);306 307 //Relationship rel = wmlPackage.getMainDocumentPart().getRelationshipsPart().getRelationshipByID(imgRelId);308 Relationship rel = sourcePart.getRelationshipsPart().getRelationshipByID(imgRelId);309 310 // if the relationship isn't found, produce a warning311 //if (String.IsNullOrEmpty(picture.Src))312 //{313 // this.embeddedPicturesDropped++;314 //}315 316 if (rel.getTargetMode() == null317 || rel.getTargetMode().equals("Internal") ) {318 319 // BinaryPartAbstractImage part = (BinaryPartAbstractImage)wmlPackage.getMainDocumentPart()320 // .getRelationshipsPart().getPart(rel);321 BinaryPartAbstractImage part = (BinaryPartAbstractImage)sourcePart322 .getRelationshipsPart().getPart(rel);323 String uri = handlePart(imageDirPath, this, part);324 325 // Scale it? Shouldn't be necessary, since Word should326 // be providing the height/width327 // try {328 // ImageInfo imageInfo = BinaryPartAbstractImage.getImageInfo(uri);329 //330 // List<SectionWrapper> sections = wmlPackage.getDocumentModel().getSections();331 // PageDimensions page = sections.get(sections.size()-1).getPageDimensions();332 //333 // picture.ensureFitsPage(imageInfo, page );334 // } catch (Exception e) {335 // e.printStackTrace();336 // }337 338 339 } else {340 this.setSrc( rel.getTarget() );341 }342 343 }344 293 345 294 -
trunk/docx4j/src/main/java/org/docx4j/model/images/WordXmlPictureE20.java
r1131 r1631 21 21 22 22 import java.util.HashMap; 23 24 import javax.xml.bind.JAXBElement; 25 import javax.xml.bind.JAXBException; 26 import javax.xml.bind.Unmarshaller; 23 27 24 28 import org.apache.log4j.Logger; … … 33 37 import org.docx4j.jaxb.Context; 34 38 import org.docx4j.model.TransformState; 35 import org.docx4j.model.images.AbstractWordXmlPicture.Dimensions;36 39 import org.docx4j.openpackaging.packages.WordprocessingMLPackage; 37 40 import org.docx4j.openpackaging.parts.Part; 38 import org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage;39 41 import org.docx4j.relationships.Relationship; 40 42 import org.w3c.dom.Document; … … 42 44 import org.w3c.dom.Node; 43 45 import org.w3c.dom.traversal.NodeIterator; 44 45 import javax.xml.bind.JAXBElement;46 import javax.xml.bind.JAXBException;47 import javax.xml.bind.Unmarshaller;48 46 49 47 /** … … 227 225 */ 228 226 public static WordXmlPictureE20 createWordXmlPictureFromE20(WordprocessingMLPackage wmlPackage, 229 String imageDirPath,227 ConversionImageHandler imageHandler, 230 228 NodeIterator anchorOrInline, 231 229 Part sourcePart) { … … 254 252 String imgRelId = blip.getEmbed(); 255 253 if (imgRelId!=null) { 256 converter.handleImageRel(im gRelId, imageDirPath, sourcePart);254 converter.handleImageRel(imageHandler, imgRelId, sourcePart); 257 255 } else if (blip.getLink()!=null) { 258 converter.handleImageRel( blip.getLink(), imageDirPath, sourcePart);256 converter.handleImageRel(imageHandler, blip.getLink(), sourcePart); 259 257 } else { 260 258 log.error("not linked or embedded?!"); … … 305 303 */ 306 304 public static DocumentFragment createHtmlImgE20(WordprocessingMLPackage wmlPackage, 307 String imageDirPath,305 ConversionImageHandler imageHandler, 308 306 NodeIterator wpInline) { 309 307 310 308 WordXmlPictureE20 converter = createWordXmlPictureFromE20( wmlPackage, 311 image DirPath, wpInline, wmlPackage.getMainDocumentPart() );309 imageHandler, wpInline, wmlPackage.getMainDocumentPart() ); 312 310 313 311 return getHtmlDocumentFragment(converter); … … 327 325 */ 328 326 public static DocumentFragment createXslFoImgE20(WordprocessingMLPackage wmlPackage, 329 String imageDirPath,327 ConversionImageHandler imageHandler, 330 328 NodeIterator wpInline, 331 329 HashMap<String, TransformState> modelStates) { … … 334 332 335 333 WordXmlPictureE20 converter = createWordXmlPictureFromE20( wmlPackage, 336 image DirPath, wpInline, sourcePart);334 imageHandler, wpInline, sourcePart); 337 335 338 336 Document d = converter.createXslFoImageElement(); … … 425 423 } 426 424 427 428 private void handleImageRel(String imgRelId, String imageDirPath, Part sourcePart) {429 430 setID(imgRelId);431 //Relationship rel = wmlPackage.getMainDocumentPart().getRelationshipsPart().getRelationshipByID(imgRelId);432 Relationship rel = sourcePart.getRelationshipsPart().getRelationshipByID(imgRelId);433 434 if (rel.getTargetMode() == null435 || rel.getTargetMode().equals("Internal")) {436 437 // Part p = (BinaryPartAbstractImage)wmlPackage.getMainDocumentPart()438 // .getRelationshipsPart().getPart(rel);439 Part p = (BinaryPartAbstractImage)sourcePart440 .getRelationshipsPart().getPart(rel);441 442 BinaryPartAbstractImage part = null;443 if (p instanceof BinaryPartAbstractImage) {444 // part= (BinaryPartAbstractImage)wmlPackage.getMainDocumentPart()445 // .getRelationshipsPart().getPart(rel);446 part= (BinaryPartAbstractImage)sourcePart447 .getRelationshipsPart().getPart(rel);448 } else {449 // Could be a MetafileEmfPart or WMF450 log.error("TODO: Add support for " + p.getClass().getName() );451 // TODO452 }453 String uri = handlePart(imageDirPath, this, part);454 // Scale it? Shouldn't be necessary, since Word should455 // be providing the height/width456 // try {457 // ImageInfo imageInfo = BinaryPartAbstractImage.getImageInfo(uri);458 //459 // List<SectionWrapper> sections = wmlPackage.getDocumentModel().getSections();460 // PageDimensions page = sections.get(sections.size()-1).getPageDimensions();461 //462 // picture.ensureFitsPage(imageInfo, page );463 // } catch (Exception e) {464 // e.printStackTrace();465 // }466 467 } else { // External468 this.setSrc(rel.getTarget());469 }470 }471 472 425 473 426 // private byte[] data; -
trunk/docx4j/src/main/java/org/docx4j/samples/CreatePdf.java
r1237 r1631 29 29 30 30 import org.docx4j.XmlUtils; 31 import org.docx4j.convert.out.pdf.viaXSLFO.PdfSettings; 31 32 import org.docx4j.fonts.IdentityPlusMapper; 32 33 import org.docx4j.fonts.Mapper; … … 92 93 new java.io.File(inputfilepath + ".fo")); 93 94 OutputStream os = new java.io.FileOutputStream(inputfilepath + ".pdf"); 94 c.output(os );95 c.output(os, new PdfSettings() ); 95 96 System.out.println("Saved " + inputfilepath + ".pdf"); 96 97 } -
trunk/docx4j/src/main/java/org/docx4j/utils/VFSUtils.java
r305 r1631 21 21 package org.docx4j.utils; 22 22 23 import java.util.concurrent.locks.ReadWriteLock; 24 import java.util.concurrent.locks.ReentrantReadWriteLock; 25 26 import org.apache.commons.vfs.CacheStrategy; 23 27 import org.apache.commons.vfs.FileSystemException; 28 import org.apache.commons.vfs.FileSystemManager; 29 import org.apache.commons.vfs.impl.StandardFileSystemManager; 24 30 import org.apache.commons.vfs.provider.UriParser; 25 31 … … 28 34 */ 29 35 public class VFSUtils { 36 private static FileSystemManager fileSystemManager; 37 private static ReadWriteLock aLock = new ReentrantReadWriteLock(true); 30 38 31 39 /** … … 66 74 } 67 75 76 public static FileSystemManager getFileSystemManager() { 77 aLock.readLock().lock(); 78 79 try { 80 if (fileSystemManager == null) { 81 try { 82 StandardFileSystemManager fm = new StandardFileSystemManager(); 83 fm.setCacheStrategy(CacheStrategy.MANUAL); 84 fm.init(); 85 fileSystemManager = fm; 86 } catch (Exception exc) { 87 throw new RuntimeException(exc); 88 } 89 } 90 91 return fileSystemManager; 92 } 93 finally 94 { 95 aLock.readLock().unlock(); 96 } 97 } 98 68 99 } // VFSUtils class 69 100 -
trunk/docx4j/src/pptx4j/java/org/pptx4j/convert/out/svginhtml/PictureExporter.java
r1179 r1631 1 1 package org.pptx4j.convert.out.svginhtml; 2 2 3 import javax.xml.bind.JAXBElement;4 3 import javax.xml.bind.JAXBException; 5 import javax.xml.bind.Unmarshaller;6 4 7 5 import org.apache.log4j.Logger; … … 10 8 import org.docx4j.dml.CTPoint2D; 11 9 import org.docx4j.dml.CTPositiveSize2D; 12 import org.docx4j.dml.CTTransform2D;13 import org.docx4j.dml.picture.Pic;14 import org.docx4j.dml.wordprocessingDrawing.Anchor;15 import org.docx4j.dml.wordprocessingDrawing.Inline;16 import org.docx4j.jaxb.Context;17 10 import org.docx4j.model.images.AbstractWordXmlPicture; 18 import org.docx4j.model.images.WordXmlPictureE20; 19 import org.docx4j.model.images.AbstractWordXmlPicture.Dimensions; 11 import org.docx4j.model.images.ConversionImageHandler; 20 12 import org.docx4j.openpackaging.packages.PresentationMLPackage; 21 import org.docx4j.openpackaging.packages.WordprocessingMLPackage;22 13 import org.docx4j.openpackaging.parts.Part; 23 import org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage;24 import org.docx4j.relationships.Relationship;25 import org.pptx4j.Box;26 14 import org.pptx4j.model.ResolvedLayout; 27 15 import org.w3c.dom.DocumentFragment; … … 75 63 PresentationMLPackage pmlPackage, 76 64 ResolvedLayout rl, 77 String imageDirPath,65 ConversionImageHandler imageHandler, 78 66 NodeIterator wpInline) { 79 67 80 68 PictureExporter converter = createPicture( pmlPackage, 81 image DirPath, wpInline, rl );69 imageHandler, wpInline, rl ); 82 70 83 71 DocumentFragment df = getHtmlDocumentFragment(converter); … … 132 120 133 121 public static PictureExporter createPicture(PresentationMLPackage pmlPackage, 134 String imageDirPath,122 ConversionImageHandler imageHandler, 135 123 NodeIterator anchorOrInline, 136 124 ResolvedLayout rl) { … … 160 148 String imgRelId = blip.getEmbed(); 161 149 if (imgRelId!=null) { 162 converter.handleImageRel(im gRelId, imageDirPath, (Part)rl.relationships.getSourceP());150 converter.handleImageRel(imageHandler, imgRelId, (Part)rl.relationships.getSourceP()); 163 151 } else if (blip.getLink()!=null) { 164 converter.handleImageRel( blip.getLink(), imageDirPath, (Part)rl.relationships.getSourceP());152 converter.handleImageRel(imageHandler, blip.getLink(), (Part)rl.relationships.getSourceP()); 165 153 } else { 166 154 log.error("not linked or embedded?!"); … … 172 160 173 161 return converter; 174 }175 176 private void handleImageRel(String imgRelId, String imageDirPath, Part sourcePart) {177 178 setID(imgRelId);179 Relationship rel = sourcePart.getRelationshipsPart().getRelationshipByID(imgRelId);180 181 if (rel.getTargetMode() == null182 || rel.getTargetMode().equals("Internal")) {183 184 Part p = (BinaryPartAbstractImage)sourcePart185 .getRelationshipsPart().getPart(rel);186 187 BinaryPartAbstractImage part = null;188 if (p instanceof BinaryPartAbstractImage) {189 part= (BinaryPartAbstractImage)sourcePart190 .getRelationshipsPart().getPart(rel);191 } else {192 // Could be a MetafileEmfPart or WMF193 log.error("TODO: Add support for " + p.getClass().getName() );194 // TODO195 }196 String uri = handlePart(imageDirPath, this, part);197 // Scale it? Shouldn't be necessary, since Word should198 // be providing the height/width199 200 } else { // External201 this.setSrc(rel.getTarget());202 }203 162 } 204 163 -
trunk/docx4j/src/pptx4j/java/org/pptx4j/convert/out/svginhtml/SvgExporter.java
r1374 r1631 17 17 import org.apache.log4j.Logger; 18 18 import org.docx4j.XmlUtils; 19 import org.docx4j.convert.out.AbstractConversionSettings; 19 20 import org.docx4j.convert.out.html.AbstractHtmlExporter; 20 21 import org.docx4j.convert.out.html.AbstractHtmlExporter.HtmlSettings; … … 22 23 import org.docx4j.dml.CTTextParagraphProperties; 23 24 import org.docx4j.dml.CTTransform2D; 25 import org.docx4j.model.images.DefaultConversionImageHandler; 24 26 import org.docx4j.model.styles.StyleTree; 25 27 import org.docx4j.model.styles.Tree; … … 53 55 public class SvgExporter { 54 56 57 public static class SvgSettings extends AbstractConversionSettings { 58 59 } 60 55 61 // NB: file suffix must end with .xhtml in order to see the SVG in a browser 56 62 … … 90 96 public static String svg(PresentationMLPackage presentationMLPackage, 91 97 SlidePart slide) throws Exception { 98 return svg(presentationMLPackage, slide, null); 99 } 100 101 /** 102 * Create an HTML (with SVG) page representing the slide. 103 * @param presentationMLPackage 104 * @param slide 105 * @param settings 106 * @return 107 * @throws Exception 108 */ 109 public static String svg(PresentationMLPackage presentationMLPackage, 110 SlidePart slide, SvgSettings settings) throws Exception { 92 111 93 112 ResolvedLayout rl = ((SlidePart)slide).getResolvedLayout(); … … 96 115 // "http://schemas.openxmlformats.org/presentationml/2006/main", "spTree", GroupShape.class) ); 97 116 98 return SvgExporter.svg(presentationMLPackage, rl );117 return SvgExporter.svg(presentationMLPackage, rl, settings); 99 118 } 100 119 … … 106 125 */ 107 126 private static String svg(PresentationMLPackage presentationMLPackage, 108 ResolvedLayout layout ) throws Exception {127 ResolvedLayout layout, SvgSettings settings) throws Exception { 109 128 110 129 ByteArrayOutputStream intermediate = new ByteArrayOutputStream(); 111 130 Result intermediateResult = new StreamResult( intermediate ); 112 131 113 svg(presentationMLPackage, layout, intermediateResult );132 svg(presentationMLPackage, layout, intermediateResult, settings); 114 133 115 134 return intermediate.toString("UTF-8"); … … 119 138 120 139 private static void svg(PresentationMLPackage presentationMLPackage, 121 ResolvedLayout layout, javax.xml.transform.Result result 122 ) throws Exception {140 ResolvedLayout layout, javax.xml.transform.Result result, 141 SvgSettings settings) throws Exception { 123 142 124 143 org.w3c.dom.Document doc = XmlUtils.marshaltoW3CDomDocument( … … 127 146 "http://schemas.openxmlformats.org/presentationml/2006/main", "spTree", GroupShape.class); 128 147 129 HtmlSettings htmlSettings = new HtmlSettings(); 130 htmlSettings.setWmlPackage(presentationMLPackage); 131 htmlSettings.getSettings().put("resolvedLayout", layout); 132 htmlSettings.getSettings().put("imageDirPath", imageDirPath); 133 134 org.docx4j.XmlUtils.transform(doc, xslt, htmlSettings.getSettings(), result); 148 if (settings == null) { 149 settings = new SvgSettings(); 150 } 151 settings.setWmlPackage(presentationMLPackage); 152 settings.getSettings().put("resolvedLayout", layout); 153 if ((settings.getImageDirPath() == null) && (imageDirPath != null)) { 154 settings.setImageDirPath(imageDirPath); 155 } 156 boolean privateImageHandler = false; 157 if (settings.getImageHandler() == null) { 158 settings.setImageHandler(settings.getImageDirPath() != null ? 159 new DefaultConversionImageHandler(settings.getImageDirPath()) : 160 new DefaultConversionImageHandler()); 161 privateImageHandler = true; 162 } 163 org.docx4j.XmlUtils.transform(doc, xslt, settings.getSettings(), result); 164 if (privateImageHandler) { 165 //remove a locally created imageHandler in case the SvgSettings get reused 166 settings.getSettings().remove(HtmlSettings.IMAGE_HANDLER); 167 } 135 168 } 136 169 -
trunk/docx4j/src/pptx4j/java/org/pptx4j/convert/out/svginhtml/pptx2svginhtml.xslt
r1180 r1631 64 64 <xsl:param name="wmlPackage"/> <!-- really, its pml --> 65 65 <xsl:param name="resolvedLayout"/> 66 <xsl:param name="image DirPath"/>66 <xsl:param name="imageHandler"/> 67 67 68 68 … … 198 198 <xsl:copy-of select="java:org.pptx4j.convert.out.svginhtml.PictureExporter.createHtmlImg( 199 199 $wmlPackage, $resolvedLayout, 200 string($imageDirPath),200 $imageHandler, 201 201 .)" /> 202 202
Note: See TracChangeset
for help on using the changeset viewer.
