189 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			189 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Xml;
 | 
						|
using System.Drawing;
 | 
						|
using System.Windows.Forms;
 | 
						|
//using C1.C1Pdf;
 | 
						|
 | 
						|
namespace fmtxml
 | 
						|
{
 | 
						|
	/// <summary>
 | 
						|
	/// Summary description for XmlToPdf.
 | 
						|
	/// </summary>
 | 
						|
	public class XmlToPdf
 | 
						|
	{
 | 
						|
		private float ConvertToPoints=72f;
 | 
						|
		private XmlDocument xmlDoc;
 | 
						|
		private string FileName;
 | 
						|
		private string FilePath;
 | 
						|
		//private C1.C1Pdf.C1PdfDocument _c1pdf;
 | 
						|
		
 | 
						|
		private string [] FontChoice = 
 | 
						|
		   {"Times New Roman",
 | 
						|
			"VESymb XXXXXX",
 | 
						|
			"VolianDraw XXXXXX",
 | 
						|
			"Prestige Elite Tall",
 | 
						|
			"Courier New",
 | 
						|
			"Arial",
 | 
						|
			"Letter Gothic",
 | 
						|
			"Times New Roman",
 | 
						|
			"Letter Gothic Tall",
 | 
						|
			"Letter Gothic Tall",
 | 
						|
			"Gothic Ultra",
 | 
						|
			"VolianScript"
 | 
						|
		};
 | 
						|
		private float LeftMargin;				//todo: define in page info
 | 
						|
		private float VerticalOffset;			//todo: define in page info
 | 
						|
		private bool Portrait;					//todo: define in page info
 | 
						|
 | 
						|
		public XmlToPdf(string path, string fname)
 | 
						|
		{
 | 
						|
			LeftMargin=0.5f * ConvertToPoints;	// KBR: TODO
 | 
						|
			VerticalOffset=0.5f * ConvertToPoints;	// KBR: TODO
 | 
						|
			Portrait = true; // KBR: TODO
 | 
						|
			FileName = fname;
 | 
						|
			FilePath = path;
 | 
						|
			xmlDoc = new XmlDocument();
 | 
						|
			XmlTextReader reader = new XmlTextReader(FilePath+"\\"+FileName);
 | 
						|
			xmlDoc.Load(reader);
 | 
						|
			reader.Close();
 | 
						|
			try
 | 
						|
			{
 | 
						|
				GeneratePDFForFile();
 | 
						|
			}
 | 
						|
			catch (Exception e)
 | 
						|
			{
 | 
						|
				MessageBox.Show("Error processing: " + fname, e.Message);
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		private void GeneratePDFForFile()
 | 
						|
		{
 | 
						|
			//_c1pdf = new C1.C1Pdf.C1PdfDocument();
 | 
						|
			//string rootname = FileName.Substring(0,FileName.Length-4);
 | 
						|
			//// create a pdf file & for each macro (i.e. macro element in xml tree), 
 | 
						|
			//// put it into the pdf file.
 | 
						|
			//XmlElement top = (XmlElement) xmlDoc.SelectSingleNode(rootname + "_GENMAC");
 | 
						|
			//XmlNodeList xmlNds = top.SelectNodes("MACRO");
 | 
						|
			//foreach (XmlNode nd in xmlNds)
 | 
						|
			//{	
 | 
						|
			//    XmlNode name = nd.SelectSingleNode("NAME");
 | 
						|
			//    XmlElement elm = (XmlElement) name;
 | 
						|
			//    XmlNode definition = nd.SelectSingleNode("DEFINITION");
 | 
						|
			//    MacroGeneratePDF(definition);
 | 
						|
			//    _c1pdf.NewPage();
 | 
						|
			//}
 | 
						|
			//string outname = "E:\\ve-proms.net\\genmac.xml\\testpdf\\" + rootname + ".pdf";
 | 
						|
			//_c1pdf.Save(outname);
 | 
						|
		}
 | 
						|
 | 
						|
		private void MacroGeneratePDF(XmlNode definition)
 | 
						|
		{
 | 
						|
			XmlElement elm = (XmlElement) definition;
 | 
						|
			string def = elm.InnerText;
 | 
						|
			int lindx = 0;
 | 
						|
			int indx = def.IndexOf(";");
 | 
						|
			while (indx>-1)
 | 
						|
			{
 | 
						|
				string command = def.Substring(lindx,indx-lindx).Trim();
 | 
						|
				DoPDF(command);
 | 
						|
				lindx = indx+1;
 | 
						|
				indx = def.IndexOf(";",lindx);
 | 
						|
			}
 | 
						|
			
 | 
						|
		}
 | 
						|
 | 
						|
		private void DoPDF(string cmdline)
 | 
						|
		{
 | 
						|
			string cmd = cmdline.Substring(0,cmdline.IndexOf(" "));
 | 
						|
			int stx, sty, ex, ey = 0;
 | 
						|
			float fstx, fsty, fex, fey = 0;
 | 
						|
			int lw=0;
 | 
						|
			string restOfIt=null;
 | 
						|
			string [] parts;
 | 
						|
 | 
						|
			Pen pn = null;
 | 
						|
			switch (cmd)
 | 
						|
			{
 | 
						|
				case "BOX":
 | 
						|
					restOfIt = cmdline.Substring(4,cmdline.Length-4);
 | 
						|
					parts = restOfIt.Split(" ".ToCharArray(),5);
 | 
						|
					fstx = (float) System.Convert.ToDouble(parts[0]);
 | 
						|
					fsty = (float) System.Convert.ToDouble(parts[1]);
 | 
						|
					fex = (float) System.Convert.ToDouble(parts[2]);
 | 
						|
					fey = (float) System.Convert.ToDouble(parts[3]);
 | 
						|
					float flw = (float) System.Convert.ToDouble(parts[4]);
 | 
						|
					pn = new Pen(Brushes.Black,flw);
 | 
						|
					//KBR: TODO - storing page stuff such as portland, vertical offset, tab, etc.
 | 
						|
					RectangleF rc = new RectangleF(LeftMargin+fstx,VerticalOffset+fsty,fex,fey);
 | 
						|
					//_c1pdf.DrawRectangle(pn,rc);
 | 
						|
					break;
 | 
						|
				case "LINE":   // command is LINE startx, starty, endx, endy, lnwidth
 | 
						|
					restOfIt = cmdline.Substring(5,cmdline.Length-5);
 | 
						|
					parts = restOfIt.Split(" ".ToCharArray(),5);
 | 
						|
					fstx = (float) System.Convert.ToDouble(parts[0]);
 | 
						|
					fsty = (float) System.Convert.ToDouble(parts[1]);
 | 
						|
					fex = (float) System.Convert.ToDouble(parts[2]);
 | 
						|
					fey = (float) System.Convert.ToDouble(parts[3]);
 | 
						|
					float flw1 = (float) System.Convert.ToDouble(parts[4]);
 | 
						|
//KBR: TODO - storing page stuff such as portland, vertical offset, tab, etc.
 | 
						|
//					startx = portland ? (vof + cy + adjy) : (cx + tab + adjx);
 | 
						|
//					starty = portland ? (tab - (cx + adjx)) : (cy + vof + adjy);
 | 
						|
					pn = new Pen(Brushes.Black,flw1);
 | 
						|
//KBR: TODO - move ablsolute?				
 | 
						|
//					if (MoveAbsolute)
 | 
						|
//						{tab = 0;vof = 0;}
 | 
						|
					//_c1pdf.DrawLine(pn, LeftMargin+fstx, VerticalOffset+fsty, LeftMargin+fstx+fex, VerticalOffset+fsty+fey);
 | 
						|
					break;
 | 
						|
				case "TEXT":
 | 
						|
					int quote = cmdline.IndexOf("\"");
 | 
						|
					string txt = cmdline.Substring(quote+1,cmdline.LastIndexOf("\"")-quote-1);
 | 
						|
					restOfIt = cmdline.Substring(5,quote-6);
 | 
						|
					parts = restOfIt.Split(" ".ToCharArray(),5);
 | 
						|
					fstx = (float) System.Convert.ToDouble(parts[0]);
 | 
						|
					fsty = (float) System.Convert.ToDouble(parts[1]);
 | 
						|
					int FontSize = System.Convert.ToInt32(parts[2]);
 | 
						|
					FontSize = FontSize/2;
 | 
						|
					int FontFamily = System.Convert.ToInt32(parts[3]);
 | 
						|
					int bui = System.Convert.ToInt32(parts[4]);		//kbr todo: use bui
 | 
						|
					Font myfont = new Font(this.FontChoice[FontFamily],FontSize);
 | 
						|
					rc = new Rectangle();
 | 
						|
					//rc.Size = _c1pdf.MeasureStringRtf(txt,myfont,500); // kbr todo: 500?
 | 
						|
					rc.X = LeftMargin+fstx;
 | 
						|
					rc.Y = VerticalOffset+fsty-FontSize; //-(rc.Size.Height/2);
 | 
						|
					//_c1pdf.DrawStringRtf(txt,myfont,Brushes.Black,rc);
 | 
						|
					break;
 | 
						|
				case "GDIADJ":
 | 
						|
					break;
 | 
						|
				case "ELLIPSE":
 | 
						|
					restOfIt = cmdline.Substring(8,cmdline.Length-8);
 | 
						|
					parts = restOfIt.Split(" ".ToCharArray(),5);
 | 
						|
					stx = System.Convert.ToInt32(parts[0]);
 | 
						|
					sty = System.Convert.ToInt32(parts[1]);
 | 
						|
					ex = System.Convert.ToInt32(parts[2]);
 | 
						|
					ey = System.Convert.ToInt32(parts[3]);
 | 
						|
					lw = System.Convert.ToInt32(parts[4]);
 | 
						|
					//_c1pdf.DrawEllipse(pn,LeftMargin+stx, VerticalOffset+sty, LeftMargin+ex, VerticalOffset+ey);
 | 
						|
					break;
 | 
						|
				case "BITMAP":
 | 
						|
					restOfIt = cmdline.Substring(8,cmdline.Length-7);
 | 
						|
					parts = restOfIt.Split(" ".ToCharArray(),3);
 | 
						|
					fstx = (float) System.Convert.ToDouble(parts[0]);
 | 
						|
					fsty = (float) System.Convert.ToDouble(parts[1]);
 | 
						|
					string fname = parts[2];
 | 
						|
					Image img = Image.FromFile(fname);
 | 
						|
					rc = new RectangleF();
 | 
						|
					rc.Height = img.Height;
 | 
						|
					rc.Width = img.Width;
 | 
						|
					rc.X = LeftMargin+fstx;
 | 
						|
					rc.Y = VerticalOffset+fsty-(rc.Size.Height/2);
 | 
						|
					//_c1pdf.DrawImage(img, rc, ContentAlignment.MiddleCenter, ImageSizeModeEnum.Scale);
 | 
						|
					break;
 | 
						|
				case "ABSOLUTE":
 | 
						|
					break;
 | 
						|
				default:
 | 
						|
					break;
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |