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]

Reply via email to