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]

Reply via email to