public static IState Instance(PrinterException pe)
        {
            Error err = null;

            if (pe.InnerException == null)
            {
                err = new Error(pe);
            }
            else
            {
                err = new Error(pe.InnerException);
            }

            printerError      = err;
            err.ReturnConfirm = Instance;

            cr.State = States.AlertCashier.Instance(err);
            return(state);
        }
Beispiel #2
0
        public void Print(byte[] content)
        {
            Exception exception = null;

            WinSpoolWrapper.DOCINFOA di = new WinSpoolWrapper.DOCINFOA
            {
                pDocName  = "Cloudspool",
                pDataType = "RAW"
            };

            if (WinSpoolWrapper.OpenPrinter(PrinterName.Normalize(), out var printerHandle, IntPtr.Zero))
            {
                if (WinSpoolWrapper.StartDocPrinter(printerHandle, 1, di))
                {
                    if (WinSpoolWrapper.StartPagePrinter(printerHandle))
                    {
                        IntPtr pUnmanagedBytes = Marshal.AllocCoTaskMem(content.Length);

                        Marshal.Copy(content, 0, pUnmanagedBytes, content.Length);

                        if (!WinSpoolWrapper.WritePrinter(printerHandle, pUnmanagedBytes, content.Length, out var written))
                        {
                            exception = new PrinterException("Unable to write to printer.");
                        }

                        Marshal.FreeCoTaskMem(pUnmanagedBytes);

                        WinSpoolWrapper.EndPagePrinter(printerHandle);
                    }
                    else
                    {
                        exception = new PrinterException("Cannot start page.");
                    }

                    WinSpoolWrapper.EndDocPrinter(printerHandle);
                }
                else
                {
                    exception = new PrinterException("Cannot start document.");
                }

                WinSpoolWrapper.ClosePrinter(printerHandle);
            }