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 2011/09/09 07:59:34 UTC
svn commit: r1167012 -
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java
Author: lehmi
Date: Fri Sep 9 05:59:34 2011
New Revision: 1167012
URL: http://svn.apache.org/viewvc?rev=1167012&view=rev
Log:
PDFBOX-954: fixed the calculation of the widths value
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java?rev=1167012&r1=1167011&r2=1167012&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java Fri Sep 9 05:59:34 2011
@@ -107,6 +107,8 @@ public class PDTrueTypeFont extends PDSi
* Constructor.
*
* @param fontDictionary The font dictionary according to the PDF specification.
+ *
+ * @throws IOException exception if something went wrong when loading the font.
*/
public PDTrueTypeFont( COSDictionary fontDictionary ) throws IOException
{
@@ -219,12 +221,11 @@ public class PDTrueTypeFont extends PDSi
}
OS2WindowsMetricsTable os2 = ttf.getOS2Windows();
- fd.setNonSymbolic( true );
+ boolean isSymbolic = false;
switch( os2.getFamilyClass() )
{
case OS2WindowsMetricsTable.FAMILY_CLASS_SYMBOLIC:
- fd.setSymbolic( true );
- fd.setNonSymbolic( false );
+ isSymbolic = true;
break;
case OS2WindowsMetricsTable.FAMILY_CLASS_SCRIPTS:
fd.setScript( true );
@@ -272,9 +273,10 @@ public class PDTrueTypeFont extends PDSi
//do nothing
}
fd.setFontWeight( os2.getWeightClass() );
+ fd.setSymbolic( isSymbolic );
+ fd.setNonSymbolic( !isSymbolic );
//todo retval.setFixedPitch
- //todo retval.setNonSymbolic
//todo retval.setItalic
//todo retval.setAllCap
//todo retval.setSmallCap
@@ -329,13 +331,18 @@ public class PDTrueTypeFont extends PDSi
int[] glyphToCCode = null;
for( int i=0; i<cmaps.length; i++ )
{
- if( cmaps[i].getPlatformId() == CMAPTable.PLATFORM_WINDOWS &&
- cmaps[i].getPlatformEncodingId() == CMAPTable.ENCODING_UNICODE )
+ if( cmaps[i].getPlatformId() == CMAPTable.PLATFORM_WINDOWS)
{
- glyphToCCode = cmaps[i].getGlyphIdToCharacterCode();
+ int platformEncoding = cmaps[i].getPlatformEncodingId();
+ if ( (isSymbolic && CMAPTable.ENCODING_SYMBOL == platformEncoding)
+ ||CMAPTable.ENCODING_UNICODE == platformEncoding )
+ {
+ glyphToCCode = cmaps[i].getGlyphIdToCharacterCode();
+ break;
+ }
}
}
- int firstChar = 0;
+ int firstChar = os2.getFirstCharIndex();
int maxWidths = glyphToCCode.length;
HorizontalMetricsTable hMet = ttf.getHorizontalMetrics();
int[] widthValues = hMet.getAdvanceWidth();
@@ -345,7 +352,7 @@ public class PDTrueTypeFont extends PDSi
{
widths.add( zero );
}
- for( int i=0; i<widthValues.length; i++ )
+ for( int i=0; i<maxWidths; i++ )
{
if(glyphToCCode[i]-firstChar < widths.size() && glyphToCCode[i]-firstChar >= 0
&& widths.get( glyphToCCode[i]-firstChar) == zero )
@@ -354,9 +361,8 @@ public class PDTrueTypeFont extends PDSi
}
}
setWidths( widths );
- setFirstChar( firstChar );
- setLastChar( firstChar + widths.size()-1 );
-
+ setFirstChar( isSymbolic ? 0 : firstChar );
+ setLastChar( isSymbolic ? widths.size() : firstChar + widths.size()-1 );
}
finally
{