You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by le...@apache.org on 2009/02/11 20:24:55 UTC
svn commit: r743456 - in
/incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel:
PDResources.java font/PDFontFactory.java font/PDType0Font.java
Author: lehmi
Date: Wed Feb 11 19:24:55 2009
New Revision: 743456
URL: http://svn.apache.org/viewvc?rev=743456&view=rev
Log:
PDFBOX-421: using a selfgenerated unique key for font-caching, caching descendant font within PDType0Font to avoid multiple font creation
Modified:
incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/PDResources.java
incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/font/PDFontFactory.java
incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/font/PDType0Font.java
Modified: incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/PDResources.java
URL: http://svn.apache.org/viewvc/incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/PDResources.java?rev=743456&r1=743455&r2=743456&view=diff
==============================================================================
--- incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/PDResources.java (original)
+++ incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/PDResources.java Wed Feb 11 19:24:55 2009
@@ -120,18 +120,7 @@
if( font instanceof COSDictionary )
{
COSDictionary fontDictionary = (COSDictionary)font;
- PDFont newFont = null;
- if (fontCache != null) {
- if (fontCache.containsKey(fontName.getName()))
- newFont = (PDFont)fontCache.get(fontName.getName());
- else {
- newFont = PDFontFactory.createFont( fontDictionary );
- fontCache.put(fontName.getName(), newFont);
- }
- }
- else
- newFont = PDFontFactory.createFont( fontDictionary );
- actuals.put( fontName.getName(), newFont);
+ actuals.put( fontName.getName(), PDFontFactory.createFont( fontDictionary, fontCache ));
}
}
return retval;
Modified: incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/font/PDFontFactory.java
URL: http://svn.apache.org/viewvc/incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/font/PDFontFactory.java?rev=743456&r1=743455&r2=743456&view=diff
==============================================================================
--- incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/font/PDFontFactory.java (original)
+++ incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/font/PDFontFactory.java Wed Feb 11 19:24:55 2009
@@ -17,6 +17,7 @@
package org.apache.pdfbox.pdmodel.font;
import java.io.IOException;
+import java.util.Map;
import org.apache.pdfbox.cos.COSDictionary;
import org.apache.pdfbox.cos.COSName;
@@ -41,6 +42,35 @@
*
* @param dic The populated dictionary.
*
+ * @param fontCache A Map to cache already created fonts
+ *
+ * @return The corrent implementation for the font.
+ *
+ * @throws IOException If the dictionary is not valid.
+ */
+ public static PDFont createFont(COSDictionary dic, Map fontCache) throws IOException
+ {
+ PDFont retval = null;
+ if (fontCache != null) {
+ String fontKey = dic.getNameAsString(COSName.BASE_FONT) + dic.getNameAsString(COSName.NAME)+dic.getNameAsString(COSName.SUBTYPE);
+ if (dic.getItem(COSName.ENCODING) != null)
+ fontKey += dic.getItem(COSName.ENCODING).toString();
+ if (fontCache.containsKey(fontKey))
+ retval = (PDFont)fontCache.get(fontKey);
+ else
+ {
+ retval = PDFontFactory.createFont( dic );
+ fontCache.put(fontKey, retval);
+ }
+ }
+ return retval;
+ }
+
+ /**
+ * This will create the correct font based on information in the dictionary.
+ *
+ * @param dic The populated dictionary.
+ *
* @return The corrent implementation for the font.
*
* @throws IOException If the dictionary is not valid.
Modified: incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/font/PDType0Font.java
URL: http://svn.apache.org/viewvc/incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/font/PDType0Font.java?rev=743456&r1=743455&r2=743456&view=diff
==============================================================================
--- incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/font/PDType0Font.java (original)
+++ incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/font/PDType0Font.java Wed Feb 11 19:24:55 2009
@@ -34,7 +34,9 @@
*/
public class PDType0Font extends /*PDFont following is a hack ...*/ PDType1Font
{
- /**
+
+ private PDFont descendentFont;
+ /**
* Constructor.
*/
public PDType0Font()
@@ -88,12 +90,14 @@
*/
public float getFontWidth( byte[] c, int offset, int length ) throws IOException
{
- COSArray descendantFontArray =
- (COSArray)font.getDictionaryObject( COSName.getPDFName( "DescendantFonts" ) );
-
- COSDictionary descendantFontDictionary = (COSDictionary)descendantFontArray.getObject( 0 );
- PDFont descendentFont = PDFontFactory.createFont( descendantFontDictionary );
-
+ if (descendentFont == null)
+ {
+ COSArray descendantFontArray =
+ (COSArray)font.getDictionaryObject( COSName.getPDFName( "DescendantFonts" ) );
+
+ COSDictionary descendantFontDictionary = (COSDictionary)descendantFontArray.getObject( 0 );
+ descendentFont = PDFontFactory.createFont( descendantFontDictionary );
+ }
return descendentFont.getFontWidth( c, offset, length );
}
@@ -110,12 +114,14 @@
*/
public float getFontHeight( byte[] c, int offset, int length ) throws IOException
{
- COSArray descendantFontArray =
- (COSArray)font.getDictionaryObject( COSName.getPDFName( "DescendantFonts" ) );
-
- COSDictionary descendantFontDictionary = (COSDictionary)descendantFontArray.getObject( 0 );
- PDFont descendentFont = PDFontFactory.createFont( descendantFontDictionary );
-
+ if (descendentFont == null)
+ {
+ COSArray descendantFontArray =
+ (COSArray)font.getDictionaryObject( COSName.getPDFName( "DescendantFonts" ) );
+
+ COSDictionary descendantFontDictionary = (COSDictionary)descendantFontArray.getObject( 0 );
+ descendentFont = PDFontFactory.createFont( descendantFontDictionary );
+ }
return descendentFont.getFontHeight( c, offset, length );
}
@@ -128,12 +134,14 @@
*/
public float getAverageFontWidth() throws IOException
{
- COSArray descendantFontArray =
- (COSArray)font.getDictionaryObject( COSName.getPDFName( "DescendantFonts" ) );
-
- COSDictionary descendantFontDictionary = (COSDictionary)descendantFontArray.getObject( 0 );
- PDFont descendentFont = PDFontFactory.createFont( descendantFontDictionary );
-
+ if (descendentFont == null)
+ {
+ COSArray descendantFontArray =
+ (COSArray)font.getDictionaryObject( COSName.getPDFName( "DescendantFonts" ) );
+
+ COSDictionary descendantFontDictionary = (COSDictionary)descendantFontArray.getObject( 0 );
+ descendentFont = PDFontFactory.createFont( descendantFontDictionary );
+ }
return descendentFont.getAverageFontWidth();
}
}