Advertisement
Guest User

RawPrinterHelper

a guest
Jun 9th, 2015
363
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.35 KB | None | 0 0
  1.  public class RawPrinterHelper
  2.     {
  3.         [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
  4.         public struct DOCINFOW
  5.         {
  6.             [MarshalAs(UnmanagedType.LPWStr)]
  7.             public string pDocName;
  8.             [MarshalAs(UnmanagedType.LPWStr)]
  9.             public string pOutputFile;
  10.             [MarshalAs(UnmanagedType.LPWStr)]
  11.             public string pDataType;
  12.         }
  13.  
  14.         [DllImport("winspool.Drv", EntryPoint = "OpenPrinterW", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true, ExactSpelling = true)]
  15.         public static extern bool OpenPrinter(string src, ref IntPtr hPrinter, long pd);
  16.  
  17.  
  18.  
  19.         [DllImport("winspool.Drv", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true, ExactSpelling = true)]
  20.         public static extern bool ClosePrinter(IntPtr hPrinter);
  21.  
  22.  
  23.  
  24.         [DllImport("winspool.Drv", EntryPoint = "StartDocPrinterW", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true, ExactSpelling = true)]
  25.         public static extern bool StartDocPrinter(IntPtr hPrinter, int level, ref RawPrinterHelper.DOCINFOW pDI);
  26.  
  27.  
  28.  
  29.         [DllImport("winspool.Drv", EntryPoint = "EndDocPrinter", SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
  30.         public static extern bool EndDocPrinter(IntPtr hPrinter);
  31.  
  32.  
  33.         [DllImport("winspool.Drv", EntryPoint = "StartPagePrinter", SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
  34.         public static extern bool StartPagePrinter(IntPtr hPrinter);
  35.  
  36.  
  37.         [DllImport("winspool.Drv", EntryPoint = "EndPagePrinter", SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
  38.         public static extern bool EndPagePrinter(IntPtr hPrinter);
  39.  
  40.  
  41.         [DllImport("winspool.Drv", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true, ExactSpelling = true)]
  42.         public static extern bool WritePrinter(IntPtr hPrinter, IntPtr pBytes, int dwCount, ref int dwWritten);
  43.  
  44.  
  45.  
  46.         public static bool SendBytesToPrinter(string szPrinterName, IntPtr pBytes, Int32 dwCount)
  47.         {
  48.             IntPtr hPrinter = System.IntPtr.Zero;
  49.             Int32 dwError;
  50.             DOCINFOW di = new DOCINFOW();
  51.             Int32 dwWritten = 0;
  52.             bool bSuccess;
  53.             di.pDocName = "My Document";
  54.             di.pDataType = "RAW";
  55.             bSuccess = false;
  56.             if (OpenPrinter(szPrinterName, ref hPrinter, 0))
  57.             {
  58.                 if (StartDocPrinter(hPrinter, 1, ref di))
  59.                 {
  60.                     if (StartPagePrinter(hPrinter))
  61.                     {
  62.                         bSuccess = WritePrinter(hPrinter, pBytes, dwCount, ref dwWritten);
  63.                         EndPagePrinter(hPrinter);
  64.                     }
  65.                     EndDocPrinter(hPrinter);
  66.                 }
  67.                 ClosePrinter(hPrinter);
  68.             }
  69.             if (bSuccess == false)
  70.             {
  71.                 dwError = Marshal.GetLastWin32Error();
  72.             }
  73.             return bSuccess;
  74.  
  75.         }
  76.  
  77.  
  78.         public static bool SendFileToPrinter(string szPrinterName, string szFileName)
  79.         {
  80.             FileStream stream1 = new FileStream(szFileName, FileMode.Open);
  81.             BinaryReader reader1 = new BinaryReader(stream1);
  82.             byte[] buffer1 = new byte[((int)stream1.Length) + 1];
  83.             buffer1 = reader1.ReadBytes((int)stream1.Length);
  84.             IntPtr ptr1 = Marshal.AllocCoTaskMem((int)stream1.Length);
  85.             Marshal.Copy(buffer1, 0, ptr1, (int)stream1.Length);
  86.             bool flag1 = RawPrinterHelper.SendBytesToPrinter(szPrinterName, ptr1, (int)stream1.Length);
  87.             Marshal.FreeCoTaskMem(ptr1);
  88.             return flag1;
  89.  
  90.         }
  91.  
  92.         public static void SendStringToPrinter(string szPrinterName, string szString)
  93.         {
  94.             IntPtr pBytes;
  95.             Int32 dwCount;
  96.             dwCount = szString.Length;
  97.             pBytes = Marshal.StringToCoTaskMemAnsi(szString);
  98.             SendBytesToPrinter(szPrinterName, pBytes, dwCount);
  99.             Marshal.FreeCoTaskMem(pBytes);
  100.         }
  101.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement