Class to support overlay with VE-PROMS (16 bit)
Class that performs print function Change to use frmPrintMSWord
This commit is contained in:
		@@ -14,7 +14,7 @@ namespace PrintMSWord
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
			Application.EnableVisualStyles();
 | 
								Application.EnableVisualStyles();
 | 
				
			||||||
			Application.SetCompatibleTextRenderingDefault(false);
 | 
								Application.SetCompatibleTextRenderingDefault(false);
 | 
				
			||||||
			Application.Run(new frmPrintMsWord());
 | 
								Application.Run(new frmPrintMSWord());
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
							
								
								
									
										209
									
								
								PROMS/VEPROMS/PrintMSWord/Proms2010Print.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										209
									
								
								PROMS/VEPROMS/PrintMSWord/Proms2010Print.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,209 @@
 | 
				
			|||||||
 | 
					using System;
 | 
				
			||||||
 | 
					using System.Collections.Generic;
 | 
				
			||||||
 | 
					using System.Text;
 | 
				
			||||||
 | 
					using System.Xml.Serialization;
 | 
				
			||||||
 | 
					using VEPROMS.CSLA.Library;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace PrintMSWord
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						[XmlRoot("Proms2010Print")]
 | 
				
			||||||
 | 
						[Serializable()]
 | 
				
			||||||
 | 
						public class Proms2010Print
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							private string _PROMS16_Folder;
 | 
				
			||||||
 | 
							[XmlAttribute("PROMS16_Folder")]
 | 
				
			||||||
 | 
							public string PROMS16_Folder
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								get { return _PROMS16_Folder; }
 | 
				
			||||||
 | 
								set { _PROMS16_Folder = value; }
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							private Proms2010Procedures _Procedures;
 | 
				
			||||||
 | 
							//[XmlElement("Procedures")]
 | 
				
			||||||
 | 
							public Proms2010Procedures Procedures
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								get { return _Procedures; }
 | 
				
			||||||
 | 
								set { _Procedures = value; }
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							public Proms2010Procedure GetProcedure(ProcedureInfo myProc)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								return Procedures.GetProcedure(myProc);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						public class Proms2010Procedures : List<Proms2010Procedure>
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							public Proms2010Procedure GetProcedure(ProcedureInfo myProc)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								foreach (Proms2010Procedure proc in this)
 | 
				
			||||||
 | 
									if (proc.ItemID == myProc.ItemID) return proc;
 | 
				
			||||||
 | 
								return null;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						public class Proms2010Procedure
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							public Proms2010Procedure()
 | 
				
			||||||
 | 
							{ ;}
 | 
				
			||||||
 | 
							public Proms2010Procedure(ProcedureInfo myProc)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								ItemID = myProc.ItemID;
 | 
				
			||||||
 | 
								Number = myProc.DisplayNumber;
 | 
				
			||||||
 | 
								Title = myProc.DisplayText;
 | 
				
			||||||
 | 
								Sections = Proms2010Sections.GetSections(myProc);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							private int _ItemID;
 | 
				
			||||||
 | 
							[XmlAttribute("ItemID")]
 | 
				
			||||||
 | 
							public int ItemID
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								get { return _ItemID; }
 | 
				
			||||||
 | 
								set { _ItemID = value; }
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							private string _Number;
 | 
				
			||||||
 | 
							[XmlAttribute("Number")]
 | 
				
			||||||
 | 
							public string Number
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								get { return _Number; }
 | 
				
			||||||
 | 
								set { _Number = value; }
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							private string _Title;
 | 
				
			||||||
 | 
							[XmlAttribute("Title")]
 | 
				
			||||||
 | 
							public string Title
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								get { return _Title; }
 | 
				
			||||||
 | 
								set { _Title = value; }
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							private int _PageCount;
 | 
				
			||||||
 | 
							[XmlAttribute("PageCount")]
 | 
				
			||||||
 | 
							public int PageCount
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								get { return _PageCount; }
 | 
				
			||||||
 | 
								set 
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (Sections != null)
 | 
				
			||||||
 | 
										Sections.FixPageCount(value);
 | 
				
			||||||
 | 
									_PageCount = value;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							private string _Rev;
 | 
				
			||||||
 | 
							[XmlAttribute("Rev")]
 | 
				
			||||||
 | 
							public string Rev
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								get { return _Rev; }
 | 
				
			||||||
 | 
								set { _Rev = value; }
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							private string _RevDate;
 | 
				
			||||||
 | 
							[XmlAttribute("RevDate")]
 | 
				
			||||||
 | 
							public string RevDate
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								get { return _RevDate; }
 | 
				
			||||||
 | 
								set { _RevDate = value; }
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							private Proms2010Sections _Sections;
 | 
				
			||||||
 | 
							[XmlElement("Sections")]
 | 
				
			||||||
 | 
							public Proms2010Sections Sections
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								get { return _Sections; }
 | 
				
			||||||
 | 
								set { _Sections = value; }
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							public Proms2010Section GetSection(SectionInfo mySection)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								return Sections.GetSection(mySection);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						public class Proms2010Sections : List<Proms2010Section>
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							public static Proms2010Sections GetSections(ProcedureInfo proc)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								Proms2010Sections sections = new Proms2010Sections();
 | 
				
			||||||
 | 
								foreach (SectionInfo mySection in proc.Sections)
 | 
				
			||||||
 | 
									sections.Add(new Proms2010Section(mySection));
 | 
				
			||||||
 | 
								return sections;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							public int TotalPages
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								get
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									int retval = 0;
 | 
				
			||||||
 | 
									foreach (Proms2010Section section in this)
 | 
				
			||||||
 | 
										retval += section.PageCount;
 | 
				
			||||||
 | 
									return retval;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							public void FixPageCount(int total)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								int stepPages = total - TotalPages;
 | 
				
			||||||
 | 
								foreach (Proms2010Section section in this)
 | 
				
			||||||
 | 
									if (section.PageCount == 0)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										section.PageCount = stepPages;
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								FixStartingPages();
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							public void FixStartingPages()
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								int pageCount = 0;
 | 
				
			||||||
 | 
								foreach (Proms2010Section section in this)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									section.StartingPage = pageCount;
 | 
				
			||||||
 | 
									pageCount += section.PageCount;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							public Proms2010Section GetSection(SectionInfo mySection)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								foreach (Proms2010Section section in this)
 | 
				
			||||||
 | 
									if (section.ItemID == mySection.ItemID)
 | 
				
			||||||
 | 
										return section;
 | 
				
			||||||
 | 
								return null;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						public class Proms2010Section
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							public Proms2010Section()
 | 
				
			||||||
 | 
							{ ;}
 | 
				
			||||||
 | 
							public Proms2010Section(SectionInfo mySection)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
									ItemID = mySection.ItemID;
 | 
				
			||||||
 | 
									Number = mySection.DisplayNumber;
 | 
				
			||||||
 | 
									Title = mySection.DisplayText;
 | 
				
			||||||
 | 
									if (mySection.MyContent.MyEntry != null) // MSWord Section
 | 
				
			||||||
 | 
										PageCount = (int)Math.Ceiling(double.Parse(mySection.SectionConfig.Section_NumPages));
 | 
				
			||||||
 | 
									else // Step Section
 | 
				
			||||||
 | 
										PageCount = 0;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							private int _ItemID;
 | 
				
			||||||
 | 
							[XmlAttribute("ItemID")]
 | 
				
			||||||
 | 
							public int ItemID
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								get { return _ItemID; }
 | 
				
			||||||
 | 
								set { _ItemID = value; }
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							private string _Number;
 | 
				
			||||||
 | 
							[XmlAttribute("Number")]
 | 
				
			||||||
 | 
							public string Number
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								get { return _Number; }
 | 
				
			||||||
 | 
								set { _Number = value; }
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							private string _Title;
 | 
				
			||||||
 | 
							[XmlAttribute("Title")]
 | 
				
			||||||
 | 
							public string Title
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								get { return _Title; }
 | 
				
			||||||
 | 
								set { _Title = value; }
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							private int _PageCount;
 | 
				
			||||||
 | 
							[XmlAttribute("PageCount")]
 | 
				
			||||||
 | 
							public int PageCount
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								get { return _PageCount; }
 | 
				
			||||||
 | 
								set { _PageCount = value; }
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							private int _StartingPage = 0;
 | 
				
			||||||
 | 
							[XmlAttribute("StartingPage")]
 | 
				
			||||||
 | 
							public int StartingPage
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								get { return _StartingPage; }
 | 
				
			||||||
 | 
								set { _StartingPage = value; }
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										854
									
								
								PROMS/VEPROMS/PrintMSWord/PromsPrinter.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										854
									
								
								PROMS/VEPROMS/PrintMSWord/PromsPrinter.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,854 @@
 | 
				
			|||||||
 | 
					using System;
 | 
				
			||||||
 | 
					using System.Collections.Generic;
 | 
				
			||||||
 | 
					using System.Text;
 | 
				
			||||||
 | 
					using VEPROMS.CSLA.Library;
 | 
				
			||||||
 | 
					using Volian.Svg.Library;
 | 
				
			||||||
 | 
					using iTextSharp.text.factories;
 | 
				
			||||||
 | 
					using iTextSharp.text;
 | 
				
			||||||
 | 
					using iTextSharp.text.pdf;
 | 
				
			||||||
 | 
					using System.Text.RegularExpressions;
 | 
				
			||||||
 | 
					using System.IO;
 | 
				
			||||||
 | 
					using System.Xml;
 | 
				
			||||||
 | 
					using LBWordLibrary;
 | 
				
			||||||
 | 
					using System.Drawing;
 | 
				
			||||||
 | 
					using System.Drawing.Imaging;
 | 
				
			||||||
 | 
					using Volian.Controls.Library;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace PrintMSWord
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						public delegate void PromsPrinterStatusEvent(object sender,PromsPrintStatusArgs args);
 | 
				
			||||||
 | 
						public class PromsPrintStatusArgs
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							private string _MyStatus;
 | 
				
			||||||
 | 
							public string MyStatus
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								get { return _MyStatus; }
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							private DateTime _When = DateTime.Now;
 | 
				
			||||||
 | 
							public DateTime When
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								get { return _When; }
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							private PromsPrinterStatusType _Type;
 | 
				
			||||||
 | 
							public PromsPrinterStatusType Type
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								get { return _Type; }
 | 
				
			||||||
 | 
								set { _Type = value; }
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							public PromsPrintStatusArgs(string myStatus, PromsPrinterStatusType type)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								_MyStatus = myStatus;
 | 
				
			||||||
 | 
								_Type = type;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						public enum PromsPrinterStatusType
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							Start,
 | 
				
			||||||
 | 
							General,
 | 
				
			||||||
 | 
							MSWordToPDF,
 | 
				
			||||||
 | 
							PageList,
 | 
				
			||||||
 | 
							Watermark,
 | 
				
			||||||
 | 
							Read16,
 | 
				
			||||||
 | 
							Merge16,
 | 
				
			||||||
 | 
							Open16,
 | 
				
			||||||
 | 
							ReadMSWord,
 | 
				
			||||||
 | 
							MergeMSWord,
 | 
				
			||||||
 | 
							OpenMSWord,
 | 
				
			||||||
 | 
							OpenPDF,
 | 
				
			||||||
 | 
							Merge,
 | 
				
			||||||
 | 
							Total,
 | 
				
			||||||
 | 
							CloseDocument,
 | 
				
			||||||
 | 
							NewPage,
 | 
				
			||||||
 | 
							BuildSVG,
 | 
				
			||||||
 | 
							SetSVG,
 | 
				
			||||||
 | 
							SetPageEvent,
 | 
				
			||||||
 | 
							GetSection,
 | 
				
			||||||
 | 
							Before
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						public class PromsPrinter
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							public event PromsPrinterStatusEvent StatusChanged;
 | 
				
			||||||
 | 
							private void OnStatusChanged(object sender, PromsPrintStatusArgs args)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								if (StatusChanged != null)
 | 
				
			||||||
 | 
									StatusChanged(sender, args);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							private void OnStatusChanged(string myStatus, PromsPrinterStatusType type)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								OnStatusChanged(this, new PromsPrintStatusArgs(myStatus, type));
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							private string _Rev;
 | 
				
			||||||
 | 
							private string _RevDate;
 | 
				
			||||||
 | 
							private ItemInfo _MyItem;
 | 
				
			||||||
 | 
							private string _Watermark;
 | 
				
			||||||
 | 
							public PromsPrinter(ItemInfo myItem, string rev, string revDate, string watermark)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								_MyItem = myItem;
 | 
				
			||||||
 | 
								_Rev = rev;
 | 
				
			||||||
 | 
								_RevDate = revDate;
 | 
				
			||||||
 | 
								_Watermark = watermark;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							public string Print(string pdfFolder, Proms2010Print myProms2010Print, string myMSWordFile,System.Windows.Forms.Form myForm)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								if(_MyItem is SectionInfo)
 | 
				
			||||||
 | 
									return Print(_MyItem as SectionInfo, pdfFolder, myProms2010Print,myForm);
 | 
				
			||||||
 | 
								else if (_MyItem is ProcedureInfo)
 | 
				
			||||||
 | 
									return Print(_MyItem as ProcedureInfo, pdfFolder, myProms2010Print,myForm);
 | 
				
			||||||
 | 
								return "";
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							private string BuildMSWordPDF(SectionInfo section, System.Windows.Forms.Form myForm)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								DateTime tStart = DateTime.Now;
 | 
				
			||||||
 | 
								string MSWordFile = null;
 | 
				
			||||||
 | 
								if (section.MyContent.ContentEntryCount == 1)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									MSWordFile = MSWordToPDF.ToPDFReplaceROs(section, false, myForm);
 | 
				
			||||||
 | 
									OnStatusChanged("MSWord converted to PDF " + MSWordFile, PromsPrinterStatusType.MSWordToPDF);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								return MSWordFile;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							private string Print(SectionInfo mySection, string pdfFolder, Proms2010Print myProms2010Print, System.Windows.Forms.Form myForm)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								// Create an output file name
 | 
				
			||||||
 | 
								string outputFileName = pdfFolder + "\\" + CreateFileName(mySection.MyProcedure.DisplayNumber, mySection.DisplayNumber, mySection.DisplayText);
 | 
				
			||||||
 | 
								//Console.WriteLine("Section {0}", outputFileName);
 | 
				
			||||||
 | 
								Proms2010Procedure proc = myProms2010Print.GetProcedure(mySection.MyProcedure);
 | 
				
			||||||
 | 
								Proms2010Section sect = proc == null ? null : proc.GetSection(mySection);
 | 
				
			||||||
 | 
								// Create an MSWord Pdf
 | 
				
			||||||
 | 
								// Setup a pdf Document for printing
 | 
				
			||||||
 | 
								PdfContentByte cb = OpenDoc(outputFileName);
 | 
				
			||||||
 | 
								// Create Layers
 | 
				
			||||||
 | 
								CreateLayers(cb); 
 | 
				
			||||||
 | 
								// Setup pdfPageEventHelper for the particular Section
 | 
				
			||||||
 | 
								// Try to grab a 16-bit version of the output as a background
 | 
				
			||||||
 | 
								string procedureFileName = myProms2010Print.PROMS16_Folder + "\\" + CreateFileName(mySection.MyProcedure.DisplayNumber);
 | 
				
			||||||
 | 
								FileInfo VEPromsFile = new FileInfo(procedureFileName);
 | 
				
			||||||
 | 
								PdfReader reader16 = VEPromsFile.Exists ? new PdfReader(procedureFileName) : null;
 | 
				
			||||||
 | 
								// Loop through MSWord Pages			
 | 
				
			||||||
 | 
								FormatInfo activeFormat = mySection.ActiveFormat;
 | 
				
			||||||
 | 
								DocStyle docStyle = GetDocStyle(activeFormat, (mySection.MyContent.Type ?? 10000));
 | 
				
			||||||
 | 
								Svg mySvg = BuildSvg(mySection,activeFormat,docStyle);
 | 
				
			||||||
 | 
								cb.PdfWriter.PageEvent = new SvgPageHelper(mySvg,_PagelistLayer,_WatermarkLayer);
 | 
				
			||||||
 | 
								string myMSWordFile = BuildMSWordPDF(mySection,myForm);
 | 
				
			||||||
 | 
								PdfReader readerWord = myMSWordFile != null ? new PdfReader(myMSWordFile) : null;
 | 
				
			||||||
 | 
								for (int ii = 0; ii < sect.PageCount; ii++)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									int pageNumber = 1 + ii + sect.StartingPage;
 | 
				
			||||||
 | 
									cb.PdfDocument.NewPage();
 | 
				
			||||||
 | 
									PdfImportedPage bgPage = cb.PdfWriter.GetImportedPage(reader16, pageNumber);
 | 
				
			||||||
 | 
									AddImportedPageToLayer(cb.PdfWriter.DirectContentUnder, _BackgroundLayer, bgPage, 12, -9.7F);
 | 
				
			||||||
 | 
									if (readerWord != null)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										PdfImportedPage fgPage = cb.PdfWriter.GetImportedPage(readerWord, ii + 1);
 | 
				
			||||||
 | 
										AddImportedPageToLayer(cb.PdfWriter.DirectContentUnder, _MSWordLayer, fgPage, 0, 0);
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								CloseDocument(cb, outputFileName);
 | 
				
			||||||
 | 
								// Return the fileName;
 | 
				
			||||||
 | 
								return outputFileName;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							private int _PLPage = 0;
 | 
				
			||||||
 | 
							private int _PLOf = 0;
 | 
				
			||||||
 | 
							private List<string> _MissingTokens = new List<string>();
 | 
				
			||||||
 | 
							private string ReplacePageListToken(Match match)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								switch (match.Value)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									case "{PAGE}": // Current Page Number
 | 
				
			||||||
 | 
										string retval = _PLPage.ToString();
 | 
				
			||||||
 | 
										_PLPage++; // Increment Page Number
 | 
				
			||||||
 | 
										return retval;
 | 
				
			||||||
 | 
									case "{OF}": // Total Page Count for this section
 | 
				
			||||||
 | 
										return _PLOf.ToString();
 | 
				
			||||||
 | 
									case "{REVDATE}": // Revision Date
 | 
				
			||||||
 | 
										return _RevDate;
 | 
				
			||||||
 | 
									case "{REV}": // Revision Number
 | 
				
			||||||
 | 
										return _Rev;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if (!_MissingTokens.Contains(match.Value))
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									_MissingTokens.Add(match.Value);
 | 
				
			||||||
 | 
									Console.WriteLine("\t\t\t\tcase \"{0}\": // Unhandled Token\r\n\t\t\t\t\treturn \"\";", match.Value);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								return "";
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							//private Regex regexReplaceTokens = new Regex(@"{[^{}]}");
 | 
				
			||||||
 | 
							private string mySvg_ProcessText(object sender, SvgProcessTextArgs args)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								if (!args.MyText.Contains("{"))
 | 
				
			||||||
 | 
									return args.MyText;
 | 
				
			||||||
 | 
								return regexFindToken.Replace(args.MyText, new MatchEvaluator(ReplacePageListToken));
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							private static void AddImportedPageToLayer(PdfContentByte cb, PdfLayer layer, PdfImportedPage page, float xOff, float yOff)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								cb.BeginLayer(layer);
 | 
				
			||||||
 | 
								iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(page);
 | 
				
			||||||
 | 
								image.SetAbsolutePosition(xOff, yOff);
 | 
				
			||||||
 | 
								cb.AddImage(image);
 | 
				
			||||||
 | 
								cb.EndLayer();
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							private PdfLayer _TextLayer;
 | 
				
			||||||
 | 
							private PdfLayer _BackgroundLayer;
 | 
				
			||||||
 | 
							private PdfLayer _MSWordLayer;
 | 
				
			||||||
 | 
							private PdfLayer _PagelistLayer;
 | 
				
			||||||
 | 
							private PdfLayer _WatermarkLayer;
 | 
				
			||||||
 | 
							private void CreateLayers(PdfContentByte cb)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								_BackgroundLayer = new PdfLayer("16-Bit", cb.PdfWriter);
 | 
				
			||||||
 | 
								_MSWordLayer = new PdfLayer("32-Bit MSWord", cb.PdfWriter);
 | 
				
			||||||
 | 
								_PagelistLayer = new PdfLayer("32-Bit Pagelist", cb.PdfWriter);
 | 
				
			||||||
 | 
								_TextLayer = new PdfLayer("32-Bit Pagelist Text", cb.PdfWriter);
 | 
				
			||||||
 | 
								_WatermarkLayer = new PdfLayer("Watermark", cb.PdfWriter);
 | 
				
			||||||
 | 
								_WatermarkLayer.SetPrint("Watermark", true);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							private void CloseDocument(PdfContentByte cb, string fileName)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								cb.PdfDocument.Close();
 | 
				
			||||||
 | 
								OnStatusChanged("CloseDocument", PromsPrinterStatusType.CloseDocument);
 | 
				
			||||||
 | 
								System.Diagnostics.Process.Start(fileName);
 | 
				
			||||||
 | 
								OnStatusChanged("OpenPDF", PromsPrinterStatusType.OpenPDF);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							private PdfContentByte OpenDoc(string outputFileName)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								iTextSharp.text.Document document = new iTextSharp.text.Document(PageSize.LETTER);
 | 
				
			||||||
 | 
								PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outputFileName, FileMode.Create));
 | 
				
			||||||
 | 
								document.Open();
 | 
				
			||||||
 | 
								// Create Layers
 | 
				
			||||||
 | 
								CreateLayers(writer.DirectContent);
 | 
				
			||||||
 | 
								return writer.DirectContent;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							private string CreateFileName(string procNumber, string sectNumber, string sectTitle)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								return FixFileName(procNumber + "_" + ((sectNumber ?? "") != "" ? sectNumber : sectTitle));
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							private string CreateFileName(string procNumber)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								return FixFileName(procNumber);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							private string FixFileName(string name)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								return Regex.Replace(name, "[ .,]", "_") + ".pdf";
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							int _StepPageNumber = 0;
 | 
				
			||||||
 | 
							private string Print(ProcedureInfo myProcedure, string pdfFolder, Proms2010Print myProms2010Print, System.Windows.Forms.Form myForm)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								OnStatusChanged("Print " + myProcedure.DisplayNumber, PromsPrinterStatusType.Start);
 | 
				
			||||||
 | 
								Proms2010Procedure proc = myProms2010Print.GetProcedure(myProcedure);
 | 
				
			||||||
 | 
								SetupPageCount(myProcedure, proc);
 | 
				
			||||||
 | 
								// Create an output file name
 | 
				
			||||||
 | 
								string outputFileName = pdfFolder + "\\" + CreateFileName(myProcedure.DisplayNumber);
 | 
				
			||||||
 | 
								//Console.WriteLine("Section {0}", outputFileName);
 | 
				
			||||||
 | 
								// Create an MSWord Pdf
 | 
				
			||||||
 | 
								// Setup a pdf Document for printing
 | 
				
			||||||
 | 
								OnStatusChanged("Before OpenDoc", PromsPrinterStatusType.Before);
 | 
				
			||||||
 | 
								PdfContentByte cb = OpenDoc(outputFileName);
 | 
				
			||||||
 | 
								OnStatusChanged("OpenDoc", PromsPrinterStatusType.Before);
 | 
				
			||||||
 | 
								// Setup pdfPageEventHelper for the particular Section
 | 
				
			||||||
 | 
								// Try to grab a 16-bit version of the output as a background
 | 
				
			||||||
 | 
								string procedureFileName = myProms2010Print.PROMS16_Folder + "\\" + CreateFileName(myProcedure.DisplayNumber);
 | 
				
			||||||
 | 
								FileInfo VEPromsFile = new FileInfo(procedureFileName);
 | 
				
			||||||
 | 
								PdfReader reader16 = VEPromsFile.Exists ? new PdfReader(procedureFileName) : null;
 | 
				
			||||||
 | 
								OnStatusChanged("OpenReader16", PromsPrinterStatusType.Open16);
 | 
				
			||||||
 | 
								// Loop through MSWord Pages
 | 
				
			||||||
 | 
								SvgPageHelper myHelper = null;
 | 
				
			||||||
 | 
								OnStatusChanged("Before NewPage", PromsPrinterStatusType.Before);
 | 
				
			||||||
 | 
								cb.PdfDocument.NewPage();
 | 
				
			||||||
 | 
								OnStatusChanged("After NewPage", PromsPrinterStatusType.NewPage);
 | 
				
			||||||
 | 
								foreach (SectionInfo mySection in myProcedure.Sections)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									OnStatusChanged("Before BuildSvg", PromsPrinterStatusType.Before);
 | 
				
			||||||
 | 
									FormatInfo activeFormat = mySection.ActiveFormat;
 | 
				
			||||||
 | 
									DocStyle docStyle = GetDocStyle(activeFormat, (mySection.MyContent.Type ?? 10000));
 | 
				
			||||||
 | 
									Svg mySvg = BuildSvg(mySection,activeFormat,docStyle);
 | 
				
			||||||
 | 
									OnStatusChanged("After BuildSvg", PromsPrinterStatusType.BuildSVG);
 | 
				
			||||||
 | 
									if (myHelper == null)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										cb.PdfWriter.PageEvent = myHelper = new SvgPageHelper(mySvg, _PagelistLayer, _WatermarkLayer);
 | 
				
			||||||
 | 
										OnStatusChanged("After Set PageEvent", PromsPrinterStatusType.SetPageEvent);
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									else
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										myHelper.MySvg = mySvg;
 | 
				
			||||||
 | 
										OnStatusChanged("After Set Svg", PromsPrinterStatusType.SetSVG);
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									string myMSWordFile = BuildMSWordPDF(mySection, myForm);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									PdfReader readerWord = myMSWordFile != null ? new PdfReader(myMSWordFile) : null;
 | 
				
			||||||
 | 
									OnStatusChanged("Open MSWord", PromsPrinterStatusType.OpenMSWord);
 | 
				
			||||||
 | 
									Proms2010Section sect = proc == null ? null : proc.GetSection(mySection);
 | 
				
			||||||
 | 
									OnStatusChanged("Get Section", PromsPrinterStatusType.GetSection);
 | 
				
			||||||
 | 
									SetupPageNumbering(docStyle, sect.PageCount);
 | 
				
			||||||
 | 
									for (int ii = 0; ii < sect.PageCount; ii++)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										int pageNumber = 1 + ii + sect.StartingPage;
 | 
				
			||||||
 | 
										//OnStatusChanged("Before NewPage", PromsPrinterStatusType.Before);
 | 
				
			||||||
 | 
										//cb.PdfDocument.NewPage();
 | 
				
			||||||
 | 
										//if (docStyle.NumberingSequence == E_NumberingSequence.IncludeWoThSteps)
 | 
				
			||||||
 | 
										//	stepPageNumber = _PLPage;
 | 
				
			||||||
 | 
										//OnStatusChanged("After NewPage", PromsPrinterStatusType.NewPage);
 | 
				
			||||||
 | 
										if (reader16 != null)
 | 
				
			||||||
 | 
										{
 | 
				
			||||||
 | 
											PdfImportedPage bgPage = cb.PdfWriter.GetImportedPage(reader16, pageNumber);
 | 
				
			||||||
 | 
											OnStatusChanged("Read VEPROMS", PromsPrinterStatusType.Read16);
 | 
				
			||||||
 | 
											AddImportedPageToLayer(cb.PdfWriter.DirectContentUnder, _BackgroundLayer, bgPage, 12, -9.7F);
 | 
				
			||||||
 | 
											OnStatusChanged("Merge VEPROMS", PromsPrinterStatusType.Merge16);
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
										if (readerWord != null)
 | 
				
			||||||
 | 
										{
 | 
				
			||||||
 | 
											PdfImportedPage fgPage = cb.PdfWriter.GetImportedPage(readerWord, ii + 1);
 | 
				
			||||||
 | 
											OnStatusChanged("Read MSWord", PromsPrinterStatusType.ReadMSWord);
 | 
				
			||||||
 | 
											AddImportedPageToLayer(cb.PdfWriter.DirectContentUnder, _MSWordLayer, fgPage, 0, 0);
 | 
				
			||||||
 | 
											OnStatusChanged("Merge MSWord", PromsPrinterStatusType.MergeMSWord);
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
										OnStatusChanged("Before NewPage", PromsPrinterStatusType.Before);
 | 
				
			||||||
 | 
										cb.PdfDocument.NewPage();
 | 
				
			||||||
 | 
										OnStatusChanged("After NewPage", PromsPrinterStatusType.NewPage);
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									SavePageNumbering(docStyle);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								CloseDocument(cb, outputFileName);
 | 
				
			||||||
 | 
								// Return the fileName;
 | 
				
			||||||
 | 
								return outputFileName;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							private void SetupPageCount(ProcedureInfo myProcedure, Proms2010Procedure proc)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								_PLPage = 1;
 | 
				
			||||||
 | 
								_PageNumber = new Dictionary<string, int>();
 | 
				
			||||||
 | 
								_PageNumber.Add("Procedure Steps", 1);
 | 
				
			||||||
 | 
								_PageCount = new Dictionary<string, int>();
 | 
				
			||||||
 | 
								_PageCount.Add("Procedure Steps", 0);
 | 
				
			||||||
 | 
								foreach (SectionInfo mySection in myProcedure.Sections)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (mySection.IsStepSection)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										Proms2010Section sect = proc == null ? null : proc.GetSection(mySection);
 | 
				
			||||||
 | 
										if (sect != null) _PageCount["Procedure Steps"] += sect.PageCount;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									else
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										FormatInfo activeFormat = mySection.ActiveFormat;
 | 
				
			||||||
 | 
										DocStyle docStyle = GetDocStyle(activeFormat, (mySection.MyContent.Type ?? 10000));
 | 
				
			||||||
 | 
										int pageCount = Convert.ToInt32(Math.Ceiling(mySection.MyContent.MyEntry.MyDocument.DocumentConfig.Printing_Length));
 | 
				
			||||||
 | 
										switch (docStyle.IsStepSection ? E_NumberingSequence.WithSteps : docStyle.NumberingSequence ?? E_NumberingSequence.WithSteps)
 | 
				
			||||||
 | 
										{
 | 
				
			||||||
 | 
											case E_NumberingSequence.WithSteps:
 | 
				
			||||||
 | 
												_PageCount["Procedure Steps"] += pageCount;
 | 
				
			||||||
 | 
												break;
 | 
				
			||||||
 | 
											case E_NumberingSequence.NoPageNum:
 | 
				
			||||||
 | 
											case E_NumberingSequence.WithinEachDocStyle:
 | 
				
			||||||
 | 
											case E_NumberingSequence.WithinEachSection:
 | 
				
			||||||
 | 
											case E_NumberingSequence.WithinEachDocStyle1:
 | 
				
			||||||
 | 
											case E_NumberingSequence.GroupedByPagination:
 | 
				
			||||||
 | 
											case E_NumberingSequence.GroupedByLevel:
 | 
				
			||||||
 | 
											case E_NumberingSequence.WithStepsAndSecondaryPageNumber:
 | 
				
			||||||
 | 
											case E_NumberingSequence.WithStepsAndSecondaryPageNumberGroupedByLevel:
 | 
				
			||||||
 | 
											case E_NumberingSequence.Like6_ButDoesntNeedSubsection:
 | 
				
			||||||
 | 
											case E_NumberingSequence.Like6_ButDoesntNeedSubsection1:
 | 
				
			||||||
 | 
											default:
 | 
				
			||||||
 | 
												break;
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							Dictionary<string,int> _PageNumber;
 | 
				
			||||||
 | 
							Dictionary<string,int> _PageCount;
 | 
				
			||||||
 | 
							private void SavePageNumbering(DocStyle docStyle)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								switch (docStyle.IsStepSection ? E_NumberingSequence.WithSteps : docStyle.NumberingSequence ?? E_NumberingSequence.WithSteps)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									case E_NumberingSequence.WithSteps:
 | 
				
			||||||
 | 
										_PageNumber["Procedure Steps"] = _PLPage;
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case E_NumberingSequence.NoPageNum:
 | 
				
			||||||
 | 
									case E_NumberingSequence.WithinEachDocStyle:
 | 
				
			||||||
 | 
									case E_NumberingSequence.WithinEachSection:
 | 
				
			||||||
 | 
									case E_NumberingSequence.WithinEachDocStyle1:
 | 
				
			||||||
 | 
									case E_NumberingSequence.GroupedByPagination:
 | 
				
			||||||
 | 
									case E_NumberingSequence.GroupedByLevel:
 | 
				
			||||||
 | 
									case E_NumberingSequence.WithStepsAndSecondaryPageNumber:
 | 
				
			||||||
 | 
									case E_NumberingSequence.WithStepsAndSecondaryPageNumberGroupedByLevel:
 | 
				
			||||||
 | 
									case E_NumberingSequence.Like6_ButDoesntNeedSubsection:
 | 
				
			||||||
 | 
									case E_NumberingSequence.Like6_ButDoesntNeedSubsection1:
 | 
				
			||||||
 | 
									default:
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							//private int _PLNextPage = 0;
 | 
				
			||||||
 | 
							//private int _PLNextOf = 0;
 | 
				
			||||||
 | 
							private void SetupPageNumbering(DocStyle docStyle, int pageCount)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								//_PLNextOf = pageCount;
 | 
				
			||||||
 | 
								switch (docStyle.IsStepSection ? E_NumberingSequence.WithSteps : docStyle.NumberingSequence ?? E_NumberingSequence.WithSteps)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									case E_NumberingSequence.WithSteps:
 | 
				
			||||||
 | 
										_PLPage = _PageNumber["Procedure Steps"];
 | 
				
			||||||
 | 
										_PLOf = _PageCount["Procedure Steps"];
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case E_NumberingSequence.NoPageNum:
 | 
				
			||||||
 | 
									case E_NumberingSequence.WithinEachDocStyle:
 | 
				
			||||||
 | 
									case E_NumberingSequence.WithinEachSection:
 | 
				
			||||||
 | 
									case E_NumberingSequence.WithinEachDocStyle1:
 | 
				
			||||||
 | 
									case E_NumberingSequence.GroupedByPagination:
 | 
				
			||||||
 | 
									case E_NumberingSequence.GroupedByLevel:
 | 
				
			||||||
 | 
									case E_NumberingSequence.WithStepsAndSecondaryPageNumber:
 | 
				
			||||||
 | 
									case E_NumberingSequence.WithStepsAndSecondaryPageNumberGroupedByLevel:
 | 
				
			||||||
 | 
									case E_NumberingSequence.Like6_ButDoesntNeedSubsection:
 | 
				
			||||||
 | 
									case E_NumberingSequence.Like6_ButDoesntNeedSubsection1:
 | 
				
			||||||
 | 
									default:
 | 
				
			||||||
 | 
										_PLOf = pageCount;
 | 
				
			||||||
 | 
										_PLPage = 1;
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							Console.WriteLine("'{0}','{1}',{2}",docStyle.Name, docStyle.NumberingSequence,_PLPage);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							private Svg BuildSvg(SectionInfo section,FormatInfo activeFormat,DocStyle docStyle)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								Svg mySvg = null;
 | 
				
			||||||
 | 
								mySvg = SvgSerializer<Svg>.StringDeserialize(BuildMyText(activeFormat));
 | 
				
			||||||
 | 
								mySvg.ViewBox.Height = 1100;
 | 
				
			||||||
 | 
								mySvg.ViewBox.Width = 850;
 | 
				
			||||||
 | 
								mySvg.Height = new SvgMeasurement(11, E_MeasurementUnits.IN);
 | 
				
			||||||
 | 
								mySvg.Width = new SvgMeasurement(8.5F, E_MeasurementUnits.IN);
 | 
				
			||||||
 | 
								mySvg.LeftMargin = (float)docStyle.Layout.LeftMargin;
 | 
				
			||||||
 | 
								mySvg.TopMargin = 9.6F;
 | 
				
			||||||
 | 
								PageStyle pageStyle = docStyle.pagestyle;
 | 
				
			||||||
 | 
								AddPageListItems(mySvg, pageStyle, section);
 | 
				
			||||||
 | 
								//DocStyle docStyle = GetDocStyle(activeFormat, (section.MyContent.Type ?? 10000));
 | 
				
			||||||
 | 
								mySvg.ProcessText += new SvgProcessTextEvent(mySvg_ProcessText);
 | 
				
			||||||
 | 
								return mySvg;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							private static Regex regexTextOnly = new Regex(@"^[^{}]*$");
 | 
				
			||||||
 | 
							private static Regex regexJustTokens = new Regex(@"^{([^{}\?]*}{)*[^{}\?]*}$");
 | 
				
			||||||
 | 
							private static Regex regexConditional = new Regex(@"^{.*\?.*}$");
 | 
				
			||||||
 | 
							private static Regex regexFindToken = new Regex("{[^{}]*}");
 | 
				
			||||||
 | 
							private void AddPageListItems(Svg mySvg, PageStyle pageStyle, SectionInfo section)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								SvgGroup svgGroup = new SvgGroup();
 | 
				
			||||||
 | 
								foreach (PageItem pageItem in pageStyle.PageItems)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (regexJustTokens.IsMatch(pageItem.Token))
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										MatchCollection matches = regexFindToken.Matches(pageItem.Token);
 | 
				
			||||||
 | 
										foreach (Match match in matches)
 | 
				
			||||||
 | 
										{
 | 
				
			||||||
 | 
											string token = match.Value;
 | 
				
			||||||
 | 
											switch (match.Value)
 | 
				
			||||||
 | 
											{
 | 
				
			||||||
 | 
												case "{HEADER1}":
 | 
				
			||||||
 | 
												case "{HEADER2}":
 | 
				
			||||||
 | 
												case "{HEADER3}":
 | 
				
			||||||
 | 
												case "{HEADER4}":
 | 
				
			||||||
 | 
												case "{HEADER5}":
 | 
				
			||||||
 | 
												case "{BOX1}":
 | 
				
			||||||
 | 
												case "{BOX2}":
 | 
				
			||||||
 | 
												case "{BOX3}":
 | 
				
			||||||
 | 
												case "{BOX4}":
 | 
				
			||||||
 | 
												case "{BOX5}":
 | 
				
			||||||
 | 
												case "{BOX6}":
 | 
				
			||||||
 | 
												case "{BOX7}":
 | 
				
			||||||
 | 
												case "{BOX8}":
 | 
				
			||||||
 | 
													svgGroup.Add(PageItemToSvgUse(pageItem, FirstAndLast(token)));
 | 
				
			||||||
 | 
													break;
 | 
				
			||||||
 | 
												case "{DRAFTPAGE}":
 | 
				
			||||||
 | 
												case "{REFERENCEPAGE}":
 | 
				
			||||||
 | 
												case "{MASTERPAGE}":
 | 
				
			||||||
 | 
												case "{SAMPLEPAGE}":
 | 
				
			||||||
 | 
													mySvg.SetValidWaterMark(token, _Watermark);
 | 
				
			||||||
 | 
													break;
 | 
				
			||||||
 | 
												case "{PROCTITLE}":
 | 
				
			||||||
 | 
													SplitTitle(svgGroup, pageItem, section.MyProcedure.DisplayText, (int)section.ActiveFormat.PlantFormat.FormatData.ProcData.TitleLength);
 | 
				
			||||||
 | 
													break;
 | 
				
			||||||
 | 
												case "{EOPNUM}":
 | 
				
			||||||
 | 
													svgGroup.Add(PageItemToSvgText(pageItem, section.MyProcedure.DisplayNumber));
 | 
				
			||||||
 | 
													break;
 | 
				
			||||||
 | 
												case "{SECTIONLEVELTITLE}":
 | 
				
			||||||
 | 
													SplitTitle(svgGroup, pageItem, section.DisplayText, section.ActiveFormat.PlantFormat.FormatData.SectData.SectionTitleLength);
 | 
				
			||||||
 | 
													svgGroup.Add(PageItemToSvgText(pageItem, section.DisplayText));
 | 
				
			||||||
 | 
													break;
 | 
				
			||||||
 | 
												case "{SECTIONLEVELNUMBER}":
 | 
				
			||||||
 | 
													svgGroup.Add(PageItemToSvgText(pageItem, section.DisplayNumber));
 | 
				
			||||||
 | 
													break;
 | 
				
			||||||
 | 
												default:
 | 
				
			||||||
 | 
													Console.WriteLine("Token not processed {0}", token);
 | 
				
			||||||
 | 
													break;
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									else
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										svgGroup.Add(PageItemToSvgText(pageItem,pageItem.Token));
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								mySvg.Add(svgGroup);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							private string FirstAndLast(string token)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								// strip the curly braces and return the first and last character
 | 
				
			||||||
 | 
								// For example Header1 becomes H1 and Box2 becomes B2
 | 
				
			||||||
 | 
								return token.Substring(1, 1) + token.Substring(token.Length - 2, 1);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							private void SplitTitle(SvgGroup svgGroup, PageItem pageItem, string title, int? len)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								// TODO: need to calculate len in either points or inches and use the font from the pageItem to determine the number of characters
 | 
				
			||||||
 | 
								if(len == null || title.Length < len)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									svgGroup.Add(PageItemToSvgText(pageItem, title));
 | 
				
			||||||
 | 
									return;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								// Otherwise determine how many line to split the text into
 | 
				
			||||||
 | 
								List<string> titleLines = SplitText(title,(int)len);
 | 
				
			||||||
 | 
								// Move up 6 Points per line to find the starting point
 | 
				
			||||||
 | 
								float yOffset = -6 * (titleLines.Count-1);
 | 
				
			||||||
 | 
								foreach (string line in titleLines)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									svgGroup.Add(PageItemToSvgText(pageItem, line, yOffset));
 | 
				
			||||||
 | 
									yOffset += 12;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							private List<string> SplitText(string title, int len)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								List<string> retval = new List<string>();
 | 
				
			||||||
 | 
								int strlen = title.Length;
 | 
				
			||||||
 | 
								int start = 0;
 | 
				
			||||||
 | 
								while ((strlen - start) > len)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									int width = FindWidth(title, start, len);
 | 
				
			||||||
 | 
									retval.Add(title.Substring(start, width));
 | 
				
			||||||
 | 
									start += width;
 | 
				
			||||||
 | 
									while (title[start] == ' ') start++;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if (strlen - start > 0)
 | 
				
			||||||
 | 
									retval.Add(title.Substring(start, strlen - start));
 | 
				
			||||||
 | 
								return retval;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							private int FindWidth(string title, int start, int len)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								for (int ii = start + len; ii > start; ii--)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (title[ii] == ' ')
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										while (title[ii] == ' ') ii--;
 | 
				
			||||||
 | 
										if (ii > start) 
 | 
				
			||||||
 | 
											return 2 + ii - start;
 | 
				
			||||||
 | 
										return len;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								return len;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							private string BuildMyText(FormatInfo activeFormat)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								string sGenMac = activeFormat.GenMac;
 | 
				
			||||||
 | 
								if (!sGenMac.Contains("xmlns"))
 | 
				
			||||||
 | 
									sGenMac = sGenMac.Replace("<svg ", "<svg xmlns='http://www.w3.org/2000/svg' ");
 | 
				
			||||||
 | 
								XmlDocument xDocGenMac = new XmlDocument();
 | 
				
			||||||
 | 
								xDocGenMac.LoadXml(sGenMac); // Add xmlns if necessary
 | 
				
			||||||
 | 
								Svg mySvg = new Svg();
 | 
				
			||||||
 | 
								SvgDefine def = new SvgDefine();
 | 
				
			||||||
 | 
								mySvg.Add(def);
 | 
				
			||||||
 | 
								def.ID = "GenMac Templates";
 | 
				
			||||||
 | 
								string str = SvgSerializer<Svg>.StringSerialize(mySvg);
 | 
				
			||||||
 | 
								XmlDocument xDocPrintout = new XmlDocument();
 | 
				
			||||||
 | 
								xDocPrintout.LoadXml(str);
 | 
				
			||||||
 | 
								XmlNode xn = xDocPrintout.DocumentElement.ChildNodes[0];
 | 
				
			||||||
 | 
								xn.AppendChild(xDocPrintout.ImportNode(xDocGenMac.DocumentElement, true));
 | 
				
			||||||
 | 
								return xDocPrintout.OuterXml;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							private DocStyle GetDocStyle(FormatInfo formatInfo, int type)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								int i = type - 10000;
 | 
				
			||||||
 | 
								return formatInfo.PlantFormat.DocStyles.DocStyleList[i];
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							private SvgPart PageItemToSvgUse(PageItem pageItem, string templateName)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								SvgUse svgUse = new SvgUse();
 | 
				
			||||||
 | 
								svgUse.UseID = templateName;
 | 
				
			||||||
 | 
								svgUse.X = new SvgMeasurement((float)(pageItem.Col ?? 0), E_MeasurementUnits.PT);
 | 
				
			||||||
 | 
								svgUse.Y = new SvgMeasurement((float)(pageItem.Row ?? 0), E_MeasurementUnits.PT);
 | 
				
			||||||
 | 
								return svgUse;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							private static SvgText PageItemToSvgText(PageItem pageItem, string text)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								SvgText svgText = new SvgText();
 | 
				
			||||||
 | 
								svgText.Text = text;
 | 
				
			||||||
 | 
								E_Justify justify = pageItem.Justify ?? E_Justify.PSLeft;
 | 
				
			||||||
 | 
								if ((justify & E_Justify.PSLeft) == E_Justify.PSLeft)
 | 
				
			||||||
 | 
									svgText.Justify = SvgJustify.Left;
 | 
				
			||||||
 | 
								else if ((justify & E_Justify.PSRight) == E_Justify.PSRight)
 | 
				
			||||||
 | 
									svgText.Justify = SvgJustify.Right;
 | 
				
			||||||
 | 
								else
 | 
				
			||||||
 | 
									svgText.Justify = SvgJustify.Center;
 | 
				
			||||||
 | 
								svgText.Font = pageItem.Font.WindowsFont;
 | 
				
			||||||
 | 
								svgText.X = new SvgMeasurement((float)(pageItem.Col ?? 0), E_MeasurementUnits.PT);
 | 
				
			||||||
 | 
								svgText.Y = new SvgMeasurement((float)(pageItem.Row ?? 0), E_MeasurementUnits.PT);
 | 
				
			||||||
 | 
								if (svgText.Font.Underline && svgText.Text.EndsWith(" ")) svgText.Text = svgText.Text.Substring(0, svgText.Text.Length - 1) + "\xA0";// replace last space with a hardspace
 | 
				
			||||||
 | 
								return svgText;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							private SvgPart PageItemToSvgText(PageItem pageItem, string text, float yOffset)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								SvgText svgText = new SvgText();
 | 
				
			||||||
 | 
								svgText.Text = text;
 | 
				
			||||||
 | 
								E_Justify justify = pageItem.Justify ?? E_Justify.PSLeft;
 | 
				
			||||||
 | 
								if ((justify & E_Justify.PSLeft) == E_Justify.PSLeft)
 | 
				
			||||||
 | 
									svgText.Justify = SvgJustify.Left;
 | 
				
			||||||
 | 
								else if ((justify & E_Justify.PSRight) == E_Justify.PSRight)
 | 
				
			||||||
 | 
									svgText.Justify = SvgJustify.Right;
 | 
				
			||||||
 | 
								else
 | 
				
			||||||
 | 
									svgText.Justify = SvgJustify.Center;
 | 
				
			||||||
 | 
								svgText.Font = pageItem.Font.WindowsFont;
 | 
				
			||||||
 | 
								svgText.X = new SvgMeasurement((float)(pageItem.Col ?? 0), E_MeasurementUnits.PT);
 | 
				
			||||||
 | 
								svgText.Y = new SvgMeasurement((float)(yOffset + pageItem.Row ?? 0), E_MeasurementUnits.PT);
 | 
				
			||||||
 | 
								if (svgText.Font.Underline && svgText.Text.EndsWith(" ")) svgText.Text = svgText.Text.Substring(0, svgText.Text.Length - 1) + "\xA0";// replace last space with a hardspace
 | 
				
			||||||
 | 
								return svgText;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						public static class MSWordToPDF
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							private static LBApplicationClass _MyApp = null;
 | 
				
			||||||
 | 
							public static LBApplicationClass MyApp
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								get
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (_MyApp == null)
 | 
				
			||||||
 | 
										_MyApp = new LBApplicationClass();
 | 
				
			||||||
 | 
									return _MyApp;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							public static string ToPDFReplaceROs(SectionInfo sect, bool openPdf, System.Windows.Forms.Form myForm )
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								int docStyleIndex = ((int)sect.MyContent.Type) % 10000;
 | 
				
			||||||
 | 
								DocStyle myDocStyle = sect.ActiveFormat.PlantFormat.DocStyles.DocStyleList[docStyleIndex];
 | 
				
			||||||
 | 
								PageStyle myPageStyle = myDocStyle.pagestyle;
 | 
				
			||||||
 | 
								ProcedureInfo proc = sect.ActiveParent as ProcedureInfo;
 | 
				
			||||||
 | 
								DocVersionInfo dvi = proc.ActiveParent as DocVersionInfo;
 | 
				
			||||||
 | 
								ROFstInfo rofst = dvi.DocVersionAssociations[0].MyROFst;
 | 
				
			||||||
 | 
								ROFSTLookup lookup = rofst.ROFSTLookup;
 | 
				
			||||||
 | 
								string igPrefix = dvi.DocVersionConfig.RODefaults_graphicsprefix;
 | 
				
			||||||
 | 
								string spPrefix = dvi.DocVersionConfig.RODefaults_setpointprefix;
 | 
				
			||||||
 | 
								//    string AccPageID = string.Format("<{0}-{1}>", accPrefix, roch.appid);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								//AddInfo("{0}:{1}", proc.DisplayNumber, (sect.DisplayNumber == "" ? sect.DisplayText : sect.DisplayNumber));
 | 
				
			||||||
 | 
								using (DSOFile myFile = new DSOFile(sect.MyContent.MyEntry.MyDocument))
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									LBDocumentClass myDoc = MyApp.Documents.Open(myFile.FullName);
 | 
				
			||||||
 | 
									float newTop = (float)myDocStyle.Layout.TopRow;
 | 
				
			||||||
 | 
									float newLeft = (float)myDocStyle.Layout.LeftMargin;
 | 
				
			||||||
 | 
									float newLength = (float)myDocStyle.Layout.PageLength;
 | 
				
			||||||
 | 
									float newWidth = (float)myDocStyle.Layout.PageWidth;
 | 
				
			||||||
 | 
									float oldTop = myDoc.PageSetup.TopMargin;
 | 
				
			||||||
 | 
									float oldLeft = myDoc.PageSetup.LeftMargin;
 | 
				
			||||||
 | 
									float oldBottom = myDoc.PageSetup.BottomMargin;
 | 
				
			||||||
 | 
									float oldRight = myDoc.PageSetup.RightMargin;
 | 
				
			||||||
 | 
									float oldHeight = myDoc.PageSetup.PageHeight;
 | 
				
			||||||
 | 
									float oldWidth = myDoc.PageSetup.PageWidth;
 | 
				
			||||||
 | 
									float newRight = oldWidth - (newWidth + newLeft);
 | 
				
			||||||
 | 
									if (newRight < 0) newRight = 0;
 | 
				
			||||||
 | 
									float newBottom = oldBottom - newTop;
 | 
				
			||||||
 | 
									//Console.WriteLine("{0},{1},{2},{3},{4},{5},{6},{7},{8},{9}", newTop, newLeft, newLength, newWidth, oldTop, oldLeft, oldBottom, oldRight,oldHeight,oldWidth);
 | 
				
			||||||
 | 
									myDoc.PageSetup.BottomMargin = 0;// 11 * 72 - (newTop + newLength);
 | 
				
			||||||
 | 
									myDoc.PageSetup.RightMargin = newRight;
 | 
				
			||||||
 | 
									myDoc.PageSetup.LeftMargin = newLeft;
 | 
				
			||||||
 | 
									myDoc.PageSetup.TopMargin = newTop;
 | 
				
			||||||
 | 
									LBSelection sel = FindRO();
 | 
				
			||||||
 | 
									while (sel != null)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										string val = lookup.GetROValueByAccPagID(sel.Text, spPrefix, igPrefix);
 | 
				
			||||||
 | 
										int? type = lookup.GetROTypeByAccPagID(sel.Text, spPrefix, igPrefix);
 | 
				
			||||||
 | 
										if ((int)type == 8) // Image
 | 
				
			||||||
 | 
										{
 | 
				
			||||||
 | 
											//Console.WriteLine("Image: {0} - {1}", sect.MyContent.Number, sect.MyContent.Text);
 | 
				
			||||||
 | 
											bool imageROTokenReplaced = false;
 | 
				
			||||||
 | 
											string[] vals = val.Split("\n".ToCharArray());
 | 
				
			||||||
 | 
											ROImageInfo roImage = ROImageInfo.GetByROFstID_FileName(rofst.ROFstID, vals[0]);
 | 
				
			||||||
 | 
											if (roImage != null)
 | 
				
			||||||
 | 
											{
 | 
				
			||||||
 | 
												ROImageFile roImageFile = new ROImageFile(roImage);
 | 
				
			||||||
 | 
												float width = 72 * Int32.Parse(vals[3], System.Globalization.NumberStyles.AllowHexSpecifier) / 12.0F;
 | 
				
			||||||
 | 
												int lines = Int32.Parse(vals[2], System.Globalization.NumberStyles.AllowHexSpecifier);
 | 
				
			||||||
 | 
												float height = 72 * lines / 6.0F;
 | 
				
			||||||
 | 
												//sel.MoveEnd(LBWdUnits.wdLine, lines);// The number of lines depends on the third parameter
 | 
				
			||||||
 | 
												//sel.EndKey(LBWdUnits.wdLine, true);
 | 
				
			||||||
 | 
												//sel.MoveEnd(LBWdUnits.wdCharacter, -1);
 | 
				
			||||||
 | 
												//Console.WriteLine("Lines = {0}", lines);
 | 
				
			||||||
 | 
												sel.Text = "";
 | 
				
			||||||
 | 
												// TODO: Need to create a temporary file for printing.
 | 
				
			||||||
 | 
												// TODO: Need a way to eliminate the temporary file when done printing.
 | 
				
			||||||
 | 
												// LBInlineShape shape = sel.InlineShapes.AddPicture(@"C:\Plant\HLP\VEHLP\ro\No1Seal.bmp");
 | 
				
			||||||
 | 
												float x = (float)sel.get_Information(LBWdInformation.wdHorizontalPositionRelativeToPage);
 | 
				
			||||||
 | 
												float y = (float)sel.get_Information(LBWdInformation.wdVerticalPositionRelativeToPage);
 | 
				
			||||||
 | 
												//LBInlineShape shape = sel.InlineShapes.AddPicture(pngFile);
 | 
				
			||||||
 | 
												LBRange myRange = sel.Paragraphs.First.Range;
 | 
				
			||||||
 | 
												float yTop = (float)myRange.get_Information(LBWdInformation.wdVerticalPositionRelativeToPage);
 | 
				
			||||||
 | 
												LBShape shape = myDoc.Shapes.AddPicture(roImageFile.MyFile.FullName, x, y - yTop, sel.Range);
 | 
				
			||||||
 | 
												// LBInlineShape shape = sel.InlineShapes.AddPicture(roImageFile.MyFile.FullName);
 | 
				
			||||||
 | 
												//Console.WriteLine("{0} Shape Width {1} Height {2}", val.Replace("\n", "','"), shape.Width, shape.Height);
 | 
				
			||||||
 | 
												shape.Width = width;
 | 
				
			||||||
 | 
												shape.Height = height;
 | 
				
			||||||
 | 
												//Console.WriteLine("{0} Shape Width {1} Height {2}", val.Replace("\n", "','"), shape.Width, shape.Height);
 | 
				
			||||||
 | 
												imageROTokenReplaced = true;
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
 | 
											if (!imageROTokenReplaced)
 | 
				
			||||||
 | 
												sel.Text = string.Format("Bad Image Link (Missing Image File:{0})", vals[0]);
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
										else if ((int)type == 4)  // X-Y Plot
 | 
				
			||||||
 | 
										{
 | 
				
			||||||
 | 
											val = val.Replace("`", "\xB0");
 | 
				
			||||||
 | 
											//AddInfo("\tRO Found {0} = '{1}'", sel.Text, val);
 | 
				
			||||||
 | 
											sel.Text = "";
 | 
				
			||||||
 | 
											//float width = 72 * Int32.Parse(vals[3], System.Globalization.NumberStyles.AllowHexSpecifier) / 12.0F;
 | 
				
			||||||
 | 
											//float height = 72 * lines / 6.0F;
 | 
				
			||||||
 | 
											string pngFile = @"C:\Temp\XYPlot1.png";
 | 
				
			||||||
 | 
											RectangleF plotRect = CreatePlot(pngFile, val, 600F,myForm);
 | 
				
			||||||
 | 
											//LBShape shape = myDoc.Shapes.AddPicture(@"C:\Temp\XYPlot.png", 0, 0, sel.Range);
 | 
				
			||||||
 | 
											float x = (float)sel.get_Information(LBWdInformation.wdHorizontalPositionRelativeToPage);
 | 
				
			||||||
 | 
											float y = (float)sel.get_Information(LBWdInformation.wdVerticalPositionRelativeToPage);
 | 
				
			||||||
 | 
											//LBInlineShape shape = sel.InlineShapes.AddPicture(pngFile);
 | 
				
			||||||
 | 
											LBRange myRange = sel.Paragraphs.First.Range;
 | 
				
			||||||
 | 
											float yTop = (float)myRange.get_Information(LBWdInformation.wdVerticalPositionRelativeToPage);
 | 
				
			||||||
 | 
											float xAdjust = -29.3F; // TODO: Check this value
 | 
				
			||||||
 | 
											float yAdjust = 9.1F; // TODO: Check this value
 | 
				
			||||||
 | 
											LBShape shape = myDoc.Shapes.AddPicture(pngFile, x + xAdjust + plotRect.X, yAdjust + y - yTop + plotRect.Y, sel.Range);
 | 
				
			||||||
 | 
											//Console.WriteLine(",{0},{1},{2},{3}", x, y - yTop, xAdjust,yAdjust);
 | 
				
			||||||
 | 
											shape.LockAspectRatio = LBMsoTriState.msoTrue;
 | 
				
			||||||
 | 
											//shape.Width = .89F * shape.Width;
 | 
				
			||||||
 | 
											//shape.Width = float.Parse(tbAdjust.Text) * shape.Width;
 | 
				
			||||||
 | 
											shape.Width = plotRect.Width;
 | 
				
			||||||
 | 
											//shape.Height = .89F * shape.Height;
 | 
				
			||||||
 | 
											sel.WholeStory();
 | 
				
			||||||
 | 
											sel.Range.Font.Color = LBWdColor.wdColorRed;
 | 
				
			||||||
 | 
											//Console.WriteLine("{0} Shape Width {1} Height {2}", val.Replace("\n", "','"), shape.Width, shape.Height);
 | 
				
			||||||
 | 
											//shape.Width = width;
 | 
				
			||||||
 | 
											//shape.Height = height;
 | 
				
			||||||
 | 
											//Console.WriteLine("{0} Shape Width {1} Height {2}", val.Replace("\n", "','"), shape.Width, shape.Height);
 | 
				
			||||||
 | 
											//imageROTokenReplaced = true;
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
										else
 | 
				
			||||||
 | 
										{
 | 
				
			||||||
 | 
											val = val.Replace("`", "\xB0");
 | 
				
			||||||
 | 
											//AddInfo("\tRO Found {0} = '{1}'", sel.Text, val);
 | 
				
			||||||
 | 
											InsertROValue(sel, val, sect.ActiveFormat.PlantFormat.FormatData.ROData.UpRoIfPrevUpper);
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
										sel = FindRO();
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									sel = MyApp.Selection;
 | 
				
			||||||
 | 
									sel.WholeStory();
 | 
				
			||||||
 | 
									sel.Range.Font.Color = LBWdColor.wdColorRed;
 | 
				
			||||||
 | 
									sel.ParagraphFormat.LineSpacingRule = LBWdLineSpacing.wdLineSpaceExactly;
 | 
				
			||||||
 | 
									sel.ParagraphFormat.LineSpacing = 12;
 | 
				
			||||||
 | 
									//Console.WriteLine("{0},{1}", sel.ParagraphFormat.LineSpacing, sel.ParagraphFormat.LineSpacingRule);
 | 
				
			||||||
 | 
									string fileName = sect.DisplayNumber == "" ? sect.DisplayText : sect.DisplayNumber;
 | 
				
			||||||
 | 
									//MyApp.Visible = true;
 | 
				
			||||||
 | 
									//MessageBox.Show("Ready to make PDF");
 | 
				
			||||||
 | 
									//MyApp.Visible = false;
 | 
				
			||||||
 | 
									fileName = CreatePDF(fileName, openPdf);
 | 
				
			||||||
 | 
									//MyApp.Visible = true;
 | 
				
			||||||
 | 
									MyApp.ActiveDocument.Close();
 | 
				
			||||||
 | 
									MyApp.Quit();
 | 
				
			||||||
 | 
									_MyApp = null;
 | 
				
			||||||
 | 
									return fileName;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
										private static RectangleF CreatePlot(string pngFile, string xyPlot, float resolution, System.Windows.Forms.Form myForm)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								RectangleF retval = new RectangleF(0, 0, 0, 0);
 | 
				
			||||||
 | 
								Graphics grfx = myForm.CreateGraphics();
 | 
				
			||||||
 | 
								string emfFile = pngFile.Replace(".png", ".emf");
 | 
				
			||||||
 | 
								Metafile mf = new Metafile(emfFile, grfx.GetHdc());
 | 
				
			||||||
 | 
								grfx.Dispose();
 | 
				
			||||||
 | 
								grfx = Graphics.FromImage(mf);
 | 
				
			||||||
 | 
								float dpi = grfx.DpiX;
 | 
				
			||||||
 | 
								//grfx.ScaleTransform(resolution / grfx.DpiX, (resolution +1F) / grfx.DpiY);
 | 
				
			||||||
 | 
								grfx.ScaleTransform(resolution / grfx.DpiX, resolution / grfx.DpiY);
 | 
				
			||||||
 | 
								grfx.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
 | 
				
			||||||
 | 
								grfx.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
 | 
				
			||||||
 | 
								grfx.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
 | 
				
			||||||
 | 
								grfx.Clear(System.Drawing.Color.Transparent);
 | 
				
			||||||
 | 
								XYPlots.XYPlot.BlackColor = System.Drawing.Color.Red;
 | 
				
			||||||
 | 
								XYPlots.XYPlot myPlot = new XYPlots.XYPlot(xyPlot);
 | 
				
			||||||
 | 
								myPlot.SetMargins(0, 0, 0, 0);
 | 
				
			||||||
 | 
								myPlot.Process(new VG.VGOut_Graphics(grfx));
 | 
				
			||||||
 | 
								grfx.Dispose();
 | 
				
			||||||
 | 
								GraphicsUnit gu = new GraphicsUnit();
 | 
				
			||||||
 | 
								retval = mf.GetBounds(ref gu);
 | 
				
			||||||
 | 
								retval.Width *= dpi / resolution;
 | 
				
			||||||
 | 
								retval.Height *= dpi / resolution;
 | 
				
			||||||
 | 
								retval.X *= dpi / resolution;
 | 
				
			||||||
 | 
								retval.Y *= dpi / resolution;
 | 
				
			||||||
 | 
								//retval.X = myPlot.Width-retval.Width;
 | 
				
			||||||
 | 
								//AddInfo("{0},{1},{2},{3},{4},{5}", myPlot.Width, myPlot.Height, retval.Width, retval.Height,retval.X,retval.Y);
 | 
				
			||||||
 | 
								//Console.Write("{0},{1},{2},{3}", myPlot.Width, myPlot.Height, retval.Width, retval.Height);
 | 
				
			||||||
 | 
								mf.Save(pngFile, ImageFormat.Png);
 | 
				
			||||||
 | 
								//Console.WriteLine("'pngfile','{0}'", pngFile);
 | 
				
			||||||
 | 
								mf.Dispose();
 | 
				
			||||||
 | 
								FileInfo myFile = new System.IO.FileInfo(emfFile);
 | 
				
			||||||
 | 
								myFile.Delete();
 | 
				
			||||||
 | 
								return retval;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							private static void InsertROValue(LBSelection sel, string roValue, bool upRoIfPrevUpper)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								if (roValue == null)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									sel.Text = "RO Not Found";
 | 
				
			||||||
 | 
									sel.Font.Color = LBWdColor.wdColorRed;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								else
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (upRoIfPrevUpper && sel.LastWasUpper) roValue = roValue.ToUpper();
 | 
				
			||||||
 | 
									// Convert fortran formatted numbers to scientific notation.
 | 
				
			||||||
 | 
									
 | 
				
			||||||
 | 
									string tmp = DisplayRO.ConvertFortranFormatToScienctificNotation(roValue);
 | 
				
			||||||
 | 
									// Look for superscript or subscript and insert the appropriate commands
 | 
				
			||||||
 | 
									Match roMatch = Regex.Match(tmp, @"(.*?)\\(super|sub) (.*?)\\nosupersub ");
 | 
				
			||||||
 | 
									if (roMatch.Groups.Count == 4)// Superscript or subscript found
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										sel.Font.Color = LBWdColor.wdColorRed;
 | 
				
			||||||
 | 
										while (roMatch.Groups.Count == 4)
 | 
				
			||||||
 | 
										{
 | 
				
			||||||
 | 
											sel.TypeText(roMatch.Groups[1].Value); // output the text preceeding the super or sub command
 | 
				
			||||||
 | 
											sel.Font.Position = roMatch.Groups[2].Value=="super" ? 2 : -2; // Shift the vertical position for super or sub
 | 
				
			||||||
 | 
											sel.TypeText(roMatch.Groups[3].Value); // output the superscript or subscript
 | 
				
			||||||
 | 
											sel.Font.Position = 0; // restore the vertical position 
 | 
				
			||||||
 | 
											tmp = tmp.Substring(roMatch.Length);  // remove the processed text
 | 
				
			||||||
 | 
											roMatch = Regex.Match(tmp, @"(.*?)\\(super|sub) (.*?)\\nosupersub ");  //  check to see if the text contain another super or sub
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
										if(tmp != "")// Add any remaining text
 | 
				
			||||||
 | 
											sel.TypeText(tmp);
 | 
				
			||||||
 | 
										sel.Font.Color = LBWdColor.wdColorAutomatic;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									else // if no superscripts or subscripts just output the text
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										sel.Text = roValue;
 | 
				
			||||||
 | 
										sel.Font.Color = LBWdColor.wdColorRed;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							private static LBSelection FindRO()
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								LBSelection sel = MyApp.Selection;
 | 
				
			||||||
 | 
								LBFind find = sel.Find;
 | 
				
			||||||
 | 
								find.ClearFormatting();
 | 
				
			||||||
 | 
								find.Text = "[<](?@)-(?@)[>]";
 | 
				
			||||||
 | 
								//find.Wrap = LBWdFindWrap.wdFindStop;
 | 
				
			||||||
 | 
								find.Wrap = LBWdFindWrap.wdFindContinue;
 | 
				
			||||||
 | 
								find.MatchCase = false;
 | 
				
			||||||
 | 
								find.MatchWholeWord = false;
 | 
				
			||||||
 | 
								find.MatchWildcards = true;
 | 
				
			||||||
 | 
								find.MatchSoundsLike = false;
 | 
				
			||||||
 | 
								find.MatchAllWordForms = false;
 | 
				
			||||||
 | 
								if (find.Execute()) return sel;
 | 
				
			||||||
 | 
								return null;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							private static string CreatePDF(string fileName, bool openPdf)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								return MyApp.CreatePDF(@"C:\Temp\" + fileName + ".pdf", openPdf);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user