using System; using System.Windows.Forms; using System.Drawing.Printing; using System.Runtime.InteropServices; using System.Linq; namespace Neo.LegitimateLicences.ActiveX.Printing { [Guid("88D0F232-D644-4251-8620-16C0EC51028F")] public interface IAccreditationCertificatePrinterInterface { void PrintAccreditationCertificate(string accreditationNumber, string name, string idNumber, string issueDate, string expiryDate, string certificateNumber, string printedBy, string printedDate, short copies, int height, int width, string printerPath, bool preview, bool isTest); } [ProgId("NPTR.ActiveX.Printing.AccreditationCertificatePrinterControl")] [Guid("D570545C-0292-4528-AF52-3E886702658A")] [ClassInterface(ClassInterfaceType.None)] public partial class AccreditationCertificatePrinterControl : UserControl, IAccreditationCertificatePrinterInterface { #region Properties private string _accreditationNumber; private string _name; private string _idNumber; private string _issueDate; private string _expiryDate; private string _certificateNumber; private string _printedBy; private string _printedDate; private short _copies; private string _printerPath; private int _height; private int _width; private int _leftMargin; private bool _preview; private bool _isTest; #endregion #region AccreditationCertificatePrinterControl public AccreditationCertificatePrinterControl() { InitializeComponent(); //#region Testing //AccreditationNumberTextBox.Text = "ACCR000000001"; //NameTextBox.Text = "HB Software Development"; //IDNumberTextBox.Text = "7812065192000"; //IssueDateTextBox.Text = "10 Aug 2016"; //ExpiryDateTextBox.Text = "10 Aug 2021"; //CertificateNumberTextBox.Text = "CRT123456"; //CopiesTextBox.Text = "1"; //PrinterPathTextBox.Text = "PDFCreator"; //PrintedByTextBox.Text = "Hannes Bantjes"; //PrintedDateTextBox.Text = "08 Sep 2016 10:00AM"; //HeightTextBox.Text = "297"; //WidthTextBox.Text = "210"; //PreviewCheckBox.Checked = true; //#endregion } #endregion #region public PrintAccreditationCertificate method public void PrintAccreditationCertificate(string accreditationNumber, string name, string idNumber, string issueDate, string expiryDate, string certificateNumber, string printedBy, string printedDate, short copies, int height, int width, string printerPath, bool preview, bool isTest) { _accreditationNumber = accreditationNumber; _name = name; _idNumber = idNumber; _issueDate = issueDate; _expiryDate = expiryDate; _certificateNumber = certificateNumber; _printedBy = printedBy; _printedDate = printedDate; _isTest = isTest; _printedBy = printedBy; _printedDate = printedDate; _copies = copies; _printerPath = printerPath; _height = height; //in mm _width = width; //in mm _leftMargin = 55; _preview = preview; _isTest = isTest; AccreditationNumberTextBox.Text = _accreditationNumber; NameTextBox.Text = _name; IDNumberTextBox.Text = _idNumber; IssueDateTextBox.Text = _issueDate; ExpiryDateTextBox.Text = _expiryDate; CertificateNumberTextBox.Text = _certificateNumber; PrinterPathTextBox.Text = _printerPath; PrintedByTextBox.Text = _printedBy; PrintedDateTextBox.Text = _printedDate; #region CopiesTextBox if (copies.ToString() == "999") { var userInput = Microsoft.VisualBasic.Interaction.InputBox("Please enter the number of receipts you would like to print.", "Print receipts", "6", 400, 400).ToString(); try { if (userInput.Length == 0) { throw new Exception("Invalid Input"); } var numberCopies = Int32.Parse(userInput); CopiesTextBox.Text = numberCopies.ToString(); } catch { MessageBox.Show("Invalid number entered."); return; } } else { CopiesTextBox.Text = copies.ToString(); } #endregion HeightTextBox.Text = height.ToString(); WidthTextBox.Text = width.ToString(); PreviewCheckBox.Checked = preview; isTestCheckBox.Checked = isTest; PrinterPathTextBox.Text = GetPrinter(printerPath); if (PrinterPathTextBox.Text.Length == 0) { MessageBox.Show("No printers found."); } else { try { Print(); if (!preview) { MessageBox.Show(CopiesTextBox.Text + " copies printed to " + PrinterPathTextBox.Text); } } catch (Exception e) { MessageBox.Show(e.Message); } } } #endregion #region private Print() Method private void Print() { if (!_isTest) { if (Microsoft.VisualBasic.Interaction.MsgBox("Please put the blank licence in the printer and click OK" + (char)13 + (char)10 + "Printing Accreditation Certificate For: " + NameTextBox.Text + (char)13 + (char)10 + "Certificate Number: " + CertificateNumberTextBox.Text, Microsoft.VisualBasic.MsgBoxStyle.OkOnly, "Confirm") != Microsoft.VisualBasic.MsgBoxResult.Ok) { return; } } var AccreditationCertificatePrinter = new AccreditationCertificatePrinter( AccreditationNumberTextBox.Text, NameTextBox.Text, IDNumberTextBox.Text, IssueDateTextBox.Text, ExpiryDateTextBox.Text, CertificateNumberTextBox.Text, PrintedByTextBox.Text, PrintedDateTextBox.Text, Convert.ToInt16(CopiesTextBox.Text), Convert.ToInt16(HeightTextBox.Text), Convert.ToInt16(WidthTextBox.Text), PrinterPathTextBox.Text, PreviewCheckBox.Checked, isTestCheckBox.Checked); AccreditationCertificatePrinter.Print(); } #endregion #region getPrinter private static string GetPrinter(string printerPath) { var printerName = ""; foreach (var printer in PrinterSettings.InstalledPrinters.Cast().Where(printer => printer.ToLower().Contains(printerPath.ToLower()))) { printerName = printer; } //Revert to default printer if name not found if (printerName == "") { PrinterSettings settings = new PrinterSettings(); foreach (string printer in PrinterSettings.InstalledPrinters) { settings.PrinterName = printer; if (settings.IsDefaultPrinter) { printerName = printer; break; } } } return printerName; } #endregion #region PrintButtonClick private void PrintButtonClick(object sender, EventArgs e) { Print(); } #endregion } }