jeremias    2002/11/29 00:43:08

  Modified:    src/org/apache/fop/pdf Tag: fop-0_20_2-maintain
                        PDFT1Stream.java
  Log:
  Fixes bug with Adobe Type 1 font embedding. PC format encoded PFB files were not 
decoded. I think that leads to error messages on certain RIP engines.
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.2.2.3   +17 -95    xml-fop/src/org/apache/fop/pdf/PDFT1Stream.java
  
  Index: PDFT1Stream.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/pdf/PDFT1Stream.java,v
  retrieving revision 1.2.2.2
  retrieving revision 1.2.2.3
  diff -u -r1.2.2.2 -r1.2.2.3
  --- PDFT1Stream.java  31 May 2002 00:17:16 -0000      1.2.2.2
  +++ PDFT1Stream.java  29 Nov 2002 08:43:08 -0000      1.2.2.3
  @@ -10,109 +10,31 @@
   // Java
   import java.io.UnsupportedEncodingException;
   
  +// FOP
  +import org.apache.fop.fonts.type1.PFBData;
  +
   public class PDFT1Stream extends PDFStream {
  -    private int origLength;
  -    private int len1, len3;
  -    private byte[] originalData = null;
  +    
  +    private PFBData pfb;
   
  -    public PDFT1Stream(int num, int len) {
  +    public PDFT1Stream(int num) {
           super(num);
  -        origLength = len;
  -    }
  -
  -    private final static boolean byteCmp(byte[] src, int offset, byte[] cmp) {
  -        boolean ret = true;
  -        for (int i = 0; ret == true && i < cmp.length; i++) {
  -            // System.out.println("Compare: ");
  -            // System.out.println("         "+src[offset+i]+" "+cmp[i]);
  -            if (src[offset + i] != cmp[i])
  -                ret = false;
  -        }
  -        return ret;
       }
   
  -    /**
  -     * calculates the Length1 and Length3 PDFStream attributes for type1
  -     * font embedding
  -     */
  -    private void calcLengths(byte[] originalData) {
  -        // Calculate length 1 and 3
  -        // System.out.println ("Checking font, size = "+originalData.length);
  -
  -        // Length1 is the size of the initial ascii portion
  -        // search for "currentfile eexec"
  -        // Get the first binary number and search backwards for "eexec"
  -        len1 = 30;
  -
  -        byte[] eexec;
  -        try {
  -            eexec = "currentfile eexec".getBytes(PDFDocument.ENCODING);
  -        } catch (UnsupportedEncodingException ue) {
  -            eexec = "currentfile eexec".getBytes();
  -        }       
  -        // System.out.println("Length1="+len1);
  -        while (!byteCmp(originalData, len1 - eexec.length, eexec))
  -            len1++;
  -        // Skip newline
  -        len1++;
  -
  -        // Length3 is length of the last portion of the file
  -        len3 = 0;
  -        byte[] cltom;
  -        try {
  -            cltom = "cleartomark".getBytes(PDFDocument.ENCODING);
  -        } catch (UnsupportedEncodingException ue) {
  -            cltom = "cleartomark".getBytes();
  -        }       
  -        
  -        len3 -= cltom.length;
  -        while (!byteCmp(originalData, origLength + len3, cltom)) {
  -            len3--;
  -            // System.out.println("Len3="+len3);
  -        }
  -        len3 = -len3;
  -        len3++;
  -        // Eat 512 zeroes
  -        int numZeroes = 0;
  -        byte[] ws1;
  -        try {
  -            ws1 = "\n".getBytes(PDFDocument.ENCODING);
  -        } catch (UnsupportedEncodingException ue) {
  -            ws1 = "\n".getBytes();
  -        }       
  -        byte[] ws2;
  -        try {
  -            ws2 = "\r".getBytes(PDFDocument.ENCODING);
  -        } catch (UnsupportedEncodingException ue) {
  -            ws2 = "\r".getBytes();
  -        }       
  -        byte[] ws3;
  -        try {
  -            ws3 = "0".getBytes(PDFDocument.ENCODING);
  -        } catch (UnsupportedEncodingException ue) {
  -            ws3 = "0".getBytes();
  -        }       
  -        while ((originalData[origLength - len3] == ws1[0] || 
originalData[origLength - len3] == ws2[0] || originalData[origLength - len3] == ws3[0])
  -               && numZeroes < 512) {
  -            len3++;
  -            if (originalData[origLength - len3] == ws3[0])
  -                numZeroes++;
  -        }
  -        // System.out.println("Length3="+len3);
  -    }
   
       // overload the base object method so we don't have to copy
       // byte arrays around so much
       protected int output(java.io.OutputStream stream)
               throws java.io.IOException {
  +        if (pfb == null) throw new NullPointerException("pfb must not be null at 
this point");
           int length = 0;
           String filterEntry = applyFilters();
  -        String preData = new String(this.number + " " + this.generation
  -                                    + " obj\n<< /Length "
  -                                    + (_data.size() + 1) + " " + filterEntry
  -                                    + " " + "/Length1 " + len1 + " /Length2 "
  -                                    + (origLength - len3 - len1)
  -                                    + " /Length3 " + len3 + " >>\n");
  +        String preData = this.number + " " + this.generation
  +                + " obj\n<< /Length " + pfb.getLength() + " " 
  +                + filterEntry  
  +                + " /Length1 " + pfb.getLength1()
  +                + " /Length2 " + pfb.getLength2()
  +                + " /Length3 " + pfb.getLength3() + " >>\n";
   
           byte[] p;
           try {
  @@ -136,11 +58,11 @@
           return length;
       }
   
  -    public void setData(byte[] data, int size) throws java.io.IOException {
  -        calcLengths(data);
  +    public void setData(PFBData pfb) throws java.io.IOException {
           _data.reset();
           // System.out.println("Writing " + size + " bytes of font data");
  -        _data.write(data, 0, size);
  +        this.pfb = pfb;
  +        pfb.outputAllParts(_data);
       }
   
   }
  
  
  

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

Reply via email to