jeremias    2002/11/29 00:44:23

  Modified:    src/org/apache/fop/render/pdf/fonts Tag: fop-0_20_2-maintain
                        SingleByteFont.java
  Log:
  Use new PFBParser to read PFB files so they are properly decoded.
  Use org.apache.fop.tools.IOUtil for simpler code.
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.3.2.4   +48 -60    xml-fop/src/org/apache/fop/render/pdf/fonts/SingleByteFont.java
  
  Index: SingleByteFont.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/render/pdf/fonts/SingleByteFont.java,v
  retrieving revision 1.3.2.3
  retrieving revision 1.3.2.4
  diff -u -r1.3.2.3 -r1.3.2.4
  --- SingleByteFont.java       8 Nov 2002 10:25:28 -0000       1.3.2.3
  +++ SingleByteFont.java       29 Nov 2002 08:44:23 -0000      1.3.2.4
  @@ -7,19 +7,24 @@
   
   package org.apache.fop.render.pdf.fonts;
   
  -import org.apache.fop.fonts.Glyphs;
  +//Java
  +import java.io.InputStream;
  +import java.io.BufferedInputStream;
  +import java.util.Map;
  +import java.net.URL;
  +
  +//FOP
  +import org.apache.fop.messaging.MessageHandler;
   import org.apache.fop.layout.FontDescriptor;
   import org.apache.fop.pdf.PDFStream;
   import org.apache.fop.pdf.PDFT1Stream;
   import org.apache.fop.pdf.PDFTTFStream;
   import org.apache.fop.render.pdf.CodePointMapping;
   import org.apache.fop.render.pdf.Font;
  +import org.apache.fop.fonts.type1.PFBParser;
  +import org.apache.fop.fonts.type1.PFBData;
  +import org.apache.fop.tools.IOUtil;
   
  -import java.io.FileInputStream;
  -import java.io.InputStream;
  -import java.io.BufferedInputStream;
  -import java.util.Map;
  -import java.net.URL;
   
   /**
    * Generic SingleByte font
  @@ -34,9 +39,7 @@
       public int xHeight = 0;
       public int ascender = 0;
       public int descender = 0;
  -    public int[] fontBBox = {
  -        0, 0, 0, 0
  -    };
  +    public int[] fontBBox = {0, 0, 0, 0};
   
       public URL embedFileName = null;
       public String embedResourceName = null;
  @@ -60,10 +63,11 @@
       }
   
       public final Map getKerningInfo() {
  -        if (useKerning)
  +        if (useKerning) {
               return kerning;
  -        else
  +        } else {
               return new java.util.HashMap();
  +        }
       }
   
       public byte getSubType() {
  @@ -108,63 +112,45 @@
           InputStream instream = null;
   
           // Get file first
  -        if (embedFileName != null)
  -            try {
  -                instream = embedFileName.openStream();
  -            } catch (Exception e) {
  -                System.out.println("Failed to embed fontfile: "
  -                                   + embedFileName);
  -            }
  +        if (embedFileName != null) try {
  +            instream = embedFileName.openStream();
  +        } catch (Exception e) {
  +            MessageHandler.error("Failed to embed fontfile: "
  +                               + embedFileName);
  +        }
   
               // Get resource
  -        if (instream == null && embedResourceName != null)
  -            try {
  -                instream =
  -                    new 
BufferedInputStream(this.getClass().getResourceAsStream(embedResourceName));
  -            } catch (Exception e) {
  -                System.out.println("Failed to embed fontresource: "
  -                                   + embedResourceName);
  -            }
  +        if (instream == null && embedResourceName != null) try {
  +            instream =
  +                new 
BufferedInputStream(this.getClass().getResourceAsStream(embedResourceName));
  +        } catch (Exception e) {
  +            MessageHandler.error("Failed to embed fontresource: "
  +                               + embedResourceName);
  +        }
   
  -        if (instream == null)
  +        if (instream == null) {
               return (PDFStream)null;
  +        }
   
  -            // Read fontdata
  -        byte[] file = new byte[128000];
  -        int fsize = 0;
  -
  +        // Read fontdata
           try {
  -            int l = instream.read(file, 0, 128000);
  -            fsize += l;
  -
  -            if (l == 128000) {
  -                // More to read - needs to extend
  -                byte[] tmpbuf;
  -
  -                while (l > 0) {
  -                    tmpbuf = new byte[file.length + 64000];
  -                    System.arraycopy(file, 0, tmpbuf, 0, file.length);
  -                    l = instream.read(tmpbuf, file.length, 64000);
  -                    fsize += l;
  -                    file = tmpbuf;
  -
  -                    if (l < 64000)    // whole file read. No need to loop again
  -                        l = 0;
  -                }
  -            }
  -
               if (subType == org.apache.fop.pdf.PDFFont.TYPE1) {
  -                embeddedFont = new PDFT1Stream(i, fsize);
  -                ((PDFT1Stream)embeddedFont).setData(file, fsize);
  +                PFBParser parser = new PFBParser();
  +                PFBData pfb = parser.parsePFB(instream);
  +                embeddedFont = new PDFT1Stream(i);
  +                ((PDFT1Stream)embeddedFont).setData(pfb);
               } else {
  -                embeddedFont = new PDFTTFStream(i, fsize);
  -                ((PDFTTFStream)embeddedFont).setData(file, fsize);
  +                byte[] file = IOUtil.toByteArray(instream, 128000);
  +                embeddedFont = new PDFTTFStream(i, file.length);
  +                ((PDFTTFStream)embeddedFont).setData(file, file.length);
               }
   
               embeddedFont.addFilter("flate");
               embeddedFont.addFilter("ascii-85");
               instream.close();
  -        } catch (Exception e) {}
  +        } catch (Exception e) {
  +            MessageHandler.error("Failed to read font data for embedded font: 
"+e.getMessage());
  +        }
   
           return (PDFStream)embeddedFont;
       }
  @@ -237,17 +223,19 @@
       public int[] getWidths(int size) {
           int[] arr = new int[width.length];
           System.arraycopy(width, 0, arr, 0, width.length - 1);
  -        for (int i = 0; i < arr.length; i++)
  +        for (int i = 0; i < arr.length; i++) {
               arr[i] *= size;
  +        }
           return arr;
       }
   
       public char mapChar(char c) {
           char d = mapping.mapChar(c);
  -    if(d != 0)
  +        if(d != 0) {
               return d;
  -        else
  -        return '#';
  +        } else {
  +            return '#';
  +        }
       }
   
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to