You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by ke...@locus.apache.org on 2000/11/10 01:53:42 UTC

cvs commit: xml-fop/src/org/apache/fop/pdf PDFPattern.java

keiron      00/11/09 16:53:42

  Modified:    src/org/apache/fop/pdf PDFPattern.java
  Log:
  adds spaces between matrix and bbox coords
  
  Revision  Changes    Path
  1.5       +363 -360  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.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- PDFPattern.java	2000/05/15 13:00:19	1.4
  +++ PDFPattern.java	2000/11/10 00:53:42	1.5
  @@ -1,360 +1,363 @@
  -/*-- $Id: PDFPattern.java,v 1.4 2000/05/15 13:00:19 gears Exp $ --
  -
  - ============================================================================
  -						 The Apache Software License, Version 1.1
  - ============================================================================
  -
  -	 Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
  -
  - Redistribution and use in source and binary forms, with or without modifica-
  - tion, are permitted provided that the following conditions are met:
  -
  - 1. Redistributions of	source code must	retain the above copyright  notice,
  -	 this list of conditions and the following disclaimer.
  -
  - 2. Redistributions in binary form must reproduce the above copyright notice,
  -	 this list of conditions and the following disclaimer in the documentation
  -	 and/or other materials provided with the distribution.
  -
  - 3. The end-user documentation included with the redistribution, if any, must
  -	 include  the following  acknowledgment:	"This product includes	software
  -	 developed	by the  Apache Software Foundation	(http://www.apache.org/)."
  -	 Alternately, this  acknowledgment may  appear in the software itself,	if
  -	 and wherever such third-party acknowledgments normally appear.
  -
  - 4. The names "Fop" and  "Apache Software Foundation"  must not be used to
  -	 endorse  or promote  products derived  from this	software without	prior
  -	 written permission. For written permission, please contact
  -	 apache@apache.org.
  -
  - 5. Products  derived from this software may not  be called "Apache", nor may
  -	 "Apache" appear	in their name,  without prior written permission  of the
  -	 Apache Software Foundation.
  -
  - THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  - FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.	IN NO  EVENT SHALL  THE
  - APACHE SOFTWARE	FOUNDATION	OR ITS CONTRIBUTORS	BE LIABLE FOR	ANY DIRECT,
  - INDIRECT, INCIDENTAL, SPECIAL,	EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
  - DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
  - OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
  - ANY	THEORY OF LIABILITY,  WHETHER  IN CONTRACT,	STRICT LIABILITY,  OR TORT
  - (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN	ANY WAY OUT OF THE  USE OF
  - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  -
  - This software  consists of voluntary contributions made  by many individuals
  - on  behalf of the Apache Software	Foundation and was  originally created by
  - James Tauber <jt...@jtauber.com>. For more  information on the Apache
  - Software Foundation, please see <http://www.apache.org/>.
  -
  - */
  -
  -package org.apache.fop.pdf;
  -
  -//Java...
  -import java.util.Vector;
  -
  -//FOP...
  -import org.apache.fop.datatypes.ColorSpace;
  -
  -/**
  - * class representing a PDF Function.
  - *
  - * PDF Functions represent parameterized mathematical formulas and sampled representations with
  - * arbitrary resolution. Functions are used in two areas: device-dependent
  - * rasterization information for halftoning and transfer
  - * functions, and color specification for smooth shading (a PDF 1.3 feature).
  - *
  - * All PDF Functions have a FunctionType (0,2,3, or 4), a Domain, and a Range.
  - */
  -public class PDFPattern extends PDFPathPaint {
  -	private PDFNumber pdfNumber = new PDFNumber();
  -	
  -	/**
  -	 * The resources associated with this pattern
  -	 */
  -	//Guts common to all function types
  -	
  -	protected PDFResources resources = null;
  -
  -	/**
  -	 * Either one (1) for tiling, or two (2) for shading.
  -	 */
  -	protected int patternType = 2; //Default
  -
  -	/**
  -	 * The name of the pattern such as "Pa1" or "Pattern1"
  -	 */
  -	protected String patternName = null;
  -
  -	/**
  -	 * 1 for colored pattern, 2 for uncolored
  -	 */
  -	protected int paintType = 2;
  -
  -	/**
  -	 * 1 for constant spacing, 2 for no distortion, and 3 for fast rendering
  -	 */
  -	protected int tilingType = 1;
  -
  -	/**
  -	 * Vector of Doubles representing the Bounding box rectangle
  -	 */
  -	protected Vector bBox = null;
  -
  -	/**
  -	 * Horizontal spacing
  -	 */
  -	protected double xStep = -1;
  -
  -	/**
  -	 * Vertical spacing
  -	 */
  -	protected double yStep = -1;
  -
  -	/**
  -	 * The Shading object comprising the Type 2 pattern
  -	 */
  -	protected PDFShading shading=null;
  -
  -	/**
  -	 * Vector of Integers represetning the Extended unique Identifier
  -	 */
  -	protected Vector xUID=null;
  -
  -	/**
  -	 * String representing the extended Graphics state.
  -	 * Probably will never be used like this.
  -	 */
  -	protected StringBuffer extGState = null; //eventually, need a PDFExtGSState object... but not now.
  -
  -	/**
  -	 * Vector of Doubles representing the Transformation matrix.
  -	 */
  -	protected Vector matrix=null;
  -
  -	/**
  -	 * The stream of a pattern
  -	 */
  -	protected StringBuffer patternDataStream = null;
  -	
  -	
  -	/**
  -	 * Create a tiling pattern (type 1).
  -	 * 
  -	 * @param theNumber The object number of this PDF Object
  -	 * @param thePatternName The name of the pattern such as "Pa1" or "Pattern1"
  -	 * @param theResources the resources associated with this pattern
  -	 * @param thePatternType the type of pattern, which is 1 for tiling. 
  -	 * @param thePaintType 1 or 2, colored or uncolored.
  -	 * @param theTilingType 1, 2, or 3, constant spacing, no distortion, or faster tiling
  -	 * @param theBBox Vector of Doubles: The pattern cell bounding box
  -	 * @param theXStep horizontal spacing
  -	 * @param theYStep vertical spacing
  -	 * @param theMatrix Optional Vector of Doubles transformation matrix
  -	 * @param theXUID Optional vector of Integers that uniquely identify the pattern
  -	 * @param thePatternDataStream The stream of pattern data to be tiled.
  -	 */
  -	public PDFPattern(int theNumber, String thePatternName,
  -			PDFResources theResources, int thePatternType, //1
  -			int thePaintType, int theTilingType,
  -			Vector theBBox, double theXStep, double theYStep,
  -			Vector theMatrix, Vector theXUID, StringBuffer thePatternDataStream)
  -	{
  -		super(theNumber);
  -		this.patternName = thePatternName;
  -
  -		this.resources = theResources;
  -		//This next parameter is implicit to all constructors, and is
  -		//not directly passed.
  -		
  -		this.patternType = 1; //thePatternType;
  -		this.paintType = thePaintType;
  -		this.tilingType = theTilingType;
  -		this.bBox = theBBox;
  -		this.xStep = theXStep;
  -		this.yStep = theYStep;
  -		this.matrix = theMatrix;
  -		this.xUID = theXUID;
  -		this.patternDataStream = thePatternDataStream;
  -	}
  -
  -	/**
  -	 * Create a type 2 pattern (smooth shading)
  -	 * 
  -	 * @param theNumber the object number of this PDF object
  -	 * @param thePatternName the name of the pattern
  -	 * @param thePatternType the type of the pattern, which is 2, smooth shading
  -	 * @param theShading the PDF Shading object that comprises this pattern
  -	 * @param theXUID optional:the extended unique Identifier if used.
  -	 * @param theExtGState optional: the extended graphics state, if used.
  -	 * @param theMatrix Optional:Vector of Doubles that specify the matrix.
  -	 */
  -	public PDFPattern(int theNumber, String thePatternName,
  -		int thePatternType, PDFShading theShading, Vector theXUID,
  -		StringBuffer theExtGState,Vector theMatrix)
  -	{
  -		super(theNumber);
  -	
  -		this.patternName = thePatternName;
  -		
  -		this.patternType = 2; //thePatternType;
  -		this.shading = theShading;
  -		this.xUID = theXUID;
  -		//this isn't really implemented, so it should always be null.
  -		//I just don't want to have to add a new parameter once it is implemented.
  -		this.extGState = theExtGState; // always null
  -		this.matrix = theMatrix;
  -	}
  -	
  -	/**
  -	 * Get the name of the pattern
  -	 * 
  -	 * @return String representing the name of the pattern.
  -	 */
  -	public String getName()
  -	{
  -		return (this.patternName);
  -	}
  -	
  -	public String getColorSpaceOut(boolean fillNotStroke)
  -	{
  -		if(fillNotStroke)
  -		{ //fill but no stroke
  -			return("/Pattern cs /"+this.getName()+" scn \n");
  -		}
  -		else
  -		{ //stroke (or border)
  -			return("/Pattern CS /"+this.getName()+" SCN \n");
  -		}
  -	}
  - 
  -	
  -	 /**
  -	  * represent as PDF. Whatever the FunctionType is, the correct
  -	  * representation spits out. The sets of required and optional
  -	  * attributes are different for each type, but if a required
  -	  * attribute's object was constructed as null, then no error
  -	  * is raised. Instead, the malformed PDF that was requested
  -	  * by the construction is dutifully output.
  -	  * This policy should be reviewed.
  -	  *
  -	  * @return the PDF string.
  -	  */
  -	public String toPDF() {
  -
  -
  -		int vectorSize=0;
  -		int tempInt=0;
  -		StringBuffer p = new StringBuffer();
  -		p.append(this.number + " " +this.generation
  -			+ " obj\n<< \n/Type /Pattern \n");
  -
  -		if(this.resources != null)
  -		{
  -			p.append("/Resources "+this.resources.referencePDF()+" \n");
  -		}
  -
  -		p.append("/PatternType "+this.patternType+" \n");
  -
  -		if(this.patternType == 1)
  -		{
  -			p.append("/PaintType "+this.paintType+" \n");
  -			p.append("/TilingType "+this.tilingType+" \n");
  -			
  -			if(this.bBox != null)
  -			{
  -				vectorSize = this.bBox.size();
  -				p.append("/BBox [ ");
  -				for (tempInt =0; tempInt < vectorSize; tempInt++)
  -				{
  -					p.append(
  -					pdfNumber.doubleOut((Double)this.bBox.elementAt(tempInt)));				
  -				}
  -				p.append("] \n");
  -			}
  -			p.append("/XStep "+pdfNumber.doubleOut(new Double(this.xStep))+" \n");
  -			p.append("/YStep "+pdfNumber.doubleOut(new Double(this.yStep))+" \n");
  -			
  -			if(this.matrix != null)
  -			{
  -				vectorSize = this.matrix.size();
  -				p.append("/Matrix [ ");
  -				for (tempInt =0; tempInt < vectorSize; tempInt++)
  -				{
  -					p.append(pdfNumber.doubleOut(
  -						(Double)this.matrix.elementAt(tempInt)));				
  -				}
  -				p.append("] \n");
  -			}
  -			
  -			if(this.xUID != null)
  -			{
  -				vectorSize = this.xUID.size();
  -				p.append("/XUID [ ");
  -				for (tempInt =0; tempInt < vectorSize; tempInt++)
  -				{
  -					p.append(((Integer)this.xUID.elementAt(tempInt))+" ");				
  -				}
  -				p.append("] \n");
  -			}
  -			//don't forget the length of the stream.
  -			if(this.patternDataStream != null)
  -			{
  -				p.append("/Length "+(this.patternDataStream.length()+1)
  -					+ " \n");
  -			}
  -				
  -		}
  -		else //if (this.patternType ==2)
  -		{//Smooth Shading...
  -			if(this.shading != null)
  -			{
  -				p.append("/Shading "+this.shading.referencePDF()+" \n");
  -			}
  -			
  -			if(this.xUID != null)
  -			{
  -				vectorSize = this.xUID.size();
  -				p.append("/XUID [ ");
  -				for (tempInt =0; tempInt < vectorSize; tempInt++)
  -				{
  -					p.append(((Integer)this.xUID.elementAt(tempInt))+" ");
  -				}
  -				p.append("] \n");
  -			}			
  -			
  -			if(this.extGState != null)
  -			{//will probably have to change this if it's used.
  -				p.append("/ExtGState "+this.extGState+" \n");
  -			}
  -			
  -			if(this.matrix != null)
  -			{
  -				vectorSize = this.matrix.size();
  -				p.append("/Matrix [ ");
  -				for (tempInt =0; tempInt < vectorSize; tempInt++)
  -				{
  -					p.append(pdfNumber.doubleOut(
  -					(Double)this.matrix.elementAt(tempInt)));				
  -				}
  -				p.append("] \n");
  -			}
  -		}//end of if patterntype =1...else 2.
  -
  -		p.append(">> \n");
  -
  -		//stream representing the function
  -		if(this.patternDataStream != null)
  -		{
  -			p.append("stream\n"+this.patternDataStream +"\nendstream\n");
  -		}
  -
  -		p.append("endobj\n");
  -
  -		
  -
  -		return (p.toString());
  -
  -	}
  -}
  +/*-- $Id: PDFPattern.java,v 1.5 2000/11/10 00:53:42 keiron Exp $ --
  +
  + ============================================================================
  +						 The Apache Software License, Version 1.1
  + ============================================================================
  +
  +	 Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
  +
  + Redistribution and use in source and binary forms, with or without modifica-
  + tion, are permitted provided that the following conditions are met:
  +
  + 1. Redistributions of	source code must	retain the above copyright  notice,
  +	 this list of conditions and the following disclaimer.
  +
  + 2. Redistributions in binary form must reproduce the above copyright notice,
  +	 this list of conditions and the following disclaimer in the documentation
  +	 and/or other materials provided with the distribution.
  +
  + 3. The end-user documentation included with the redistribution, if any, must
  +	 include  the following  acknowledgment:	"This product includes	software
  +	 developed	by the  Apache Software Foundation	(http://www.apache.org/)."
  +	 Alternately, this  acknowledgment may  appear in the software itself,	if
  +	 and wherever such third-party acknowledgments normally appear.
  +
  + 4. The names "Fop" and  "Apache Software Foundation"  must not be used to
  +	 endorse  or promote  products derived  from this	software without	prior
  +	 written permission. For written permission, please contact
  +	 apache@apache.org.
  +
  + 5. Products  derived from this software may not  be called "Apache", nor may
  +	 "Apache" appear	in their name,  without prior written permission  of the
  +	 Apache Software Foundation.
  +
  + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  + FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.	IN NO  EVENT SHALL  THE
  + APACHE SOFTWARE	FOUNDATION	OR ITS CONTRIBUTORS	BE LIABLE FOR	ANY DIRECT,
  + INDIRECT, INCIDENTAL, SPECIAL,	EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
  + DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
  + OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
  + ANY	THEORY OF LIABILITY,  WHETHER  IN CONTRACT,	STRICT LIABILITY,  OR TORT
  + (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN	ANY WAY OUT OF THE  USE OF
  + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  +
  + This software  consists of voluntary contributions made  by many individuals
  + on  behalf of the Apache Software	Foundation and was  originally created by
  + James Tauber <jt...@jtauber.com>. For more  information on the Apache
  + Software Foundation, please see <http://www.apache.org/>.
  +
  + */
  +
  +package org.apache.fop.pdf;
  +
  +//Java...
  +import java.util.Vector;
  +
  +//FOP...
  +import org.apache.fop.datatypes.ColorSpace;
  +
  +/**
  + * class representing a PDF Function.
  + *
  + * PDF Functions represent parameterized mathematical formulas and sampled representations with
  + * arbitrary resolution. Functions are used in two areas: device-dependent
  + * rasterization information for halftoning and transfer
  + * functions, and color specification for smooth shading (a PDF 1.3 feature).
  + *
  + * All PDF Functions have a FunctionType (0,2,3, or 4), a Domain, and a Range.
  + */
  +public class PDFPattern extends PDFPathPaint {
  +	private PDFNumber pdfNumber = new PDFNumber();
  +	
  +	/**
  +	 * The resources associated with this pattern
  +	 */
  +	//Guts common to all function types
  +	
  +	protected PDFResources resources = null;
  +
  +	/**
  +	 * Either one (1) for tiling, or two (2) for shading.
  +	 */
  +	protected int patternType = 2; //Default
  +
  +	/**
  +	 * The name of the pattern such as "Pa1" or "Pattern1"
  +	 */
  +	protected String patternName = null;
  +
  +	/**
  +	 * 1 for colored pattern, 2 for uncolored
  +	 */
  +	protected int paintType = 2;
  +
  +	/**
  +	 * 1 for constant spacing, 2 for no distortion, and 3 for fast rendering
  +	 */
  +	protected int tilingType = 1;
  +
  +	/**
  +	 * Vector of Doubles representing the Bounding box rectangle
  +	 */
  +	protected Vector bBox = null;
  +
  +	/**
  +	 * Horizontal spacing
  +	 */
  +	protected double xStep = -1;
  +
  +	/**
  +	 * Vertical spacing
  +	 */
  +	protected double yStep = -1;
  +
  +	/**
  +	 * The Shading object comprising the Type 2 pattern
  +	 */
  +	protected PDFShading shading=null;
  +
  +	/**
  +	 * Vector of Integers represetning the Extended unique Identifier
  +	 */
  +	protected Vector xUID=null;
  +
  +	/**
  +	 * String representing the extended Graphics state.
  +	 * Probably will never be used like this.
  +	 */
  +	protected StringBuffer extGState = null; //eventually, need a PDFExtGSState object... but not now.
  +
  +	/**
  +	 * Vector of Doubles representing the Transformation matrix.
  +	 */
  +	protected Vector matrix=null;
  +
  +	/**
  +	 * The stream of a pattern
  +	 */
  +	protected StringBuffer patternDataStream = null;
  +	
  +	
  +	/**
  +	 * Create a tiling pattern (type 1).
  +	 * 
  +	 * @param theNumber The object number of this PDF Object
  +	 * @param thePatternName The name of the pattern such as "Pa1" or "Pattern1"
  +	 * @param theResources the resources associated with this pattern
  +	 * @param thePatternType the type of pattern, which is 1 for tiling. 
  +	 * @param thePaintType 1 or 2, colored or uncolored.
  +	 * @param theTilingType 1, 2, or 3, constant spacing, no distortion, or faster tiling
  +	 * @param theBBox Vector of Doubles: The pattern cell bounding box
  +	 * @param theXStep horizontal spacing
  +	 * @param theYStep vertical spacing
  +	 * @param theMatrix Optional Vector of Doubles transformation matrix
  +	 * @param theXUID Optional vector of Integers that uniquely identify the pattern
  +	 * @param thePatternDataStream The stream of pattern data to be tiled.
  +	 */
  +	public PDFPattern(int theNumber, String thePatternName,
  +			PDFResources theResources, int thePatternType, //1
  +			int thePaintType, int theTilingType,
  +			Vector theBBox, double theXStep, double theYStep,
  +			Vector theMatrix, Vector theXUID, StringBuffer thePatternDataStream)
  +	{
  +		super(theNumber);
  +		this.patternName = thePatternName;
  +
  +		this.resources = theResources;
  +		//This next parameter is implicit to all constructors, and is
  +		//not directly passed.
  +		
  +		this.patternType = 1; //thePatternType;
  +		this.paintType = thePaintType;
  +		this.tilingType = theTilingType;
  +		this.bBox = theBBox;
  +		this.xStep = theXStep;
  +		this.yStep = theYStep;
  +		this.matrix = theMatrix;
  +		this.xUID = theXUID;
  +		this.patternDataStream = thePatternDataStream;
  +	}
  +
  +	/**
  +	 * Create a type 2 pattern (smooth shading)
  +	 * 
  +	 * @param theNumber the object number of this PDF object
  +	 * @param thePatternName the name of the pattern
  +	 * @param thePatternType the type of the pattern, which is 2, smooth shading
  +	 * @param theShading the PDF Shading object that comprises this pattern
  +	 * @param theXUID optional:the extended unique Identifier if used.
  +	 * @param theExtGState optional: the extended graphics state, if used.
  +	 * @param theMatrix Optional:Vector of Doubles that specify the matrix.
  +	 */
  +	public PDFPattern(int theNumber, String thePatternName,
  +		int thePatternType, PDFShading theShading, Vector theXUID,
  +		StringBuffer theExtGState,Vector theMatrix)
  +	{
  +		super(theNumber);
  +	
  +		this.patternName = thePatternName;
  +		
  +		this.patternType = 2; //thePatternType;
  +		this.shading = theShading;
  +		this.xUID = theXUID;
  +		//this isn't really implemented, so it should always be null.
  +		//I just don't want to have to add a new parameter once it is implemented.
  +		this.extGState = theExtGState; // always null
  +		this.matrix = theMatrix;
  +	}
  +	
  +	/**
  +	 * Get the name of the pattern
  +	 * 
  +	 * @return String representing the name of the pattern.
  +	 */
  +	public String getName()
  +	{
  +		return (this.patternName);
  +	}
  +	
  +	public String getColorSpaceOut(boolean fillNotStroke)
  +	{
  +		if(fillNotStroke)
  +		{ //fill but no stroke
  +			return("/Pattern cs /"+this.getName()+" scn \n");
  +		}
  +		else
  +		{ //stroke (or border)
  +			return("/Pattern CS /"+this.getName()+" SCN \n");
  +		}
  +	}
  + 
  +	
  +	 /**
  +	  * represent as PDF. Whatever the FunctionType is, the correct
  +	  * representation spits out. The sets of required and optional
  +	  * attributes are different for each type, but if a required
  +	  * attribute's object was constructed as null, then no error
  +	  * is raised. Instead, the malformed PDF that was requested
  +	  * by the construction is dutifully output.
  +	  * This policy should be reviewed.
  +	  *
  +	  * @return the PDF string.
  +	  */
  +	public String toPDF() {
  +
  +
  +		int vectorSize=0;
  +		int tempInt=0;
  +		StringBuffer p = new StringBuffer();
  +		p.append(this.number + " " +this.generation
  +			+ " obj\n<< \n/Type /Pattern \n");
  +
  +		if(this.resources != null)
  +		{
  +			p.append("/Resources "+this.resources.referencePDF()+" \n");
  +		}
  +
  +		p.append("/PatternType "+this.patternType+" \n");
  +
  +		if(this.patternType == 1)
  +		{
  +			p.append("/PaintType "+this.paintType+" \n");
  +			p.append("/TilingType "+this.tilingType+" \n");
  +			
  +			if(this.bBox != null)
  +			{
  +				vectorSize = this.bBox.size();
  +				p.append("/BBox [ ");
  +				for (tempInt =0; tempInt < vectorSize; tempInt++)
  +				{
  +					p.append(
  +					pdfNumber.doubleOut((Double)this.bBox.elementAt(tempInt)));				
  +					p.append(" ");
  +				}
  +				p.append("] \n");
  +			}
  +			p.append("/XStep "+pdfNumber.doubleOut(new Double(this.xStep))+" \n");
  +			p.append("/YStep "+pdfNumber.doubleOut(new Double(this.yStep))+" \n");
  +			
  +			if(this.matrix != null)
  +			{
  +				vectorSize = this.matrix.size();
  +				p.append("/Matrix [ ");
  +				for (tempInt =0; tempInt < vectorSize; tempInt++)
  +				{
  +					p.append(pdfNumber.doubleOut(
  +						(Double)this.matrix.elementAt(tempInt)));
  +					p.append(" ");
  +				}
  +				p.append("] \n");
  +			}
  +			
  +			if(this.xUID != null)
  +			{
  +				vectorSize = this.xUID.size();
  +				p.append("/XUID [ ");
  +				for (tempInt =0; tempInt < vectorSize; tempInt++)
  +				{
  +					p.append(((Integer)this.xUID.elementAt(tempInt))+" ");				
  +				}
  +				p.append("] \n");
  +			}
  +			//don't forget the length of the stream.
  +			if(this.patternDataStream != null)
  +			{
  +				p.append("/Length "+(this.patternDataStream.length()+1)
  +					+ " \n");
  +			}
  +				
  +		}
  +		else //if (this.patternType ==2)
  +		{//Smooth Shading...
  +			if(this.shading != null)
  +			{
  +				p.append("/Shading "+this.shading.referencePDF()+" \n");
  +			}
  +			
  +			if(this.xUID != null)
  +			{
  +				vectorSize = this.xUID.size();
  +				p.append("/XUID [ ");
  +				for (tempInt =0; tempInt < vectorSize; tempInt++)
  +				{
  +					p.append(((Integer)this.xUID.elementAt(tempInt))+" ");
  +				}
  +				p.append("] \n");
  +			}			
  +			
  +			if(this.extGState != null)
  +			{//will probably have to change this if it's used.
  +				p.append("/ExtGState "+this.extGState+" \n");
  +			}
  +			
  +			if(this.matrix != null)
  +			{
  +				vectorSize = this.matrix.size();
  +				p.append("/Matrix [ ");
  +				for (tempInt =0; tempInt < vectorSize; tempInt++)
  +				{
  +					p.append(pdfNumber.doubleOut(
  +					(Double)this.matrix.elementAt(tempInt)));
  +					p.append(" ");
  +				}
  +				p.append("] \n");
  +			}
  +		}//end of if patterntype =1...else 2.
  +
  +		p.append(">> \n");
  +
  +		//stream representing the function
  +		if(this.patternDataStream != null)
  +		{
  +			p.append("stream\n"+this.patternDataStream +"\nendstream\n");
  +		}
  +
  +		p.append("endobj\n");
  +
  +		
  +
  +		return (p.toString());
  +
  +	}
  +}