- Timestamp:
- 03/10/08 08:08:44 (4 years ago)
- Location:
- trunk/docx4j/src/main/java/org/docx4j/openpackaging/packages
- Files:
-
- 2 edited
-
WordprocessingMLPackage.java (modified) (4 diffs)
-
wordml2html-2007.xslt (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/docx4j/src/main/java/org/docx4j/openpackaging/packages/WordprocessingMLPackage.java
r163 r164 21 21 22 22 23 import java.io.File;24 import java.io.FileOutputStream;25 import java.io.IOException;26 23 import java.io.OutputStream; 27 import java.nio.ByteBuffer; 24 25 import java.util.Iterator; 26 import java.util.Map; 28 27 29 28 import javax.xml.bind.JAXBContext; 30 29 import javax.xml.bind.Marshaller; 31 import javax.xml.parsers.DocumentBuilderFactory; 32 30 31 import org.apache.fop.fonts.EmbedFontInfo; 33 32 import org.apache.log4j.Logger; 34 33 import org.docx4j.fonts.Substituter; 35 34 import org.docx4j.jaxb.Context; 36 import org.docx4j.openpackaging.Base;37 35 import org.docx4j.openpackaging.parts.DocPropsCorePart; 38 36 import org.docx4j.openpackaging.parts.DocPropsExtendedPart; 39 37 import org.docx4j.openpackaging.parts.Part; 40 import org.docx4j.openpackaging.parts.PartName;41 38 import org.docx4j.openpackaging.parts.WordprocessingML.FontTablePart; 42 39 import org.docx4j.openpackaging.parts.WordprocessingML.GlossaryDocumentPart; 43 40 import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart; 44 41 import org.docx4j.openpackaging.parts.relationships.Namespaces; 45 import org.docx4j.openpackaging.parts.relationships.RelationshipsPart;46 42 47 43 import org.docx4j.openpackaging.contenttype.ContentType; 48 44 import org.docx4j.openpackaging.contenttype.ContentTypeManager; 49 import org.docx4j.openpackaging.contenttype.ContentTypeManagerImpl;50 45 import org.docx4j.openpackaging.contenttype.ContentTypes; 51 46 import org.docx4j.openpackaging.exceptions.Docx4JException; … … 269 264 // 2. For each font, find the closest match on the system (use OO's VCL.xcu to do this) 270 265 // - do this in a general way, since docx4all needs this as well to display fonts 271 Substituter s= new Substituter();266 fontSubstituter = new Substituter(); 272 267 FontTablePart fontTablePart= this.getMainDocumentPart().getFontTablePart(); 273 268 org.docx4j.wml.Fonts fonts = (org.docx4j.wml.Fonts)fontTablePart.getJaxbElement(); 274 269 275 s.populateFontMappings(fontsInUse, fonts);270 fontSubstituter.populateFontMappings(fontsInUse, fonts); 276 271 277 272 // 3. Ensure that the font names in the XHTML have been mapped to these matches 278 273 // possibly via an extension function in the XSLT 279 xformer.setParameter("substituterInstance", s);274 xformer.setParameter("substituterInstance", fontSubstituter); 280 275 xformer.setParameter("fontFamilyStack", fontFamilyStack); 281 276 … … 292 287 } 293 288 289 private Substituter fontSubstituter; 290 294 291 /** Create a pdf version of the document. 295 292 * … … 331 328 332 329 // See https://xhtmlrenderer.dev.java.net/r7/users-guide-r7.html#xil_32 333 org.xhtmlrenderer.extend.FontResolver resolver = renderer.getFontResolver(); 334 335 log.info("OS: " + System.getProperty("os.name") ); 336 if (System.getProperty("os.name").toUpperCase().indexOf("WINDOWS")>-1) { 337 log.info("Detected Windows - "); 338 renderer.getFontResolver().addFont("C:\\WINDOWS\\FONTS\\ARIAL.TTF", true); 339 renderer.getFontResolver().addFont("C:\\WINDOWS\\FONTS\\COMIC.TTF", true); 340 renderer.getFontResolver().addFont("C:\\WINDOWS\\FONTS\\TREBUC.TTF", true); 341 renderer.getFontResolver().addFont("C:\\WINDOWS\\FONTS\\VERDANA.TTF", true); 342 343 } 330 org.xhtmlrenderer.extend.FontResolver resolver = renderer.getFontResolver(); 331 332 Map fontMappings = fontSubstituter.getFontMappings(); 333 Iterator fontMappingsIterator = fontMappings.entrySet().iterator(); 334 while (fontMappingsIterator.hasNext()) { 335 Map.Entry pairs = (Map.Entry)fontMappingsIterator.next(); 336 if(pairs.getKey()==null) { 337 log.info("Skipped null key"); 338 pairs = (Map.Entry)fontMappingsIterator.next(); 339 } 340 341 String fontName = (String)pairs.getKey(); 342 Substituter.FontMapping fm = (Substituter.FontMapping)pairs.getValue(); 343 344 log.info("Substituting " + fontName + " with " + fm.getTripletName() + " from " + fm.getEmbeddedFile() ); 345 if (fm.getEmbeddedFile()!=null) { 346 try { 347 renderer.getFontResolver().addFont(fm.getEmbeddedFile(), true); 348 } catch (com.lowagie.text.DocumentException e) { 349 /* 350 * com.lowagie.text.DocumentException: file:/usr/share/fonts/truetype/ttf-tamil-fonts/lohit_ta.ttf cannot be embedded due to licensing restrictions. 351 at com.lowagie.text.pdf.TrueTypeFont.<init>(TrueTypeFont.java:364) 352 at com.lowagie.text.pdf.TrueTypeFont.<init>(TrueTypeFont.java:335) 353 at com.lowagie.text.pdf.BaseFont.createFont(BaseFont.java:399) 354 at com.lowagie.text.pdf.BaseFont.createFont(BaseFont.java:345) 355 at org.xhtmlrenderer.pdf.ITextFontResolver.addFont(ITextFontResolver.java:164) 356 */ 357 log.warn(e.getMessage()); 358 } catch (java.io.IOException e) { 359 360 /* 361 * [AWT-EventQueue-0] INFO packages.WordprocessingMLPackage - Substituting symbol with standardsymbolsl from file:/usr/share/fonts/type1/gsfonts/s050000l.pfb 362 java.io.IOException: Unsupported font type 363 at org.xhtmlrenderer.pdf.ITextFontResolver.addFont(ITextFontResolver.java:199) 364 */ 365 log.warn(e.getMessage() + ": " + fm.getEmbeddedFile()); 366 } 367 } else { 368 log.warn("Can't addFont for: " + fontName); 369 } 370 } 344 371 345 372 renderer.setDocument(xhtmlDoc, null); -
trunk/docx4j/src/main/java/org/docx4j/openpackaging/packages/wordml2html-2007.xslt
r163 r164 2637 2637 <xsl:variable name="documentFont"><xsl:value-of select="string(@w:ascii)"/></xsl:variable> 2638 2638 <xsl:variable name="targetFont" select="java:org.docx4j.fonts.Substituter.getSubstituteFontXsltExtension($substituterInstance, string($documentFont), boolean($fontFamilyStack))" /> 2639 font-family: <xsl:value-of select="$targetFont"/>;2639 font-family:'<xsl:value-of select="$targetFont"/>'; 2640 2640 </xsl:template> 2641 2641
Note: See TracChangeset
for help on using the changeset viewer.
