| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- using System;
- using System.Drawing.Printing;
- using System.Windows.Forms;
- using System.Runtime.InteropServices;
- using System.Text;
- namespace BulkPrinting
- {
- public class Printer
- {
- public const string UNIDIRECTIONAL_ON = "\x1B\x55\x31";
- public const string UNIDIRECTIONAL_OFF = "\x1B\x55\x30";
- public const string CR = "\x0d";
- public const string LF = "\x0a";
- public const string FORMFEED = "\x0c";
- public const string LINESPACE18 = "\x1B\x30";
- public const string LINESPACE772 = "\x1B\x31";
- public const string CHARPITCHS1 = "\x1B\x37";
- public const string CHARPITCHS2 = "\x1B\x36";
- public const string CHARPITCHPUB = "\x1B\x21\x5a";
- public const string CHARPITCHS0 = "\x1B\x21\x40";
- public const string CHARPITCHPICO = "\x1B\x50";
- public const string CHARPITCHELITE = "\x1B\x4D";
- public const string CONDENSED = "\x1B\x0F";
- public const string INITIALISE_PRINTER = "\x1B\x40";
- public const string EMPHASISE_ON = "\x1B\x45";
- public const string EMPHASISE_OFF = "\x1B\x46";
- public const int JOB_CONTROL_DELETE = 5;
- // Structure and API declarions:
- [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
- public class DOCINFOA
- {
- [MarshalAs(UnmanagedType.LPStr)] public string pDocName;
- [MarshalAs(UnmanagedType.LPStr)] public string pOutputFile;
- [MarshalAs(UnmanagedType.LPStr)] public string pDataType;
- }
- [StructLayout(LayoutKind.Sequential)]
- private struct SYSTEMTIME
- {
- Int16 wYear;
- Int16 wMonth;
- Int16 wDayOfWeek;
- Int16 wDay;
- Int16 wHour;
- Int16 wMinute;
- Int16 wSecond;
- Int16 wMilliseconds;
- }
- [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
- struct JOB_INFO_1
- {
- public UInt32 JobId;
- [MarshalAs(UnmanagedType.LPStr)] public string pPrinterName;
- [MarshalAs(UnmanagedType.LPStr)] public string pMachineName;
- [MarshalAs(UnmanagedType.LPStr)] public string pUserName;
- [MarshalAs(UnmanagedType.LPStr)] public string pDocument;
- [MarshalAs(UnmanagedType.LPStr)] public string pDatatype;
- [MarshalAs(UnmanagedType.LPStr)] public string pStatus;
- public UInt32 Status;
- public UInt32 Priority;
- public UInt32 Position;
- public UInt32 TotalPages;
- public UInt32 PagesPrinted;
- public SYSTEMTIME Submitted;
- }
- [DllImport("winspool.Drv", EntryPoint = "OpenPrinterA", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
- public static extern bool OpenPrinter([MarshalAs(UnmanagedType.LPStr)] string szPrinter, out IntPtr hPrinter, IntPtr pd);
- [DllImport("winspool.Drv", EntryPoint = "ClosePrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
- public static extern bool ClosePrinter(IntPtr hPrinter);
- [DllImport("winspool.Drv", EntryPoint = "StartDocPrinterA", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
- public static extern int StartDocPrinter(IntPtr hPrinter, Int32 level, [In, MarshalAs(UnmanagedType.LPStruct)] DOCINFOA di);
- [DllImport("winspool.Drv", EntryPoint = "EndDocPrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
- public static extern bool EndDocPrinter(IntPtr hPrinter);
- [DllImport("winspool.Drv", EntryPoint = "StartPagePrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
- public static extern bool StartPagePrinter(IntPtr hPrinter);
- [DllImport("winspool.Drv", EntryPoint = "EndPagePrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
- public static extern bool EndPagePrinter(IntPtr hPrinter);
- [DllImport("winspool.Drv", EntryPoint = "WritePrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
- public static extern bool WritePrinter(IntPtr hPrinter, IntPtr pBytes, Int32 dwCount, out Int32 dwWritten);
- [DllImport("winspool.drv", EntryPoint = "GetJobA", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
- private static extern bool GetJob (IntPtr hPrinter, Int32 JobId, Int32 Level, out byte[] pJob, Int32 cbBuf, out Int32 pcbNeeded);
- [DllImport("winspool.drv", EntryPoint = "SetJobA", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
- private static extern bool SetJob(IntPtr hPrinter, int JobId, int Level, out byte pJob, int Command_Renamed);
- /*=================================================*/
- private IntPtr HandlePrinter;
- private PrinterSettings ps;
- public Printer()
- {
- HandlePrinter = IntPtr.Zero;
- ps = new PrinterSettings();
- }
- public string PrinterName
- {
- get
- {
- return ps.PrinterName;
- }
- set
- {
- ps.PrinterName = value;
- }
- }
- public bool ChoosePrinter()
- {
- PrintDialog pd = new PrintDialog();
- pd.UseEXDialog = true; //Required for AMD64 based processors
- pd.PrinterSettings = ps;
- if (pd.ShowDialog() == DialogResult.OK)
- {
- ps = pd.PrinterSettings;
- return true;
- }
- else
- return false;
- }
- public bool GetJobInfo(int JobID) {
- //JOB_INFO_1 JobInfo = new JOB_INFO_1();
- byte[] JobInfoByte;
- int pcbNeeded;
- if (HandlePrinter == IntPtr.Zero) return false;
- GetJob(HandlePrinter, JobID, 1, out JobInfoByte, 240, out pcbNeeded);
- return false;
- }
- public int Open(string DocName)
- {
- // see if printer is already open
- if (HandlePrinter != IntPtr.Zero) return 0;
- // opens the printer
- bool risp = OpenPrinter(ps.PrinterName, out HandlePrinter, IntPtr.Zero);
- if (risp == false) return 0;
- // starts a print job
- DOCINFOA MyDocInfo = new DOCINFOA();
- MyDocInfo.pDocName = DocName;
- MyDocInfo.pOutputFile = null;
- MyDocInfo.pDataType = "RAW";
- int JobID = StartDocPrinter(HandlePrinter, 1, MyDocInfo);
- if (JobID > 0)
- {
- StartPagePrinter(HandlePrinter); //starts a page
- }
- return JobID;
- }
- public bool Close()
- {
- if (HandlePrinter == IntPtr.Zero) return false;
- if (!EndPagePrinter(HandlePrinter)) return false;
- if (!EndDocPrinter(HandlePrinter)) return false;
- if (!ClosePrinter(HandlePrinter)) return false;
- HandlePrinter = IntPtr.Zero;
- return true;
- }
- public bool Print(string outputstring)
- {
- if (HandlePrinter == IntPtr.Zero) return false;
- IntPtr buf = Marshal.StringToCoTaskMemAnsi(outputstring);
- Int32 done = 0;
- bool ok = WritePrinter(HandlePrinter, buf, outputstring.Length, out done);
- Marshal.FreeCoTaskMem(buf);
- if (!ok) return false;
- else return true;
- }
- public void NewPage() {
- EndPagePrinter(HandlePrinter);
- StartPagePrinter(HandlePrinter);
- }
- }
- }
|