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]