keiron      2002/07/19 00:16:21

  Modified:    src/org/apache/fop/pdf PDFDocument.java PDFFunction.java
                        PDFPattern.java PDFResources.java PDFShading.java
  Log:
  reuse old patterns and shadings to reduce file size
  
  Revision  Changes    Path
  1.47      +90 -8     xml-fop/src/org/apache/fop/pdf/PDFDocument.java
  
  Index: PDFDocument.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/pdf/PDFDocument.java,v
  retrieving revision 1.46
  retrieving revision 1.47
  diff -u -r1.46 -r1.47
  --- PDFDocument.java  18 Jul 2002 10:59:57 -0000      1.46
  +++ PDFDocument.java  19 Jul 2002 07:16:20 -0000      1.47
  @@ -139,6 +139,8 @@
   
       protected ArrayList gstates = new ArrayList();
       protected ArrayList functions = new ArrayList();
  +    protected ArrayList shadings = new ArrayList();
  +    protected ArrayList patterns = new ArrayList();
   
       /**
        * creates an empty PDF document <p>
  @@ -370,6 +372,32 @@
           return null;
       }
   
  +    private PDFShading findShading(PDFShading compare) {
  +        for(Iterator iter = shadings.iterator(); iter.hasNext(); ) {
  +            Object shad = iter.next();
  +            if(compare.equals(shad)) {
  +                return (PDFShading)shad;
  +            }
  +        }
  +        return null;
  +    }
  +
  +    /**
  +     * Find a previous pattern.
  +     * The problem with this is for tiling patterns the pattern
  +     * data stream is stored and may use up memory, usually this
  +     * would only be a small amount of data.
  +     */
  +    private PDFPattern findPattern(PDFPattern compare) {
  +        for(Iterator iter = patterns.iterator(); iter.hasNext(); ) {
  +            Object patt = iter.next();
  +            if(compare.equals(patt)) {
  +                return (PDFPattern)patt;
  +            }
  +        }
  +        return null;
  +    }
  +
       /**
        * Make a Type 3 Stitching function
        *
  @@ -488,7 +516,16 @@
                                               theColorSpace, theBackground,
                                               theBBox, theAntiAlias, theDomain,
                                               theMatrix, theFunction);
  -        this.objects.add(shading);
  +
  +        PDFShading oldshad = findShading(shading);
  +        if(oldshad == null) {
  +            shadings.add(shading);
  +            this.objects.add(shading);
  +        } else {
  +            this.objectcount--;
  +            this.shadingCount--;
  +            shading = oldshad;
  +        }
   
           // add this shading to resources
           if(res != null) {
  @@ -534,12 +571,22 @@
                                               theDomain, theFunction,
                                               theExtend);
   
  +        PDFShading oldshad = findShading(shading);
  +        if(oldshad == null) {
  +            shadings.add(shading);
  +            this.objects.add(shading);
  +        } else {
  +            this.objectcount--;
  +            this.shadingCount--;
  +            shading = oldshad;
  +        }
  +
           if(res != null) {
               res.getPDFResources().addShading(shading);
           } else {
               this.resources.addShading(shading);
           }
  -        this.objects.add(shading);
  +
           return (shading);
       }
   
  @@ -584,13 +631,22 @@
                                               theBitsPerFlag, theDecode,
                                               theFunction);
   
  +        PDFShading oldshad = findShading(shading);
  +        if(oldshad == null) {
  +            shadings.add(shading);
  +            this.objects.add(shading);
  +        } else {
  +            this.objectcount--;
  +            this.shadingCount--;
  +            shading = oldshad;
  +        }
  +
           if(res != null) {
               res.getPDFResources().addShading(shading);
           } else {
               this.resources.addShading(shading);
           }
   
  -        this.objects.add(shading);
           return (shading);
       }
   
  @@ -632,14 +688,22 @@
                                               theBitsPerComponent, theDecode,
                                               theVerticesPerRow, theFunction);
   
  +        PDFShading oldshad = findShading(shading);
  +        if(oldshad == null) {
  +            shadings.add(shading);
  +            this.objects.add(shading);
  +        } else {
  +            this.objectcount--;
  +            this.shadingCount--;
  +            shading = oldshad;
  +        }
  +
           if(res != null) {
               res.getPDFResources().addShading(shading);
           } else {
               this.resources.addShading(shading);
           }
   
  -        this.objects.add(shading);
  -
           return (shading);
       }
   
  @@ -671,12 +735,21 @@
                                               theMatrix, theXUID,
                                               thePatternDataStream);
   
  +        PDFPattern oldpatt = findPattern(pattern);
  +        if(oldpatt == null) {
  +            patterns.add(pattern);
  +            this.objects.add(pattern);
  +        } else {
  +            this.objectcount--;
  +            this.patternCount--;
  +            pattern = oldpatt;
  +        }
  +
           if(res != null) {
               res.getPDFResources().addPattern(pattern);
           } else {
               this.resources.addPattern(pattern);
           }
  -        this.objects.add(pattern);
   
           return (pattern);
       }
  @@ -699,12 +772,21 @@
                                               thePatternName, 2, theShading,
                                               theXUID, theExtGState, theMatrix);
   
  +        PDFPattern oldpatt = findPattern(pattern);
  +        if(oldpatt == null) {
  +            patterns.add(pattern);
  +            this.objects.add(pattern);
  +        } else {
  +            this.objectcount--;
  +            this.patternCount--;
  +            pattern = oldpatt;
  +        }
  +
           if(res != null) {
               res.getPDFResources().addPattern(pattern);
           } else {
               this.resources.addPattern(pattern);
           }
  -        this.objects.add(pattern);
   
           return (pattern);
       }
  
  
  
  1.10      +4 -1      xml-fop/src/org/apache/fop/pdf/PDFFunction.java
  
  Index: PDFFunction.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/pdf/PDFFunction.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- PDFFunction.java  18 Jul 2002 10:59:58 -0000      1.9
  +++ PDFFunction.java  19 Jul 2002 07:16:20 -0000      1.10
  @@ -671,6 +671,9 @@
           if(obj == null) {
               return false;
           }
  +        if(obj == this) {
  +            return true;
  +        }
           if(!(obj instanceof PDFFunction)) {
               return false;
           }
  
  
  
  1.14      +87 -2     xml-fop/src/org/apache/fop/pdf/PDFPattern.java
  
  Index: PDFPattern.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/pdf/PDFPattern.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- PDFPattern.java   1 Jul 2002 10:39:29 -0000       1.13
  +++ PDFPattern.java   19 Jul 2002 07:16:20 -0000      1.14
  @@ -94,7 +94,6 @@
        */
       protected StringBuffer patternDataStream = null;
   
  -
       /**
        * Create a tiling pattern (type 1).
        *
  @@ -307,5 +306,91 @@
       }
   
       public byte[] toPDF() { return null; }
  +
  +    public boolean equals(Object obj) {
  +        if(obj == null) {
  +            return false;
  +        }
  +        if(obj == this) {
  +            return true;
  +        }
  +        if(!(obj instanceof PDFPattern)) {
  +            return false;
  +        }
  +        PDFPattern patt = (PDFPattern)obj;
  +        if(patternType != patt.patternType) {
  +            return false;
  +        }
  +        if(paintType != patt.paintType) {
  +            return false;
  +        }
  +        if(tilingType != patt.tilingType) {
  +            return false;
  +        }
  +        if(xStep != patt.xStep) {
  +            return false;
  +        }
  +        if(yStep != patt.yStep) {
  +            return false;
  +        }
  +        if(bBox != null) {
  +            if(!bBox.equals(patt.bBox)) {
  +                return false;
  +            }
  +        } else if(patt.bBox != null) {
  +            return false;
  +        }
  +        if(bBox != null) {
  +            if(!bBox.equals(patt.bBox)) {
  +                return false;
  +            }
  +        } else if(patt.bBox != null) {
  +            return false;
  +        }
  +        if(xUID != null) {
  +            if(!xUID.equals(patt.xUID)) {
  +                return false;
  +            }
  +        } else if(patt.xUID != null) {
  +            return false;
  +        }
  +        if(extGState != null) {
  +            if(!extGState.equals(patt.extGState)) {
  +                return false;
  +            }
  +        } else if(patt.extGState != null) {
  +            return false;
  +        }
  +        if(matrix != null) {
  +            if(!matrix.equals(patt.matrix)) {
  +                return false;
  +            }
  +        } else if(patt.matrix != null) {
  +            return false;
  +        }
  +        if(resources != null) {
  +            if(!resources.equals(patt.resources)) {
  +                return false;
  +            }
  +        } else if(patt.resources != null) {
  +            return false;
  +        }
  +        if(shading != null) {
  +            if(!shading.equals(patt.shading)) {
  +                return false;
  +            }
  +        } else if(patt.shading != null) {
  +            return false;
  +        }
  +        if(patternDataStream != null) {
  +            if(!patternDataStream.equals(patt.patternDataStream)) {
  +                return false;
  +            }
  +        } else if(patt.patternDataStream != null) {
  +            return false;
  +        }
  +
  +        return true;
  +    }
   
   }
  
  
  
  1.15      +7 -15     xml-fop/src/org/apache/fop/pdf/PDFResources.java
  
  Index: PDFResources.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/pdf/PDFResources.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- PDFResources.java 4 Jul 2002 14:08:19 -0000       1.14
  +++ PDFResources.java 19 Jul 2002 07:16:21 -0000      1.15
  @@ -28,8 +28,8 @@
       protected HashMap fonts = new HashMap();
   
       protected HashSet xObjects = new HashSet();
  -    protected ArrayList patterns = new ArrayList();
  -    protected ArrayList shadings = new ArrayList();
  +    protected HashSet patterns = new HashSet();
  +    protected HashSet shadings = new HashSet();
       protected HashSet gstates = new HashSet();
   
       /**
  @@ -94,12 +94,8 @@
           if (!this.shadings.isEmpty()) {
               p.append("/Shading << ");
   
  -            for (int currentShadingNumber = 0;
  -                    currentShadingNumber < this.shadings.size();
  -                    currentShadingNumber++) {
  -                currentShading =
  -                    ((PDFShading)this.shadings.get(currentShadingNumber));
  -
  +            for (Iterator iter = shadings.iterator(); iter.hasNext(); ) {
  +                currentShading = (PDFShading)iter.next();
                   p.append("/" + currentShading.getName() + " "
                            + currentShading.referencePDF() + " ");    // \n ??????
               }
  @@ -113,12 +109,8 @@
           if (!this.patterns.isEmpty()) {
               p.append("/Pattern << ");
   
  -            for (int currentPatternNumber = 0;
  -                    currentPatternNumber < this.patterns.size();
  -                    currentPatternNumber++) {
  -                currentPattern =
  -                    ((PDFPattern)this.patterns.get(currentPatternNumber));
  -
  +            for (Iterator iter = patterns.iterator(); iter.hasNext(); ) {
  +                currentPattern = (PDFPattern)iter.next();
                   p.append("/" + currentPattern.getName() + " "
                            + currentPattern.referencePDF() + " ");
               }
  
  
  
  1.10      +95 -1     xml-fop/src/org/apache/fop/pdf/PDFShading.java
  
  Index: PDFShading.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/pdf/PDFShading.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- PDFShading.java   27 Jun 2002 11:45:54 -0000      1.9
  +++ PDFShading.java   19 Jul 2002 07:16:21 -0000      1.10
  @@ -505,4 +505,98 @@
           return (p.toString().getBytes());
       }
   
  +    public boolean equals(Object obj) {
  +        if(obj == null) {
  +            return false;
  +        }
  +        if(obj == this) {
  +            return true;
  +        }
  +        if(!(obj instanceof PDFShading)) {
  +            return false;
  +        }
  +        PDFShading shad = (PDFShading)obj;
  +        if(shadingType != shad.shadingType) {
  +            return false;
  +        }
  +        if(antiAlias != shad.antiAlias) {
  +            return false;
  +        }
  +        if(bitsPerCoordinate != shad.bitsPerCoordinate) {
  +            return false;
  +        }
  +        if(bitsPerFlag != shad.bitsPerFlag) {
  +            return false;
  +        }
  +        if(bitsPerComponent != shad.bitsPerComponent) {
  +            return false;
  +        }
  +        if(verticesPerRow != shad.verticesPerRow) {
  +            return false;
  +        }
  +        if(colorSpace != null) {
  +            if(!colorSpace.equals(shad.colorSpace)) {
  +                return false;
  +            }
  +        } else if(shad.colorSpace != null) {
  +            return false;
  +        }
  +        if(background != null) {
  +            if(!background.equals(shad.background)) {
  +                return false;
  +            }
  +        } else if(shad.background != null) {
  +            return false;
  +        }
  +        if(bBox != null) {
  +            if(!bBox.equals(shad.bBox)) {
  +                return false;
  +            }
  +        } else if(shad.bBox != null) {
  +            return false;
  +        }
  +        if(domain != null) {
  +            if(!domain.equals(shad.domain)) {
  +                return false;
  +            }
  +        } else if(shad.domain != null) {
  +            return false;
  +        }
  +        if(matrix != null) {
  +            if(!matrix.equals(shad.matrix)) {
  +                return false;
  +            }
  +        } else if(shad.matrix != null) {
  +            return false;
  +        }
  +        if(coords != null) {
  +            if(!coords.equals(shad.coords)) {
  +                return false;
  +            }
  +        } else if(shad.coords != null) {
  +            return false;
  +        }
  +        if(extend != null) {
  +            if(!extend.equals(shad.extend)) {
  +                return false;
  +            }
  +        } else if(shad.extend != null) {
  +            return false;
  +        }
  +        if(decode != null) {
  +            if(!decode.equals(shad.decode)) {
  +                return false;
  +            }
  +        } else if(shad.decode != null) {
  +            return false;
  +        }
  +        if(function != null) {
  +            if(!function.equals(shad.function)) {
  +                return false;
  +            }
  +        } else if(shad.function != null) {
  +            return false;
  +        }
  +        return true;
  +    }
   }
  
  
  

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

Reply via email to