//============================================================================ //Gios Pdf.NET - A library for exporting Pdf Documents in C# //Copyright (C) 2005 Paolo Gios - www.paologios.com // //This library is free software; you can redistribute it and/or //modify it under the terms of the GNU Lesser General Public //License as published by the Free Software Foundation; either //version 2.1 of the License, or (at your option) any later version. // //This library is distributed in the hope that it will be useful, //but WITHOUT ANY WARRANTY; without even the implied warranty of //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU //Lesser General Public License for more details. // //You should have received a copy of the GNU Lesser General Public //License along with this library; if not, write to the Free Software //Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA //============================================================================= using System; using System.Text; using System.Drawing; namespace HH.WMS.Utils.Gios.Pdf { /// /// a generic Rectangle for a PdfPage /// public class PdfRectangle : PdfObject { internal PdfArea rectangleArea; /// /// gets the area of the rectangle /// public PdfArea RectangleArea { get { return this.rectangleArea; } } internal Color BorderColor=Color.Black,FillingColor; internal bool filled; internal double strokeWidth; /// /// gets or sets the width of the stroke /// public double StrokeWidth { set { if (value<=0) throw new Exception("StrokeWidth must be greater than zero."); this.strokeWidth=value; } get { return this.strokeWidth; } } /// /// creates a new rectangle /// /// the area which will contains the rectangle /// public PdfRectangle(PdfDocument PdfDocument,PdfArea RectangleArea,Color BorderColor) { this.PdfDocument=PdfDocument; this.rectangleArea=RectangleArea; this.BorderColor=BorderColor; this.strokeWidth=1; } /// /// creates a new rectangle /// /// /// /// public PdfRectangle(PdfDocument PdfDocument,PdfArea RectangleArea,Color BorderColor,double BorderWidth) { this.PdfDocument=PdfDocument; if (BorderWidth<=0) throw new Exception("BorderWidth must be greater than zero."); this.rectangleArea=RectangleArea; this.BorderColor=BorderColor; this.strokeWidth=BorderWidth; } /// /// creates a new rectangle /// /// /// /// public PdfRectangle(PdfDocument PdfDocument,PdfArea RectangleArea,Color BorderColor,Color FillingColor) { this.PdfDocument=PdfDocument; this.rectangleArea=RectangleArea; this.BorderColor=BorderColor; this.FillingColor=FillingColor; this.filled=true; this.strokeWidth=1; } /// /// creates a new rectangle /// /// /// /// /// public PdfRectangle(PdfDocument PdfDocument,PdfArea RectangleArea,Color BorderColor,double BorderWidth,Color FillingColor) { this.PdfDocument=PdfDocument; if (BorderWidth<=0) throw new Exception("BorderWidth must be greater than zero."); this.rectangleArea=RectangleArea; this.BorderColor=BorderColor; this.FillingColor=FillingColor; this.filled=true; this.strokeWidth=BorderWidth; } /// /// fills the rectangle with a Color /// /// public void Fill(Color Color) { this.BorderColor=Color; this.FillingColor=Color; this.filled=true; } /// /// sets the color of rectangle's border /// /// public void Border(Color Color) { this.BorderColor=Color; } internal string ToColorAndWidthStream() { System.Text.StringBuilder sb=new StringBuilder(); sb.Append(Utility.ColorRGLine(this.BorderColor)); if (filled) sb.Append(Utility.ColorrgLine(this.FillingColor)); sb.Append(this.strokeWidth.ToString("0.##").Replace(",",".")+" "); sb.Append("w\n"); return sb.ToString(); } internal string ToRectangleStream() { System.Text.StringBuilder sb=new StringBuilder(); sb.Append(this.RectangleArea.PosX.ToString("0.##").Replace(",",".")); sb.Append(" "+(this.PdfDocument.PH-this.rectangleArea.PosY-this.RectangleArea.Height).ToString("0.##").Replace(",",".")+" "); sb.Append(this.RectangleArea.Width.ToString("0.##").Replace(",",".")); sb.Append(" "+this.RectangleArea.Height.ToString("0.##").Replace(",",".")+" re "); if (filled) sb.Append("B");else sb.Append("s"); sb.Append("\n"); return sb.ToString(); } internal string ToLineStream() { return this.ToColorAndWidthStream()+this.ToRectangleStream(); } internal override int StreamWrite(System.IO.Stream stream) { int num=this.id; string text=this.ToLineStream(); Byte[] part2; if (PdfDocument.FlateCompression) part2=Utility.Deflate(text); else part2=System.Text.ASCIIEncoding.ASCII.GetBytes(text); string s1=""; s1+=num.ToString()+" 0 obj\n"; s1+="<< /Lenght "+part2.Length; if (PdfDocument.FlateCompression) s1+=" /Filter /FlateDecode"; s1+=">>\n"; s1+="stream\n"; string s3="\nendstream\n"; s3+="endobj\n"; Byte[] part1=System.Text.ASCIIEncoding.ASCII.GetBytes(s1); Byte[] part3=System.Text.ASCIIEncoding.ASCII.GetBytes(s3); stream.Write(part1,0,part1.Length); stream.Write(part2,0,part2.Length); stream.Write(part3,0,part3.Length); return part1.Length+part2.Length+part3.Length; } } }