From 3e12812a97b2fd050c46a5a2ad0981eb63a7c39d Mon Sep 17 00:00:00 2001 From: mschill Date: Tue, 25 Aug 2026 06:25:10 -0400 Subject: [PATCH] Clean up - Part of Current Repo --- PROMS/LBWordLibrary/LBObjectExtension.cs | 654 ----------------------- 1 file changed, 654 deletions(-) delete mode 100644 PROMS/LBWordLibrary/LBObjectExtension.cs diff --git a/PROMS/LBWordLibrary/LBObjectExtension.cs b/PROMS/LBWordLibrary/LBObjectExtension.cs deleted file mode 100644 index 8af4c527..00000000 --- a/PROMS/LBWordLibrary/LBObjectExtension.cs +++ /dev/null @@ -1,654 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Reflection; -using Microsoft.Win32; -using System.Windows.Forms; -using System.Text.RegularExpressions; -using Read64bitRegistryFrom32bitApp; - -namespace LBWordLibrary -{ - public partial class LBApplicationClass : LBComObject - { - private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); - /// - /// This gives the option of specifying Background = false to print in the foreground. - /// - /// boolean BackGround - /// If true - document will be printed in the background - /// If false - document will be printed in the foreground - public void PrintOut(Boolean Background) - { - InvokeMethod("PrintOut", Background, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value); - } - public void Quit(bool save) - { - InvokeMethod("Quit", save, Missing.Value, Missing.Value); - } - public bool VolianPDFInstalled - { - get - { - foreach (string printer in System.Drawing.Printing.PrinterSettings.InstalledPrinters) - if (printer == "VolianPDF Writer") return true; - return false; - } - } - private static bool? _WordPDFExporterInstalled = null; - public static bool WordPDFExporterInstalled - { - get - { - if (_WordPDFExporterInstalled == null) - { - // this is to determine if ExportAsFixedFormat was installed in MSOffice - // This key only worked for Vista - //RegistryKey key = Registry.ClassesRoot.OpenSubKey(@"Installer\Components\12B306B24E250DD428FC7016B6FB4BD8"); - // This key works for Windows Vista and Windows 7 - try - { - string keyPath = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\0E5C161912A2A6C4C93C76678926C56C"; - bool validKey = RegistryWOW6432.CheckRegKey64Valid(RegHive.HKEY_LOCAL_MACHINE, keyPath); - _WordPDFExporterInstalled = validKey; - if(!validKey) - _MyLog.WarnFormat("MSWord2007 PDF Export Registry Key Missing"); - //RegistryKey key = Registry.LocalMachine.OpenSubKey(keyPath, RegistryKeyPermissionCheck.ReadSubTree); - //if (key == null) - //{ - // RegistryKey localMachine64 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64); - // key = localMachine64.OpenSubKey(keystring, RegistryKeyPermissionCheck.ReadSubTree); - //} - //if (key != null) - //{ - // key.Close(); - // _WordPDFExporterInstalled = true; - // return (bool) _WordPDFExporterInstalled; - //} - //_WordPDFExporterInstalled = FindEXP_PDF(); - return (bool) _WordPDFExporterInstalled; - } - catch (Exception ex) - { - _MyLog.WarnFormat("MSWord2007 PDF Export Registry Key Failure {0} - {1}", ex.GetType().Name, ex.Message); - _WordPDFExporterInstalled = false; - return (bool) _WordPDFExporterInstalled; - } - - } - return (bool) _WordPDFExporterInstalled; - } - } - private static bool FindEXP_PDF() - { - bool retval = false; - DateTime dtStart = DateTime.Now; - try - { - //string keystr = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\0E5C161912A2A6C4C93C76678926C56C"; - RegistryKey key = null; - string keystr = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components"; - while (key == null && keystr != "") - { - key = Registry.LocalMachine.OpenSubKey(keystr, RegistryKeyPermissionCheck.ReadSubTree); - keystr = keystr.Substring(0, keystr.LastIndexOf("\\")); - } - if (FindKeys(key, "EXP_PDF.DLL")) - retval = true; - } - catch (Exception ex) - { - AddKeyFound(string.Format("{0} - {1}", ex.GetType().Name, ex.Message)); - } - finally - { - DateTime dtEnd = DateTime.Now; - TimeSpan ts = TimeSpan.FromTicks(dtEnd.Ticks - dtStart.Ticks); - AddKeyFound(string.Format("{0} Seconds", ts.TotalSeconds)); - } - return retval; - } - private static bool FindKeys(RegistryKey key, string find) - { - string[] keyNames = key.GetSubKeyNames(); - foreach (string keyName in keyNames) - { - using (RegistryKey subKey = key.OpenSubKey(keyName, RegistryKeyPermissionCheck.ReadSubTree)) - { - if (FindKeys(subKey, find)) return true; - } - } - if (FindNames(key, find)) return true; - return false; - } - private static bool FindNames(RegistryKey key, string find) - { - string[] names = key.GetValueNames(); - foreach (string name in names) - { - if (FindNames(key, name, find)) return true; - } - return false; - } - private static bool FindNames(RegistryKey key, string name, string find) - { - RegistryValueKind kind = key.GetValueKind(name); - if (kind == RegistryValueKind.String) - { - string val = (string)key.GetValue(name); - if (val.Contains(find)) - { - AddKeyFound(string.Format("'{0}'\r\n Value {1} = '{2}'", key.ToString(), name, val)); - return true; - } - } - return false; - } - private static void AddKeyFound(string str) - { - _MyLog.WarnFormat("RegistryKeySearch: {0}",str); - } - private bool CanCreatePDFFile(string pdfFileName) - { - System.IO.FileInfo file = new System.IO.FileInfo(pdfFileName); - if (!file.Exists) return true; - try - { - file.Delete(); - return true; - } - catch (System.IO.IOException exio) - { - if (exio.Message.StartsWith("The process cannot access the file")) return false; - throw new Exception(string.Format("Cannot Delete PDF file {0}", pdfFileName), exio); - } - catch (Exception ex) - { - throw new Exception(string.Format("Cannot Delete PDF file {0}", pdfFileName), ex); - } - } - private string AvailableFileName(string pdfFileName) - { - if (CanCreatePDFFile(pdfFileName)) return pdfFileName; - string prefix = pdfFileName.Replace(".pdf", ""); - for (int i = 1; i < 1000; i++) - { - string newname = string.Format("{0}_{1:000}.PDF", prefix, i); - if (CanCreatePDFFile(newname)) return newname; - } - throw new Exception("Cannot find a name to use"); - } - public string CreatePDF(string pdfFileName, bool openPDF,int DebugStatus) - { - pdfFileName = CreatePDF(pdfFileName, DebugStatus); - if (openPDF) OpenPDF(pdfFileName); - return pdfFileName; - } - static List _AcrobatProcesses=new List(); - private static void OpenPDF(string pdfFileName) - { - _AcrobatProcesses.Add(System.Diagnostics.Process.Start(pdfFileName)); - } - public static void ClosePDFs() - { - foreach(System.Diagnostics.Process proc in _AcrobatProcesses) - if (!proc.HasExited) - KillAndWait(proc); - } - private static void KillAndWait(System.Diagnostics.Process proc) - { - Console.WriteLine("{0:s.ffff} Killing Adobe", DateTime.Now); - DateTime tStart = DateTime.Now; - proc.Kill(); - DateTime tEnd = DateTime.Now.AddMilliseconds(100); - while (DateTime.Now < tEnd) - { - Application.DoEvents(); - } - Console.WriteLine("{0:yyyy-MM-dd HH:mm:ss.ffff} {1:yyyy-MM-dd HH:mm:ss.ffff} {2}", DateTime.Now, proc.ExitTime - ,TimeSpan.FromTicks(proc.ExitTime.Ticks - tStart.Ticks).TotalMilliseconds); - } - public string CreatePDF(string pdfFileName, int DebugStatus) - { - pdfFileName = AvailableFileName(pdfFileName); - if (((int)Convert.ToSingle(Version)) > 12) - return CreatePDF2007(pdfFileName, DebugStatus); - if (((int)Convert.ToSingle(Version)) == 12 && WordPDFExporterInstalled) - { - //_MyLog.WarnFormat("Word PDF Exporter Installed - MSWord Version = '{0}'" , Version); - return CreatePDF2007(pdfFileName, DebugStatus); - } - if (VolianPDFInstalled) - { - _MyLog.WarnFormat("Using VolianPDFWriter - MSWord Version = '{0}'", Version); - return CreatePDF2003BG(pdfFileName); - } - //else // Force PDF Export - //{ - // _MyLog.WarnFormat("Force PDF Export for Michelle - MSWord Version = '{0}'", Version); - // return CreatePDF2007(pdfFileName, DebugStatus); - throw new Exception("No PDF Writer support installed for MS Word sections"); - //} - } - public string CreatePDF2003FG(string pdfFileName, bool openPDF) - { - pdfFileName = CreatePDF2003FG(pdfFileName); - if (openPDF) OpenPDF(pdfFileName); - return pdfFileName; - } - public string CreatePDF2003FG(string pdfFileName) - { - pdfFileName = AvailableFileName(pdfFileName); - if (!VolianPDFInstalled) - throw new Exception("VolianPDF Writer is not installed properly"); - try - { - string printer = ActivePrinter; - RegistryKey key = Registry.CurrentUser.CreateSubKey(@"Software\VolianPDF Writer"); - key.SetValue("OutputFile", pdfFileName, RegistryValueKind.String); - key.SetValue("BypassSaveAs", "1", RegistryValueKind.String); - key.Close(); - ActivePrinter = "VolianPDF Writer"; - PrintOut(false); - ActivePrinter = printer; - Registry.CurrentUser.DeleteSubKeyTree(@"Software\VolianPDF Writer"); - return pdfFileName; - } - catch (Exception ex) - { - throw new Exception("Error creating PDF - LBApplicationClass.CreatePDF2003FG", ex); - } - } - public string CreatePDF2003BG(string pdfFileName, bool openPDF) - { - pdfFileName = CreatePDF2003BG(pdfFileName); - if (openPDF) OpenPDF(pdfFileName); - return pdfFileName; - } - public string CreatePDF2003BG(string pdfFileName) - { - pdfFileName = AvailableFileName(pdfFileName); - if (!VolianPDFInstalled) - throw new Exception("VolianPDF Writer is not installed properly"); - try - { - string printer = ActivePrinter; - RegistryKey key = Registry.CurrentUser.CreateSubKey(@"Software\VolianPDF Writer"); - key.SetValue("OutputFile", pdfFileName, RegistryValueKind.String); - key.SetValue("BypassSaveAs", "1", RegistryValueKind.String); - key.Close(); - ActivePrinter = "VolianPDF Writer"; - PrintOut(true); - do - { - // Console.WriteLine("Background Printing Status = {0}", _MyApp.BackgroundPrintingStatus); - Application.DoEvents(); - } while (BackgroundPrintingStatus == 1); - ActivePrinter = printer; - Registry.CurrentUser.DeleteSubKeyTree(@"Software\VolianPDF Writer"); - return pdfFileName; - } - catch (Exception ex) - { - throw new Exception("Error creating PDF - LBApplicationClass.CreatePDF2003BG", ex); - } - } - public string CreatePDF2007(string pdfFileName, bool openPDF, int DebugStatus) - { - pdfFileName = CreatePDF2007(pdfFileName, DebugStatus); - if (openPDF) OpenPDF(pdfFileName); - return pdfFileName; - } - public string CreatePDF2007(string pdfFileName,int DebugStatus) - { - pdfFileName = AvailableFileName(pdfFileName); - // Removed to support MSWord 2010 and beyond. - //if (!WordPDFExporterInstalled) - // throw new Exception("MS Word PDF Exporter is not installed"); - try - { - ActiveDocument.ExportAsFixedFormat(pdfFileName, LBWdExportFormat.wdExportFormatPDF, DebugStatus); - return pdfFileName; - } - catch (Exception ex) - { - throw new Exception("Error creating PDF - LBApplicationClass.CreatePDF2007", ex); - } - } - } - public partial class LBDocuments - { - public LBDocumentClass Open(string fileName, Boolean addToRecentFiles) - { - return Open(fileName, Missing.Value, Missing.Value, addToRecentFiles); - } - private LBDocumentClass Open(params object[] myParams) - { - return new LBDocumentClass(InvokeMethod("Open", myParams)); - } - } - public partial class LBDocumentClass : LBComObject - { - public void ExportAsFixedFormat(string OutputFileName, LBWdExportFormat ExportFormat, int DebugStatus) - { - // iso 19005-1 compliant (PDF/A) [UseISO19005_1] should be set to false. for compare print - // iso 19005-1 compliant (PDF/A) [UseISO19005_1] should be set to true for production print - InvokeMethod("ExportAsFixedFormat", OutputFileName, ExportFormat, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, DebugStatus == 0, Missing.Value); - } - private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); - public void SaveAs2000(string fileName) - { - if (fileName.ToUpper().EndsWith("DOC")) - SaveAs2000(fileName, LBWdSaveFormat.wdFormatDocument); - else if (fileName.ToUpper().EndsWith("RTF")) - SaveAs2000(fileName, LBWdSaveFormat.wdFormatRTF); - else - SaveAs2000(fileName); - } - public void SaveAs2000(params object[] myParams) - { - InvokeMethod("SaveAs2000", myParams); - } - public void SaveAs(string fileName) - { - if (fileName.ToUpper().EndsWith("DOC")) - SaveAs2(fileName, LBWdSaveFormat.wdFormatDocument, Missing.Value, Missing.Value, false); - else if (fileName.ToUpper().EndsWith("RTF")) - SaveAs2(fileName, LBWdSaveFormat.wdFormatRTF, Missing.Value, Missing.Value, false); - else if (fileName.ToUpper().EndsWith("TXT")) - SaveAs2(fileName, LBWdSaveFormat.wdFormatDOSText, Missing.Value, Missing.Value, false); - else if (fileName.ToUpper().EndsWith("DOCX")) - SaveAs2(fileName, LBWdSaveFormat.wdFormatXMLDocument, Missing.Value, Missing.Value, false); - else - SaveAs2(fileName, Missing.Value, Missing.Value, Missing.Value, false); - } - public void SaveAs2(params object[] myParams) - { - InvokeMethod("SaveAs", myParams); - } - public void SaveAs(string fileName, LBWdSaveFormat format) - { - SaveAs2(fileName, format, Missing.Value, Missing.Value, false); - } - public LBRange Range(int Start, int End) - { - return new LBRange(InvokeMethod("Range", Start, End)); - } - /// - /// Length is Pages and Partial Pages - /// The integral part is the number of full pages - /// The decimal part is the size of the last page divided by 7200 - /// (the first two digits should be the number of inches) - /// - public float Length - { - get - { - ActiveWindow.ActivePane.View.Type = LBWdViewType.wdPrintView; - ActiveWindow.View.Type = LBWdViewType.wdPrintView; - LBPages myPages = ActiveWindow.ActivePane.Pages;// Start with pages - float retval = (float)myPages.Count - 1; - LBRange myRange = Range(); - - myRange = myRange.GoTo(LBWdGoToItem.wdGoToPercent, LBWdGoToDirection.wdGoToAbsolute, 0); - float mytop = myRange.PageSetup.TopMargin; - myRange = myRange.GoTo(LBWdGoToItem.wdGoToPercent, LBWdGoToDirection.wdGoToLast, 100); - //float partial = (float) myRange.get_Information(LBWdInformation.wdVerticalPositionRelativeToTextBoundary); - // B2018-028 Word 2016 has a different value for the Vertical Position Relative to the Text Boundary than older version of Word. - // We now need to calculated the last row of text in the PROMS attachment differently. - // We now subtract the TopMargin the Page Setup from the Vertical Position Relative to the Page - // this works with older versions of MS Word as well. - float partial = (float)myRange.get_Information(LBWdInformation.wdVerticalPositionRelativeToPage) - mytop; - partial += myRange.Font.Size; - retval += partial / 7200; - return retval; - } - } - public string Ascii - { - get - { - LBRange myRange = Range(); - myRange = myRange.GoTo(LBWdGoToItem.wdGoToPercent, LBWdGoToDirection.wdGoToLast, 100); - myRange.Start = 0; - return ReplaceSymbolCharacters(GetRangeText(myRange)); - } - } - private static string[] SymbolFontName = { "VolianDraw", "WingDings", "VESymb", "VESymbFix", "Symbol" }; - private static bool IsSymbolFont(string fontName) - { - foreach (string symbolFont in SymbolFontName) - if (fontName.ToUpper().StartsWith(symbolFont.ToUpper())) - return true; - return false; - } - - /// - /// Checks to see if the document contains symbol characters - /// - /// - public bool HasSymbolCharacters - { - get - { - LBRange myRange = Range(); - myRange = myRange.GoTo(LBWdGoToItem.wdGoToPercent, LBWdGoToDirection.wdGoToLast, 100); - myRange.Start = 0; - int end = myRange.End; - string myText = GetRangeText(myRange); - //return _RegFindSymbol.IsMatch(myText); - MatchCollection problems = _RegFindSymbol.Matches(myText); - int offset = 0; - foreach (Match problem in problems) - { - myRange.Start = problem.Index + offset; - myRange.End = problem.Index + problem.Length + offset; - int newOffset = FindRangeOffset(myRange, problem, offset, end); - if (IsSymbolFont(myRange.Font.Name)) - { - Console.WriteLine("Font '{0}' has Symbols", myRange.Font.Name); - //return true; - } - else - return true; - offset = newOffset; - } - return false; - } - } - Regex _RegFindSymbol = new Regex("[\\uF020-\\uF07F]+"); - - /// - /// Get the Range Text with error handling. myRange.Text sometimes will get a null reference exception. - /// - /// - /// - internal static string GetRangeText(LBRange myRange) - { - string text=""; - try - { - if (myRange.Start == myRange.End)// If Start and End equal return an empty string. - text = ""; - else - text = myRange.Text; - } - catch (Exception ex) - { - Console.WriteLine("GetRangeText {0} - {1}", ex.GetType().Name, ex.Message); - } - return text; - } - /// - /// Looks for the problem string and adjusts the range as necessary - /// - /// - /// - /// - /// - /// - private int FindRangeOffset(LBRange myRange, Match problem, int offset, int end) - { - // try to find the string - string text = GetRangeText(myRange); - if (text != problem.Value) - { - // Get the entire text starting at the offset of the first match - myRange.Start = problem.Index + offset; - myRange.End = end; - text = GetRangeText(myRange); - while (!text.StartsWith(problem.Value)) - { - int newStart = text.IndexOf(problem.Value);// Find the string if it is not at the beginning - myRange.Start += myRange.Start == newStart ? newStart + 1 : newStart; // adjust the starting location - text = GetRangeText(myRange);// get the text to check - } - myRange.End = myRange.Start + problem.Length; // assume that the end should be the start plus the length - text = GetRangeText(myRange); - while (text.Length < problem.Length) // If the result is too short increase the length - { - myRange.End += (problem.Length - text.Length); - text = GetRangeText(myRange); - } - } - return myRange.Start - problem.Index; - } - /// - /// ReplaceSymbolCharacters processes the string returned and changes any symbols (0xF0??) to normal characters - /// - /// - /// - private static string ReplaceSymbolCharacters(string str) - { - StringBuilder results = new StringBuilder(); - foreach (char c in str) - { - if ((c & 0xFF00) == 0xF000) - results.Append((char)(c & 0xFF)); - else - results.Append((char)(c)); - } - return results.ToString(); - } - /// - /// Close the document - /// - /// Save Changes - public void Close(bool SaveChanges) - { - InvokeMethod("Close", SaveChanges, Missing.Value, Missing.Value); - } - } - public partial class LBFind - { - public void ReplaceAll() - { - this.Execute(Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, - Missing.Value, Missing.Value, Missing.Value, Missing.Value, LBWdReplace.wdReplaceAll, Missing.Value, - Missing.Value, Missing.Value, Missing.Value); - } - } - public partial class LBFontClass : LBComObject - { - public int TextColor - { - get { return (int)GetProperty("Color"); } - set { SetProperty("Color", value); } - } - } - public partial class LBRange : LBComObject - { - public Object get_Information(LBWdInformation info) - { - return GetProperty("Information", info); - } - public LBRange GoTo(LBWdGoToItem What, LBWdGoToDirection Which, int Count) - { - return new LBRange(InvokeMethod("GoTo", What, Which, Count, Missing.Value)); - } - } - public partial class LBSelection : LBComObject - { - public Object get_Information(LBWdInformation info) - { - return GetProperty("Information", info); - } - public int MoveStart(LBWdUnits Unit, int Count) - { - return InvokeMethod("MoveStart", Unit, Count) as int? ?? 0; - } - public int MoveEnd(LBWdUnits Unit, int Count) - { - return InvokeMethod("MoveEnd", Unit, Count) as int? ?? 0; - } - public int EndKey(LBWdUnits Unit, bool Extend) - { - return InvokeMethod("EndKey", Unit, Extend) as int? ?? 0; - } - public bool LastWasUpper - { - get - { - LBRange myRange = Range; - int start = myRange.Start - 1; - while (start >= 0) - { - myRange.Start = start; - myRange.End = start + 1; - string previous = LBDocumentClass.GetRangeText(myRange); - if (Regex.IsMatch(previous, "[A-Z]")) return true; - if (Regex.IsMatch(previous, "[a-z]")) return false; - start = start - 1; - } - return false; - } - } - } - public partial class LBInlineShapes : LBComObjectList /* Collection */ - { - public LBInlineShape AddPicture(string FileName, LBRange Range) - { - return new LBInlineShape(InvokeMethod("AddPicture", FileName, false, true, Range)); - } - } - public partial class LBShapes : LBComObjectList /* Collection */ - { - public LBShape AddPicture(string FileName, float Left, float Top, LBRange Anchor) - { - return new LBShape(InvokeMethod("AddPicture", FileName, false, true, Left, Top, Missing.Value, Missing.Value, Anchor)); - } - public LBShape AddPicture(string FileName, float Left, float Top) - { - return new LBShape(InvokeMethod("AddPicture", FileName, false, true, Left, Top, Missing.Value, Missing.Value, Missing.Value)); - } - } - public enum LBMsoTriState - { - msoCTrue = 1, - msoFalse = 0, - msoTriStateMixed = -2, - msoTriStateToggle = -3, - msoTrue = -1 - } - //public partial class ProcessKiller - //{ - // System.Diagnostics.Process _MyProcess; - // private bool _Exited = false; - // public ProcessKiller(System.Diagnostics.Process myProcess) - // { - // _MyProcess = myProcess; - // _MyProcess.Exited += new EventHandler(_MyProcess_Exited); - // _MyProcess.Kill(); - // DateTime next = DateTime.Now.AddMilliseconds(200); - // while (DateTime.Now < next) - // Application.DoEvents(); - // while (!_Exited) - // Application.DoEvents(); - // } - // void _MyProcess_Exited(object sender, EventArgs e) - // { - // Console.WriteLine("Exited"); - // _Exited = true; - // } - //} -}