//============================================================================ //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.Collections; using System.Text; using System.Drawing; namespace HH.WMS.Utils.Gios.Pdf { /// /// a generic page for a PdfDocument /// public class PdfPage : PdfObject { private string FontsLine { get { string s= "Font << "; foreach (PdfFont pf in this.PdfDocument.FontList) s+="/"+pf.Name+" "+pf.HeadR; s+=">>\n"; return s; } } private ArrayList Contents; internal ArrayList PagePdfObjects; internal string MediaBoxLine { get { return "/MediaBox [0 0 "+this.PdfDocument.PW.ToString("0.##").Replace(",",".") +" "+this.PdfDocument.PH.ToString("0.##").Replace(",",".")+"]\n"; } } internal string ContentsLine { get { string s="/Contents ["; foreach (PdfObject po in this.PagePdfObjects) { if (po.GetType()!=typeof(PdfImage)) s+=po.HeadR; /*if (po.GetType()==typeof(PdfRectangle)) s+=po.HeadR; if (po.GetType()==typeof(PdfCircle)) s+=po.HeadR; if (po.GetType()==typeof(PdfLine)) s+=po.HeadR; //if (po.GetType()==typeof(PdfGrid)) s+=po.HeadR; //if (po.GetType()==typeof(PdfTable)) s+=po.HeadR; if (po.GetType()==typeof(PdfTablePage)) s+=po.HeadR; if (po.GetType()==typeof(PdfTextArea)) s+=po.HeadR; if (po.GetType()==typeof(PdfImageContent)) s+=po.HeadR;*/ } s+="]\n"; return s; } } internal string XObjectLine { get { string s="/XObject <<"; foreach (PdfObject po in this.PagePdfObjects) { if (po.GetType()==typeof(PdfImage)) s+="/I"+po.ID+" "+po.HeadR; } s+=" >>\n"; return s; } } internal PdfPage() { Contents=new ArrayList(); PagePdfObjects=new ArrayList(); } /// /// adds a Pdf Element into this PdfPage. /// /// /// /// public void Add(PdfImage PdfImage,double posx,double posy) { this.PagePdfObjects.Add(PdfImage); this.PagePdfObjects.Add(new PdfImageContent(PdfDocument.GetNextId,"I"+PdfImage.ID,PdfImage.ID,PdfImage.Width,PdfImage.Height,posx,this.PdfDocument.PH-posy,PdfImage.bmp.HorizontalResolution)); } /// /// adds a Pdf Element into this PdfPage. /// /// /// The target X positioning of the picture. /// The target Y positioning of the picture. /// The target resolution of the picture. public void Add(PdfImage PdfImage,double posx,double posy,double DPI) { if (DPI<=0) throw new Exception("DPI must be greater than zero."); this.PagePdfObjects.Add(PdfImage); this.PagePdfObjects.Add(new PdfImageContent(PdfDocument.GetNextId,"I"+PdfImage.ID,PdfImage.ID,PdfImage.Width,PdfImage.Height,posx,this.PdfDocument.PH-posy,DPI)); } /// /// adds a Pdf Element into this PdfPage. /// /// public void Add(PdfRectangle PdfRectangle) { PdfRectangle.ID=this.PdfDocument.GetNextId; this.PagePdfObjects.Add(PdfRectangle); } /// /// adds a Pdf Element into this PdfPage. /// /// public void Add(PdfCircle PdfCircle) { PdfCircle.ID=this.PdfDocument.GetNextId; this.PagePdfObjects.Add(PdfCircle); } /// /// adds a Pdf Element into this PdfPage. /// /// public void Add(PdfLine PdfLine) { PdfLine.ID=this.PdfDocument.GetNextId; this.PagePdfObjects.Add(PdfLine); } /// /// adds a Pdf Element into this PdfPage. /// /// public void Add(PdfTablePage PdfTablePage) { if (PdfTablePage!=null) { PdfTablePage.ID=this.PdfDocument.GetNextId; this.PagePdfObjects.Add(PdfTablePage); } } /// /// adds a Pdf Element into this PdfPage. /// /// public void Add(PdfTextArea PdfTextArea) { PdfTextArea.ID=this.PdfDocument.GetNextId; if (!this.PdfDocument.FontList.Contains(PdfTextArea.Font.Name)) this.PdfDocument.AddFont(PdfTextArea.Font); this.PagePdfObjects.Add(PdfTextArea); } internal override int StreamWrite(System.IO.Stream stream) { string s=""; s+=this.HeadObj; s+="<< /Type /Page\n/"; s+="Parent "+PdfDocument.PdfRoot.HeadR+"\n"; s+=this.MediaBoxLine; s+="/Resources\n"; s+="<<\n/"; s+=this.FontsLine; s+="/ProcSet [/PDF/ImageC/ImageI/ImageB/Text]\n"; s+=this.XObjectLine; s+=">>\n"; s+=this.ContentsLine; s+=" >>\n"; s+="endobj\n"; Byte[] b=ASCIIEncoding.ASCII.GetBytes(s); stream.Write(b,0,b.Length); return b.Length; } /// /// creates a copy of this page in order to use it as a template /// /// public PdfPage CreateCopy() { PdfPage clone=new PdfPage(); clone.PdfDocument=this.PdfDocument; foreach (PdfObject o in this.PagePdfObjects) clone.PagePdfObjects.Add(o); return clone; } /// /// save this page to the document and discard any further change /// public void SaveToDocument () { /*if (!PdfDocument.Registered) this.Add(new PdfTextArea( new System.Drawing.Font("Courier New",38,System.Drawing.FontStyle.Bold) ,System.Drawing.Color.Red ,new PdfArea(0,0,PdfDocument.PageWidth,PdfDocument.PageHeight) ,ContentAlignment.MiddleCenter,"This is a Demo Library, please register!\nsee http://www.gios-tech.com")); */ this.id=this.PdfDocument.GetNextId; this.PdfDocument.AddPdfObject(this); foreach (PdfObject o2 in this.PagePdfObjects) { this.PdfDocument.AddPdfObject(o2); } } } }