Ejemplo n.º 1
0
        private static void Print(string printerName, byte[] document)
        {
            try
            {
                NativeMethods.DOC_INFO_1 documentInfo;
                IntPtr printerHandle;

                documentInfo           = new NativeMethods.DOC_INFO_1();
                documentInfo.pDataType = "RAW";
                documentInfo.pDocName  = "Receipt";

                printerHandle = new IntPtr(0);

                if (NativeMethods.OpenPrinter(printerName.Normalize(), out printerHandle, IntPtr.Zero))
                {
                    if (NativeMethods.StartDocPrinter(printerHandle, 1, documentInfo))
                    {
                        int    bytesWritten;
                        byte[] managedData;
                        IntPtr unmanagedData;

                        managedData   = document;
                        unmanagedData = Marshal.AllocCoTaskMem(managedData.Length);
                        Marshal.Copy(managedData, 0, unmanagedData, managedData.Length);

                        if (NativeMethods.StartPagePrinter(printerHandle))
                        {
                            NativeMethods.WritePrinter(
                                printerHandle,
                                unmanagedData,
                                managedData.Length,
                                out bytesWritten);
                            NativeMethods.EndPagePrinter(printerHandle);
                        }
                        else
                        {
                            throw new Win32Exception();
                        }

                        Marshal.FreeCoTaskMem(unmanagedData);

                        NativeMethods.EndDocPrinter(printerHandle);
                    }
                    else
                    {
                        throw new Win32Exception();
                    }

                    NativeMethods.ClosePrinter(printerHandle);
                }
                else
                {
                    throw new Win32Exception();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Visitor Detail : Print : " + ex.Source, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
Ejemplo n.º 2
0
         /// <summary>
         /// Create a print job with a string datatype
         /// </summary>
         /// <param name="PrinterName"></param>
         /// <param name="dataType"></param>
         /// <param name="jobName"></param>
         /// <param name="outputFileName"></param>
         public GdiPrintJob(string PrinterName, string dataType, string jobName, string outputFileName)
         {
             if (string.IsNullOrWhiteSpace(PrinterName))
                 throw new ArgumentNullException("PrinterName");
             if (string.IsNullOrWhiteSpace(dataType))
                 throw new ArgumentNullException("PrinterName");
 
             IntPtr hPrinter;
             if (!NativeMethods.OpenPrinter(PrinterName, out hPrinter, IntPtr.Zero))
                 throw new Win32Exception();
             this.PrinterHandle = hPrinter;
 
             NativeMethods.DOC_INFO_1 docInfo = new NativeMethods.DOC_INFO_1()
             {
                 DocName = jobName,
                 Datatype = dataType,
                 OutputFile = outputFileName
             };
             IntPtr pDocInfo = Marshal.AllocHGlobal(Marshal.SizeOf(docInfo));
             RuntimeHelpers.PrepareConstrainedRegions();
             try
             {
                 Marshal.StructureToPtr(docInfo, pDocInfo, false);
                 UInt32 docid = NativeMethods.StartDocPrinter(hPrinter, 1, pDocInfo);
                 if (docid == 0)
                     throw new Win32Exception();
                 this.PrintJobID = docid;
             }
             finally
             {
                 Marshal.FreeHGlobal(pDocInfo);
             }
         }
Ejemplo n.º 3
0
    public static void PrintRaw(string printerName, byte[] data)
    {
        NativeMethods.DOC_INFO_1 documentInfo;
        IntPtr printerHandle = new IntPtr(0);

        documentInfo           = new NativeMethods.DOC_INFO_1();
        documentInfo.pDataType = "RAW";
        documentInfo.pDocName  = "Etiqueta";

        if (NativeMethods.OpenPrinter(printerName.Normalize(), out printerHandle, IntPtr.Zero))
        {
            if (NativeMethods.StartDocPrinter(printerHandle, 1, documentInfo))
            {
                int    bytesWritten;
                IntPtr unmanagedData = Marshal.AllocCoTaskMem(data.Length);
                Marshal.Copy(data, 0, unmanagedData, data.Length);

                if (NativeMethods.StartPagePrinter(printerHandle))
                {
                    NativeMethods.WritePrinter(
                        printerHandle,
                        unmanagedData,
                        data.Length,
                        out bytesWritten);
                    NativeMethods.EndPagePrinter(printerHandle);
                }
                else
                {
                    throw new Win32Exception();
                }

                Marshal.FreeCoTaskMem(unmanagedData);

                NativeMethods.EndDocPrinter(printerHandle);
            }
            else
            {
                throw new Win32Exception();
            }

            NativeMethods.ClosePrinter(printerHandle);
        }
        else
        {
            throw new Win32Exception();
        }
    }