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]