491 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			491 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.Text;
 | |
| using VEPROMS.CSLA.Library;
 | |
| using iTextSharp.text.pdf;
 | |
| using iTextSharp.text;
 | |
| using System.IO;
 | |
| using System.Text.RegularExpressions;
 | |
| using System.Windows.Forms;
 | |
| 
 | |
| namespace Volian.Print.Library
 | |
| {
 | |
| 	public class PDFConsistencyCheckReport
 | |
| 	{
 | |
| 		private DocVersionInfo _MyDocVersion;
 | |
| 		public DocVersionInfo MyDocVersion
 | |
| 		{
 | |
| 			get { return _MyDocVersion; }
 | |
| 			set { _MyDocVersion = value; }
 | |
| 		}
 | |
| 		private string _FileName;
 | |
| 		public string FileName
 | |
| 		{
 | |
| 			get { return _FileName; }
 | |
| 			set { _FileName = value; }
 | |
| 		}
 | |
| 		private ItemInfoList _MyItemInfoList;
 | |
| 		public ItemInfoList MyItemInfoList
 | |
| 		{
 | |
| 			get { return _MyItemInfoList; }
 | |
| 			set { _MyItemInfoList = value; }
 | |
| 		}
 | |
| 		public PDFConsistencyCheckReport(string fileName, ItemInfoList myItemInfoList)
 | |
| 		{
 | |
| 			_FileName = fileName;
 | |
| 			_MyItemInfoList = myItemInfoList;
 | |
| 		}
 | |
| 		public void BuildReport()
 | |
| 		{
 | |
| 			iTextSharp.text.Document document = new iTextSharp.text.Document(PageSize.LETTER, 36, 36, 36, 36);
 | |
| 			if (!CreateResultsPDF(document)) return;
 | |
| 			try
 | |
| 			{
 | |
| 				BuildConsistencyReport(document);
 | |
| 			}
 | |
| 			catch (Exception ex)
 | |
| 			{
 | |
| 				StringBuilder msg = new StringBuilder();
 | |
| 				document.Add(new Paragraph("Error:"));
 | |
| 				while (ex != null)
 | |
| 				{
 | |
| 					document.Add(new Paragraph(ex.GetType().Name));
 | |
| 					document.Add(new Paragraph(ex.Message));
 | |
| 					ex = ex.InnerException;
 | |
| 				}
 | |
| 			}
 | |
| 			finally
 | |
| 			{
 | |
| 				if (document.IsOpen())
 | |
| 				{
 | |
| 					document.Close();
 | |
| 					System.Diagnostics.Process.Start(_FileName);
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 		private bool CreateResultsPDF(iTextSharp.text.Document document)
 | |
| 		{
 | |
| 			bool result = false;
 | |
| 			string suffix = "";
 | |
| 			int i = 0;
 | |
| 			// Try to open a file for creating the PDF.
 | |
| 			while (result == false)
 | |
| 			{
 | |
| 				string fileName = _FileName.ToLower().Replace(".pdf", suffix + ".pdf");
 | |
| 				try
 | |
| 				{
 | |
| 					PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(fileName, FileMode.Create));
 | |
| 					document.SetMargins(36, 36, 36, 36);
 | |
| 					document.Open();
 | |
| 					_FileName = fileName;
 | |
| 					result = true;
 | |
| 				}
 | |
| 				catch (System.IO.IOException exIO)
 | |
| 				{
 | |
| 
 | |
| 					if (exIO.Message.Contains("because it is being used by another process"))
 | |
| 						suffix = string.Format("_{0}", ++i);// If this file is in use, increment the suffix and try again
 | |
| 					else // If some other error, display a message and don't print the results
 | |
| 					{
 | |
| 						ShowException(exIO);
 | |
| 						return false;
 | |
| 					}
 | |
| 				}
 | |
| 				catch (Exception ex)
 | |
| 				{
 | |
| 					ShowException(ex);
 | |
| 					return false; // Could not open the output file
 | |
| 				}
 | |
| 			}
 | |
| 			return true;
 | |
| 		}
 | |
| 		private static void ShowException(Exception ex)
 | |
| 		{
 | |
| 			Console.WriteLine("{0} - {1}", ex.GetType().Name, ex.Message);
 | |
| 			StringBuilder msg = new StringBuilder();
 | |
| 			string sep = "";
 | |
| 			string indent = "";
 | |
| 			while (ex != null)
 | |
| 			{
 | |
| 				msg.Append(string.Format("{0}{1}{2}:\r\n{1}{3}", sep, indent, ex.GetType().Name, ex.Message));
 | |
| 				ex = ex.InnerException;
 | |
| 				sep = "\r\n";
 | |
| 				indent += "  ";
 | |
| 			}
 | |
| 			System.Windows.Forms.MessageBox.Show(msg.ToString(), "Error during PDF creation for search:", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Exclamation);
 | |
| 		}
 | |
| 		private PdfPCell BlankCell(int colSpan)
 | |
| 		{
 | |
| 			PdfPCell c = new PdfPCell();
 | |
| 			c.Colspan = colSpan;
 | |
| 			c.Border = 0;
 | |
| 			return c;
 | |
| 		}
 | |
| 		private void BuildConsistencyReport(iTextSharp.text.Document doc)
 | |
| 		{
 | |
| 			iTextSharp.text.Font f1 = pdf.GetFont("Arial Unicode MS", 12, 1, Color.BLACK);
 | |
| 			iTextSharp.text.Font f2 = pdf.GetFont("Arial Unicode MS", 10, 0, Color.BLACK);
 | |
| 			iTextSharp.text.Font f3 = pdf.GetFont("Arial Unicode MS", 8, 0, Color.BLACK);
 | |
| 			iTextSharp.text.Font f4 = pdf.GetFont("Arial Unicode MS", 10, 2, Color.BLACK);
 | |
| 			int cols = 5;
 | |
| 			int borders = 0;
 | |
| 			int paddingBottom = 6;
 | |
| //			float[] widths;
 | |
| 			PdfPTable t = CreatePdfPTable(cols);
 | |
| 			CreatePageHeader(t, f1, f4, cols, paddingBottom, "Approval Consistency Report", "Procedures currently selected to be approved");
 | |
| 			//more stuff
 | |
| 			/*
 | |
| 					Csla.SortedBindingList<ItemInfo> sortedResults = new Csla.SortedBindingList<ItemInfo>(_SearchResults);
 | |
| 					sortedResults.ApplySort(_DisplayMember, ListSortDirection.Ascending);
 | |
| 					lbSrchResults.DataSource = sortedResults;
 | |
| 			*/
 | |
| 			Csla.SortedBindingList<ItemInfo> sortedProcs = new Csla.SortedBindingList<ItemInfo>(MyItemInfoList);
 | |
| 			sortedProcs.ApplySort("DisplayNumber", System.ComponentModel.ListSortDirection.Ascending);
 | |
| 			foreach (ProcedureInfo pi in sortedProcs)
 | |
| 			{
 | |
| 				if (pi.IsSelected)
 | |
| 				{
 | |
| 					PdfPTable tt = new PdfPTable(cols);
 | |
| 					tt.KeepTogether = true;
 | |
| 					tt.AddCell(AddSubTableCell(pi.DisplayNumber, f2, cols, paddingBottom));
 | |
| 					tt.AddCell(AddSubTableCell(pi.MyDifferencesText, f3, cols, paddingBottom));
 | |
| 					PdfPCell c = new PdfPCell(tt);
 | |
| 					c.Colspan = cols;
 | |
| 					t.AddCell(c);
 | |
| 				}
 | |
| 			}
 | |
| 			t.AddCell(BlankCell(cols));
 | |
| 			doc.Add(t);
 | |
| 			//new page with new table
 | |
| 			doc.NewPage();
 | |
| 			t = CreatePdfPTable(cols);
 | |
| 			CreatePageHeader(t, f1, f4, cols, paddingBottom, "Approval Consistency Report", "Procedures that should be selected to be approved in order to maintain consistency");
 | |
| 			foreach (ProcedureInfo pi in MyItemInfoList)
 | |
| 			{
 | |
| 				if (!pi.IsSelected)
 | |
| 				{
 | |
| 					PdfPTable tt = new PdfPTable(cols);
 | |
| 					tt.KeepTogether = true;
 | |
| 					tt.AddCell(AddSubTableCell(pi.DisplayNumber, f2, cols, paddingBottom));
 | |
| 					tt.AddCell(AddSubTableCell(pi.MyDifferencesText, f3, cols, paddingBottom));
 | |
| 					PdfPCell c = new PdfPCell(tt);
 | |
| 					c.Colspan = cols;
 | |
| 					t.AddCell(c);
 | |
| 				}
 | |
| 			}
 | |
| 			doc.Add(t);
 | |
| 		}
 | |
| 		private PdfPCell AddSubTableCell(string text, iTextSharp.text.Font f, int cols, float pb)
 | |
| 		{
 | |
| 			Phrase h = new Phrase();
 | |
| 			h.Font = f;
 | |
| 			h.Add(text);
 | |
| 			PdfPCell c = new PdfPCell(h);
 | |
| 			c.Colspan = cols;
 | |
| 			c.HorizontalAlignment = Element.ALIGN_LEFT;
 | |
| 			c.PaddingBottom = pb;
 | |
| 			return c;
 | |
| 		}
 | |
| 		private void CreatePageHeader(PdfPTable t, iTextSharp.text.Font f1, iTextSharp.text.Font f2, int cols, float pb, string hdr1, string hdr2)
 | |
| 		{
 | |
| 			//report title
 | |
| 			Phrase h = new Phrase();
 | |
| 			h.Font = f1;
 | |
| 			h.Add(hdr1);
 | |
| 			PdfPCell c = new PdfPCell(h);
 | |
| 			c.Colspan = cols;
 | |
| 			c.HorizontalAlignment = Element.ALIGN_CENTER;
 | |
| 			c.PaddingBottom = pb;
 | |
| 			//c.Border = borders;
 | |
| 			t.AddCell(c);
 | |
| 			h = new Phrase();
 | |
| 			h.Font = f2;
 | |
| 			h.Add(hdr2);
 | |
| 			c = new PdfPCell(h);
 | |
| 			c.Colspan = cols;
 | |
| 			c.HorizontalAlignment = Element.ALIGN_CENTER;
 | |
| 			c.PaddingBottom = pb;
 | |
| 			//c.Border = borders;
 | |
| 			t.AddCell(c);
 | |
| 			t.AddCell(BlankCell(cols));
 | |
| 		}
 | |
| 		private PdfPTable CreatePdfPTable(int cols)
 | |
| 		{
 | |
| 			PdfPTable t = new PdfPTable(cols);
 | |
| 			t.HeaderRows = 3;
 | |
| 			t.DefaultCell.Padding = 4;
 | |
| 			t.WidthPercentage = 100;
 | |
| 			float[] widths = new float[] { 1f, 1f, 1f, 1f, 4f };
 | |
| 			t.SetWidths(widths);
 | |
| 			//t.HorizontalAlignment = 0;
 | |
| 			return t;
 | |
| 		}
 | |
| 		public void BuildAllReport(DocVersionInfo dvi)
 | |
| 		{
 | |
| 			MyDocVersion = dvi;
 | |
| 			iTextSharp.text.Document document = new iTextSharp.text.Document(PageSize.LETTER, 36, 36, 36, 36);
 | |
| 			if (!CreateResultsPDF(document)) return;
 | |
| 			try
 | |
| 			{
 | |
| 				BuildAllInConsistenciesReport(document);
 | |
| 			}
 | |
| 			catch (Exception ex)
 | |
| 			{
 | |
| 				StringBuilder msg = new StringBuilder();
 | |
| 				document.Add(new Paragraph("Error:"));
 | |
| 				while (ex != null)
 | |
| 				{
 | |
| 					document.Add(new Paragraph(ex.GetType().Name));
 | |
| 					document.Add(new Paragraph(ex.Message));
 | |
| 					ex = ex.InnerException;
 | |
| 				}
 | |
| 			}
 | |
| 			finally
 | |
| 			{
 | |
| 				if (document.IsOpen())
 | |
| 				{
 | |
| 					document.Close();
 | |
| 					System.Diagnostics.Process.Start(_FileName);
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 		private void BuildAllInConsistenciesReport(iTextSharp.text.Document doc)
 | |
| 		{
 | |
| 			iTextSharp.text.Font f1 = pdf.GetFont("Arial Unicode MS", 12, 1, Color.BLACK);
 | |
| 			iTextSharp.text.Font f2 = pdf.GetFont("Arial Unicode MS", 10, 0, Color.BLACK);
 | |
| 			iTextSharp.text.Font f3 = pdf.GetFont("Arial Unicode MS", 8, 0, Color.BLACK);
 | |
| 			iTextSharp.text.Font f4 = pdf.GetFont("Arial Unicode MS", 10, 2, Color.BLACK);
 | |
| 			int cols = 3;
 | |
| 			int borders = 0;
 | |
| 			int paddingBottom = 6;
 | |
| 			PdfPTable t = new PdfPTable(cols);
 | |
| 			t.HeaderRows = 1;
 | |
| 			t.WidthPercentage = 100;
 | |
| 			float[] widths = new float[] { 1f, 1f, 10f };
 | |
| 			t.SetWidths(widths);
 | |
| 			Phrase h = new Phrase();
 | |
| 			h.Font = f1;
 | |
| 			h.Add("Approved Procedures Inconsistencies Report");
 | |
| 			PdfPCell c = new PdfPCell(h);
 | |
| 			c.Colspan = cols;
 | |
| 			c.HorizontalAlignment = 1;
 | |
| 			t.AddCell(c);
 | |
| 			Dictionary<int, string> types = new Dictionary<int, string>();
 | |
| 			foreach (ProcedureInfo pi in MyItemInfoList)
 | |
| 			{
 | |
| 				string type = pi.MyDifferences.ROConsistency.MyROChecks.Length > 0 ? "Reference Object Inconsistencies" : "";
 | |
| 				if (type != string.Empty && !types.ContainsKey(0))
 | |
| 					types.Add(0, type);
 | |
| 				type = pi.MyDifferences.TransitionConsistency.MyTransitionChecks.Length > 0 ? "Transition Inconsistencies" : "";
 | |
| 				if (type != string.Empty && !types.ContainsKey(1))
 | |
| 					types.Add(1, type);
 | |
| 				type = pi.MyDifferences.LibDocConsistency.MyLibDocChecks.Length > 0 ? "Library Document Inconsistencies" : "";
 | |
| 				if (type != string.Empty && !types.ContainsKey(2))
 | |
| 					types.Add(2, type);
 | |
| 			}
 | |
| //			types.Clear();
 | |
| 			if (types.Count == 0)
 | |
| 			{
 | |
| 				h = new Phrase();
 | |
| 				h.Font = f2;
 | |
| 				h.Add("No Inconsistencies");
 | |
| 				c = new PdfPCell(h);
 | |
| 				c.Colspan = cols;
 | |
| 				t.AddCell(c);
 | |
| 			}
 | |
| 			else
 | |
| 			{
 | |
| //				Dictionary<string, List<string>> ros = new Dictionary<string, List<string>>();
 | |
| 				Dictionary<string, Dictionary<string, bool>> ros = new Dictionary<string, Dictionary<string, bool>>();
 | |
| 				DocVersionInfo dvi = MyItemInfoList[0].MyDocVersion;
 | |
| 				ROFstInfo rofst = dvi.DocVersionAssociations[0].MyROFst;
 | |
| 				//rofst.docVer = dvi;
 | |
| //				ROFSTLookup lu = MyItemInfoList[0].MyDocVersion.DocVersionAssociations[0].MyROFst.ROFSTLookup;
 | |
| 				ROFSTLookup lu = rofst.GetROFSTLookup(dvi);
 | |
| 				if (types.ContainsKey(0))
 | |
| 				{
 | |
| 					foreach (ProcedureInfo pi in MyItemInfoList)
 | |
| 					{
 | |
| 						foreach (ROCheck roc in pi.MyDifferences.ROConsistency.MyROChecks)
 | |
| 						{
 | |
| 							ROFSTLookup.rochild rocc = lu.GetRoChild12(roc.ROID);
 | |
| 							if (rocc.type == 1)
 | |
| 							{
 | |
| 								string newROValue = lu.GetRoValue(roc.ROID).Replace('`', '\xb0');
 | |
| 								string rotitle = string.Format("{0} - Current Version:  {1}", lu.GetROTitle(roc.ROID), lu.GetRoValue(roc.ROID).Replace('`','\xb0'));
 | |
| 								if (ros.ContainsKey(rotitle))
 | |
| 								{
 | |
| 									ros[rotitle].Add(string.Format("Procedure {0} has an ROValue of: {1}", pi.DisplayNumber, roc.ROValue),roc.ROValue == newROValue);
 | |
| 								}
 | |
| 								else
 | |
| 								{
 | |
| 									ros.Add(rotitle, new Dictionary<string,bool>());
 | |
| 									ros[rotitle].Add(string.Format("Procedure {0} has an ROValue of: {1}", pi.DisplayNumber, roc.ROValue),roc.ROValue == newROValue);
 | |
| 								}
 | |
| 							}
 | |
| 						}
 | |
| 					}
 | |
| 				}
 | |
| //jcb
 | |
| 				Dictionary<string, Dictionary<string, bool>> trs = new Dictionary<string, Dictionary<string, bool>>();
 | |
| 				//Dictionary<string, List<string>> trs = new Dictionary<string, List<string>>();
 | |
| 				if (types.ContainsKey(1))
 | |
| 				{
 | |
| 					foreach (ProcedureInfo pi in MyItemInfoList)
 | |
| 					{
 | |
| 						foreach (TransitionCheck trc in pi.MyDifferences.TransitionConsistency.MyTransitionChecks)
 | |
| 						{
 | |
| 							TransitionInfo ti = TransitionInfo.Get(trc.TransitionID);
 | |
| 							string fromText = ti.MyContent.Text;
 | |
| 							//GO TO \\v <START]\\v0 0POP05\\u8209?EO\\u8209?EO10, LOSS OF REACTOR OR SECONDARY COOLANT, Step 21\\v #Link:Transition:0 1182 1864[END>\\v0
 | |
| 							MatchCollection mc = Regex.Matches(fromText, @"\<START.*? (.*?)\\v #Link:Transition:[0-9]+ ([0-9]+) .*?\[END\>");
 | |
| 							foreach (Match m in mc)
 | |
| 								if (m.Groups[2].Value == ti.TransitionID.ToString())
 | |
| 									fromText = ItemInfo.ConvertToDisplayText(m.Groups[1].Value);
 | |
| 							string newValue = ti.MyContent.ContentItems[0].Path + "\r\nCurrent Version:  " + fromText;
 | |
| 							string trtitle = "From Procedure " + newValue;
 | |
| 							if (trs.ContainsKey(trtitle))
 | |
| 							{
 | |
| 								trs[trtitle].Add(string.Format("According to {0} the destination is: {1}", pi.DisplayNumber, ItemInfo.ConvertToDisplayText(trc.TransitionValue)), ItemInfo.ConvertToDisplayText(trc.TransitionValue) == fromText);
 | |
| 							}
 | |
| 							else
 | |
| 							{
 | |
| 								trs.Add(trtitle, new Dictionary<string,bool>());
 | |
| 								trs[trtitle].Add(string.Format("According to {0} the destination is: {1}", pi.DisplayNumber, ItemInfo.ConvertToDisplayText(trc.TransitionValue)), ItemInfo.ConvertToDisplayText(trc.TransitionValue) == fromText);
 | |
| 							}
 | |
| 						}
 | |
| 					}
 | |
| 				}
 | |
| //end jcb
 | |
| 				Dictionary<string, Dictionary<string, bool>> lds = new Dictionary<string, Dictionary<string, bool>>();
 | |
| 				//Dictionary<string, List<string>> lds = new Dictionary<string, List<string>>();
 | |
| 				if (types.ContainsKey(2))
 | |
| 				{
 | |
| 					foreach (ProcedureInfo pi in MyItemInfoList)
 | |
| 					{
 | |
| 						foreach (LibDocCheck ldc in pi.MyDifferences.LibDocConsistency.MyLibDocChecks)
 | |
| 						{
 | |
| 							DocumentInfo di = DocumentInfo.Get(ldc.DocID);
 | |
| 							string newValue = di.DTS.ToString();
 | |
| 							string ldtitle = string.Format("{0} - Current Version:  {1}", di.DocumentTitle, di.DTS.ToString());
 | |
| 							if (lds.ContainsKey(ldtitle))
 | |
| 							{
 | |
| 								lds[ldtitle].Add(string.Format("Procedure {0} has a Document Date of: {1}", pi.DisplayNumber, ldc.DocDate.ToString()),ldc.DocDate.ToString() == newValue);
 | |
| 							}
 | |
| 							else
 | |
| 							{
 | |
| 								lds.Add(ldtitle, new Dictionary<string,bool>());
 | |
| 								lds[ldtitle].Add(string.Format("Procedure {0} has a Document Date of: {1}", pi.DisplayNumber, ldc.DocDate.ToString()), ldc.DocDate.ToString() == newValue);
 | |
| 							}
 | |
| 						}
 | |
| 					}
 | |
| 				}
 | |
| 				Color goodColor = new Color(System.Drawing.Color.PaleGreen);
 | |
| 				Color badColor = new Color(System.Drawing.Color.Khaki);
 | |
| 				if (types.ContainsKey(0))
 | |
| 				{
 | |
| 					h = new Phrase();
 | |
| 					h.Font = f2;
 | |
| 					h.Add(types[0]);
 | |
| 					c = new PdfPCell(h);
 | |
| 					c.Colspan = cols;
 | |
| 					t.AddCell(c);
 | |
| 					foreach (string rotitle in ros.Keys)
 | |
| 					{
 | |
| 						t.AddCell(BlankCell(1));
 | |
| 						h = new Phrase();
 | |
| 						h.Font = f3;
 | |
| 						h.Add(rotitle);
 | |
| 						c = new PdfPCell(h);
 | |
| 						c.Colspan = cols - 1;
 | |
| 						c.BackgroundColor = goodColor;
 | |
| 						t.AddCell(c);
 | |
| 						foreach (KeyValuePair<string,bool> d in ros[rotitle])
 | |
| 						{
 | |
| 							t.AddCell(BlankCell(2));
 | |
| 							h = new Phrase();
 | |
| 							h.Font = f3;
 | |
| 							h.Add(d.Key);
 | |
| 							c = new PdfPCell(h);
 | |
| 							if (d.Value)
 | |
| 								c.BackgroundColor = goodColor;
 | |
| 							else
 | |
| 								c.BackgroundColor = badColor;
 | |
| 							t.AddCell(c);
 | |
| 						}
 | |
| 					}
 | |
| 				}
 | |
| //jcb
 | |
| 				if (types.ContainsKey(1))
 | |
| 				{
 | |
| 					h = new Phrase();
 | |
| 					h.Font = f2;
 | |
| 					h.Add(types[1]);
 | |
| 					c = new PdfPCell(h);
 | |
| 					c.Colspan = cols;
 | |
| 					t.AddCell(c);
 | |
| 					foreach (string trtitle in trs.Keys)
 | |
| 					{
 | |
| 						t.AddCell(BlankCell(1));
 | |
| 						h = new Phrase();
 | |
| 						h.Font = f3;
 | |
| 						h.Add(trtitle);
 | |
| 						c = new PdfPCell(h);
 | |
| 						c.Colspan = cols - 1;
 | |
| 						c.BackgroundColor = goodColor;
 | |
| 						t.AddCell(c);
 | |
| 						foreach (KeyValuePair<string, bool> d in trs[trtitle])
 | |
| 						{
 | |
| 							t.AddCell(BlankCell(2));
 | |
| 							h = new Phrase();
 | |
| 							h.Font = f3;
 | |
| 							h.Add(d.Key);
 | |
| 							c = new PdfPCell(h);
 | |
| 							if (d.Value)
 | |
| 								c.BackgroundColor = goodColor;
 | |
| 							else
 | |
| 								c.BackgroundColor = badColor;
 | |
| 							t.AddCell(c);
 | |
| 						}
 | |
| 					}
 | |
| 				}
 | |
| //end jcb
 | |
| 				if (types.ContainsKey(2))
 | |
| 				{
 | |
| 					h = new Phrase();
 | |
| 					h.Font = f2;
 | |
| 					h.Add(types[2]);
 | |
| 					c = new PdfPCell(h);
 | |
| 					c.Colspan = cols;
 | |
| 					t.AddCell(c);
 | |
| 					foreach (string ldtitle in lds.Keys)
 | |
| 					{
 | |
| 						t.AddCell(BlankCell(1));
 | |
| 						h = new Phrase();
 | |
| 						h.Font = f3;
 | |
| 						h.Add(ldtitle);
 | |
| 						c = new PdfPCell(h);
 | |
| 						c.Colspan = cols - 1;
 | |
| 						c.BackgroundColor = goodColor;
 | |
| 						t.AddCell(c);
 | |
| 						foreach (KeyValuePair<string, bool> d in lds[ldtitle])
 | |
| 						{
 | |
| 							t.AddCell(BlankCell(2));
 | |
| 							h = new Phrase();
 | |
| 							h.Font = f3;
 | |
| 							h.Add(d.Key);
 | |
| 							c = new PdfPCell(h);
 | |
| 							if (d.Value)
 | |
| 								c.BackgroundColor = goodColor;
 | |
| 							else
 | |
| 								c.BackgroundColor = badColor;
 | |
| 							t.AddCell(c);
 | |
| 						}
 | |
| 					}
 | |
| 				}
 | |
| 			}
 | |
| 			doc.Add(t);
 | |
| 		}
 | |
| 	}
 | |
| }
 | 
