Author: jeremias
Date: Thu Apr 17 01:42:52 2008
New Revision: 649006
URL: http://svn.apache.org/viewvc?rev=649006&view=rev
Log:
Fixed text extraction problem with ZapfDingbats and Symbol font in PDF output.
These fonts are symbolic and must not use an Encoding value in PDF. Applies to
the built-in base 14 variant and to the case where these fonts are explicitely
embedded.
Modified:
xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/fonts/CustomFont.java
xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/fonts/FontDescriptor.java
xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/fonts/LazyFont.java
xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/pdf/PDFFactory.java
xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/pdf/PDFFont.java
xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/pdf/PDFResources.java
xmlgraphics/fop/branches/fop-0_95/status.xml
Modified:
xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/fonts/CustomFont.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/fonts/CustomFont.java?rev=649006&r1=649005&r2=649006&view=diff
==============================================================================
---
xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/fonts/CustomFont.java
(original)
+++
xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/fonts/CustomFont.java
Thu Apr 17 01:42:52 2008
@@ -190,11 +190,16 @@
return fontBBox;
}
- /**
- * [EMAIL PROTECTED]
- */
+ /** [EMAIL PROTECTED] */
public int getFlags() {
return flags;
+ }
+
+ /** [EMAIL PROTECTED] */
+ public boolean isSymbolicFont() {
+ return ((getFlags() & 4) != 0) ||
"ZapfDingbatsEncoding".equals(getEncoding());
+ //Note: The check for ZapfDingbats is necessary as the PFM does not
reliably indicate
+ //if a font is symbolic.
}
/**
Modified:
xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/fonts/FontDescriptor.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/fonts/FontDescriptor.java?rev=649006&r1=649005&r2=649006&view=diff
==============================================================================
---
xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/fonts/FontDescriptor.java
(original)
+++
xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/fonts/FontDescriptor.java
Thu Apr 17 01:42:52 2008
@@ -53,6 +53,11 @@
*/
int getFlags();
+ /**
+ * Indicates whether the font is a symbolic font.
+ * @return true if the font is a symbolic font (i.e. Symbol or
ZapfDingbats)
+ */
+ boolean isSymbolicFont();
/**
* Returns the font's bounding box.
Modified:
xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/fonts/LazyFont.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/fonts/LazyFont.java?rev=649006&r1=649005&r2=649006&view=diff
==============================================================================
---
xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/fonts/LazyFont.java
(original)
+++
xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/fonts/LazyFont.java
Thu Apr 17 01:42:52 2008
@@ -315,12 +315,16 @@
return realFontDescriptor.getAscender();
}
- /**
- * [EMAIL PROTECTED]
- */
+ /** [EMAIL PROTECTED] */
public int getFlags() {
load(true);
return realFontDescriptor.getFlags();
+ }
+
+ /** [EMAIL PROTECTED] */
+ public boolean isSymbolicFont() {
+ load(true);
+ return realFontDescriptor.isSymbolicFont();
}
/**
Modified:
xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/pdf/PDFFactory.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/pdf/PDFFactory.java?rev=649006&r1=649005&r2=649006&view=diff
==============================================================================
---
xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/pdf/PDFFactory.java
(original)
+++
xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/pdf/PDFFactory.java
Thu Apr 17 01:42:52 2008
@@ -1195,10 +1195,11 @@
PDFFont font = null;
font = (PDFFont)PDFFont.createFont(fontname, fonttype,
- basefont, encoding);
+ basefont, null);
getDocument().registerObject(font);
if (fonttype == FontType.TYPE0) {
+ font.setEncoding(encoding);
CIDFont cidMetrics;
if (metrics instanceof LazyFont) {
cidMetrics = (CIDFont)((LazyFont) metrics).getRealFont();
@@ -1242,7 +1243,9 @@
//Handle encoding
CodePointMapping mapping =
singleByteFont.getCodePointMapping();
- if (PDFEncoding.isPredefinedEncoding(mapping.getName())) {
+ if (singleByteFont.isSymbolicFont()) {
+ //no encoding, use the font's encoding
+ } else if
(PDFEncoding.isPredefinedEncoding(mapping.getName())) {
font.setEncoding(mapping.getName());
} else {
CodePointMapping winansi = CodePointMapping.getMapping(
Modified:
xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/pdf/PDFFont.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/pdf/PDFFont.java?rev=649006&r1=649005&r2=649006&view=diff
==============================================================================
--- xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/pdf/PDFFont.java
(original)
+++ xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/pdf/PDFFont.java
Thu Apr 17 01:42:52 2008
@@ -62,8 +62,6 @@
setEncoding((PDFEncoding)encoding);
} else if (encoding instanceof String) {
setEncoding((String)encoding);
- } else {
- throw new IllegalArgumentException("Illegal value for encoding");
}
}
Modified:
xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/pdf/PDFResources.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/pdf/PDFResources.java?rev=649006&r1=649005&r2=649006&view=diff
==============================================================================
---
xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/pdf/PDFResources.java
(original)
+++
xmlgraphics/fop/branches/fop-0_95/src/java/org/apache/fop/pdf/PDFResources.java
Thu Apr 17 01:42:52 2008
@@ -28,6 +28,8 @@
import org.apache.fop.fonts.FontDescriptor;
import org.apache.fop.fonts.FontInfo;
import org.apache.fop.fonts.Typeface;
+import org.apache.fop.fonts.base14.Symbol;
+import org.apache.fop.fonts.base14.ZapfDingbats;
import org.apache.fop.util.ColorProfileUtil;
/**
@@ -109,8 +111,12 @@
if (font instanceof FontDescriptor) {
desc = (FontDescriptor)font;
}
+ String encoding = font.getEncoding();
+ if (font instanceof Symbol || font instanceof ZapfDingbats) {
+ encoding = null; //Symbolic fonts shouldn't specify an
encoding value in PDF
+ }
addFont(doc.getFactory().makeFont(
- f, font.getEmbedFontName(), font.getEncoding(), font,
desc));
+ f, font.getEmbedFontName(), encoding, font, desc));
}
}
}
Modified: xmlgraphics/fop/branches/fop-0_95/status.xml
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/fop-0_95/status.xml?rev=649006&r1=649005&r2=649006&view=diff
==============================================================================
--- xmlgraphics/fop/branches/fop-0_95/status.xml (original)
+++ xmlgraphics/fop/branches/fop-0_95/status.xml Thu Apr 17 01:42:52 2008
@@ -61,6 +61,9 @@
<!--/release-->
<release version="0.95" date="TBD">
<action context="Fonts" dev="JM" type="fix">
+ Fixed text extraction problem with ZapfDingbats and Symbol font in PDF
output.
+ </action>
+ <action context="Fonts" dev="JM" type="fix">
Fixed NullPointerException when loading a TrueType font using XML font
metric files.
</action>
</release>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]