//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ // MyCustomPrintLibrary.MyPrintClass.cs //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ // Global Access Software InTernational // Copyrighted (c) 2019 by John P. Edwards // First Created December 02, 2014 2:53 AM //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ // Split this section out to simplify PMP // v2.5.0.61 Nov 05 2016 05:52 AM // v2.5.0.79 Nov 12 2016 05:52 AM // Custom Brush below fixes that! // v3.6.4.81 Jan 02 2017 Final: //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ // Brought this one in from MyLilBlackBook: // v4.9.5.95 20-Dec-2018 PB.MyPrintEvent1 // v4.9.5.96 31-Dec Revision simplifies. // v4.9.5.98 12-Jan-2019 Moved to Project. // v5.0.5.98 12-Jan-2019 Integrate to Beta. // v5.0.5.99 15-Jan-2019 MCPL Design change. // v5.0.6.01 22-Feb-2019 Dialing it all in Now! // v5.0.6.01 02-Mar-2019 Fixedwell w/MPP Menu // items calling back across, etc. // v5.0.6.02 08-Mar-2019 Batch Stuff & Debug // v5.0.6.03 14-Mar-2019 ReSetPages Call. // v5.0.6.03 16-Mar-2019 Split to simplify. //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ using System.Drawing.Printing; using System.Threading; using MCC = MyCustomControls.CustomControl; using MPC = MyCustomPrintLibrary.MyPrintClass; using MFC = MyCustomPrintLibrary.MyFontClass; using MPR = MyCustomPrintLibrary .Properties.Resources; using MPS = MyCustomPrintLibrary .Properties.Settings; namespace MyCustomPrintLibrary { public static partial class MyPrintEvent { internal static string DocContents { get; set; } private static string StrToPrint { get; set; } private static int CurrentPage { get; set; } private static bool _firstPage = true; private static readonly Mutex Mini = new Mutex(false, MPR.Mini); /// Each & Every Page Printed /// Passes thru here! PrintBlaster /// v4.9.5.95 23-Dec-2018 by -JpE- 100% /// /// /// public static void PrintPageEventHandler(object sender, PrintPageEventArgs eventP) { var pd = sender as PrintDocument; if (eventP == null || pd == null || string.IsNullOrEmpty( DocContents)) return; Mini.WaitOne(); eventP.PageSettings // trickit .PrinterSettings = pd.PrinterSettings; if(_firstPage) StrToPrint = DocContents; var charsOnPage = GetCharsNum( eventP, StrToPrint); MyPrintEvent2(ref eventP); if (!string.IsNullOrEmpty( StrToPrint)) StrToPrint = StrToPrint.Substring( charsOnPage); eventP.HasMorePages = StrToPrint.Length > 0; if (!eventP.HasMorePages) { _firstPage = true; CurrentPage = 0; StrToPrint = DocContents; } Mini.ReleaseMutex(); } private static void SomePages1( ref PrintPageEventArgs p) { if (string.IsNullOrEmpty( DocContents)) return; var page = CalculatePages(p); if (p.PageSettings.PrinterSettings .FromPage > page) p.PageSettings .PrinterSettings.FromPage = 1; // Correct ^v either or both if over. if (p.PageSettings.PrinterSettings .ToPage > page) p.PageSettings .PrinterSettings.ToPage = page; } private static int CalculatePages( PrintPageEventArgs p) { var pages = 0; var text = DocContents; do { var chars = GetCharsNum(p, text); ++pages; text = text.Substring(chars); } while (!string.IsNullOrEmpty(text)); return pages; } //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ } }