keiron 01/08/06 02:43:08 Modified: src/org/apache/fop/pdf PDFDocument.java src/org/apache/fop/render/pdf FontSetup.java PDFRenderer.java Added: src/org/apache/fop/render/pdf/fonts LazyFont.java Log: adds support for lazy loading of fonts saves some cpu, memory Submitted by: SASAKI Suguru <[EMAIL PROTECTED]> Reviewed by: Keiron Revision Changes Path 1.27 +8 -2 xml-fop/src/org/apache/fop/pdf/PDFDocument.java Index: PDFDocument.java =================================================================== RCS file: /home/cvs/xml-fop/src/org/apache/fop/pdf/PDFDocument.java,v retrieving revision 1.26 retrieving revision 1.27 diff -u -r1.26 -r1.27 --- PDFDocument.java 2001/08/01 23:08:54 1.26 +++ PDFDocument.java 2001/08/06 09:43:07 1.27 @@ -1,5 +1,5 @@ /* - * $Id: PDFDocument.java,v 1.26 2001/08/01 23:08:54 gears Exp $ + * $Id: PDFDocument.java,v 1.27 2001/08/06 09:43:07 keiron Exp $ * Copyright (C) 2001 The Apache Software Foundation. All rights reserved. * For details on use and redistribution please refer to the * LICENSE file included with these sources. @@ -18,6 +18,7 @@ import org.apache.fop.datatypes.ColorSpace; import org.apache.fop.render.pdf.CIDFont; +import org.apache.fop.render.pdf.fonts.LazyFont; import org.apache.fop.datatypes.IDReferences; import org.apache.fop.layout.Page; @@ -813,7 +814,12 @@ font.setDescriptor(pdfdesc); if (subtype == PDFFont.TYPE0) { - CIDFont cidMetrics = (CIDFont)metrics; + CIDFont cidMetrics; + if(metrics instanceof LazyFont){ + cidMetrics = (CIDFont) ((LazyFont) metrics).getRealFont(); + }else{ + cidMetrics = (CIDFont)metrics; + } PDFCIDSystemInfo sysInfo = new PDFCIDSystemInfo(cidMetrics.getRegistry(), cidMetrics.getOrdering(), 1.13 +8 -2 xml-fop/src/org/apache/fop/render/pdf/FontSetup.java Index: FontSetup.java =================================================================== RCS file: /home/cvs/xml-fop/src/org/apache/fop/render/pdf/FontSetup.java,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- FontSetup.java 2001/07/30 20:29:33 1.12 +++ FontSetup.java 2001/08/06 09:43:07 1.13 @@ -1,5 +1,5 @@ /* - * $Id: FontSetup.java,v 1.12 2001/07/30 20:29:33 tore Exp $ + * $Id: FontSetup.java,v 1.13 2001/08/06 09:43:07 keiron Exp $ * Copyright (C) 2001 The Apache Software Foundation. All rights reserved. * For details on use and redistribution please refer to the * LICENSE file included with these sources. @@ -156,11 +156,17 @@ if (metricsFile != null) { internalName = "F" + num; num++; + /* reader = new FontReader(metricsFile); reader.useKerning(configFontInfo.getKerning()); reader.setFontEmbedPath(configFontInfo.getEmbedFile()); fontInfo.addMetrics(internalName, reader.getFont()); - + */ + LazyFont font = new LazyFont(configFontInfo.getEmbedFile(), + metricsFile, + configFontInfo.getKerning()); + fontInfo.addMetrics(internalName, font); + Vector triplets = configFontInfo.getFontTriplets(); for (Enumeration t = triplets.elements(); t.hasMoreElements(); ) { 1.79 +8 -2 xml-fop/src/org/apache/fop/render/pdf/PDFRenderer.java Index: PDFRenderer.java =================================================================== RCS file: /home/cvs/xml-fop/src/org/apache/fop/render/pdf/PDFRenderer.java,v retrieving revision 1.78 retrieving revision 1.79 diff -u -r1.78 -r1.79 --- PDFRenderer.java 2001/08/06 06:21:02 1.78 +++ PDFRenderer.java 2001/08/06 09:43:07 1.79 @@ -1,5 +1,5 @@ /* - * $Id: PDFRenderer.java,v 1.78 2001/08/06 06:21:02 keiron Exp $ + * $Id: PDFRenderer.java,v 1.79 2001/08/06 09:43:07 keiron Exp $ * Copyright (C) 2001 The Apache Software Foundation. All rights reserved. * For details on use and redistribution please refer to the * LICENSE file included with these sources. @@ -22,6 +22,7 @@ import org.apache.fop.image.*; import org.apache.fop.extensions.*; import org.apache.fop.datatypes.IDReferences; +import org.apache.fop.render.pdf.fonts.LazyFont; import org.apache.batik.bridge.*; import org.apache.batik.swing.svg.*; @@ -487,8 +488,13 @@ boolean useMultiByte = false; Font f = (Font)area.getFontState().getFontInfo().getFonts().get(name); - if (f instanceof CIDFont) + if (f instanceof LazyFont){ + if(((LazyFont) f).getRealFont() instanceof CIDFont){ + useMultiByte = true; + } + }else if (f instanceof CIDFont){ useMultiByte = true; + } // String startText = useMultiByte ? "<FEFF" : "("; String startText = useMultiByte ? "<" : "("; String endText = useMultiByte ? "> " : ") "; 1.1 xml-fop/src/org/apache/fop/render/pdf/fonts/LazyFont.java Index: LazyFont.java =================================================================== /* * $Id: LazyFont.java,v 1.1 2001/08/06 09:43:08 keiron Exp $ * Copyright (C) 2001 The Apache Software Foundation. All rights reserved. * For details on use and redistribution please refer to the * LICENSE file included with these sources. */ package org.apache.fop.render.pdf.fonts; import org.apache.fop.render.pdf.Font; import org.apache.fop.layout.FontDescriptor; import org.apache.fop.pdf.PDFStream; import org.apache.fop.messaging.MessageHandler; import java.util.Hashtable; import org.apache.fop.render.pdf.FontReader; public class LazyFont extends Font implements FontDescriptor { private String metricsFileName = null; private String fontEmbedPath = null; private boolean useKerning = false; private boolean isMetricsLoaded = false; private Font realFont = null; private FontDescriptor realFontDescriptor = null; public LazyFont(String fontEmbedPath, String metricsFileName, boolean useKerning){ this.metricsFileName = metricsFileName; this.fontEmbedPath = fontEmbedPath; this.useKerning = useKerning; } private void load(){ if(! isMetricsLoaded){ try{ FontReader reader = new FontReader(metricsFileName); reader.useKerning(useKerning); reader.setFontEmbedPath(fontEmbedPath); realFont = reader.getFont(); if(realFont instanceof FontDescriptor){ realFontDescriptor = (FontDescriptor) realFont; } isMetricsLoaded = true; // System.out.println("Metrics " + metricsFileName + " loaded."); } catch (Exception ex) { MessageHandler.error("Failed to read font metrics file " + metricsFileName + " : " + ex.getMessage()); } } } public Font getRealFont(){ return realFont; } // Font public String encoding(){ load(); return realFont.encoding(); } public String fontName(){ load(); return realFont.fontName(); } public byte getSubType(){ load(); return realFont.getSubType(); } public char mapChar(char c){ load(); return realFont.mapChar(c); } // FontMetrics public int getAscender(int size){ load(); return realFont.getAscender(size); } public int getCapHeight(int size){ load(); return realFont.getCapHeight(size); } public int getDescender(int size){ load(); return realFont.getDescender(size); } public int getXHeight(int size){ load(); return realFont.getXHeight(size); } public int getFirstChar(){ load(); return realFont.getFirstChar(); } public int getLastChar(){ load(); return realFont.getLastChar(); } public int width(int i, int size){ load(); return realFont.width(i, size); } public int[] getWidths(int size){ load(); return realFont.getWidths(size); } // FontDescriptor public int getCapHeight(){ load(); return realFontDescriptor.getCapHeight(); } public int getDescender(){ load(); return realFontDescriptor.getDescender(); } public int getAscender(){ load(); return realFontDescriptor.getAscender(); } public int getFlags(){ load(); return realFontDescriptor.getFlags(); } public int[] getFontBBox(){ load(); return realFontDescriptor.getFontBBox(); } public int getItalicAngle(){ load(); return realFontDescriptor.getItalicAngle(); } public int getStemV(){ load(); return realFontDescriptor.getStemV(); } public boolean hasKerningInfo(){ load(); return realFontDescriptor.hasKerningInfo(); } public Hashtable getKerningInfo(){ load(); return realFontDescriptor.getKerningInfo(); } public boolean isEmbeddable(){ load(); return realFontDescriptor.isEmbeddable(); } public PDFStream getFontFile(int objNum){ load(); return realFontDescriptor.getFontFile(objNum); } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]