internal static extern bool WritePrinter( // 0 SafePrinterHandle hPrinter, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)] byte[] pBytes, // 2 uint dwCount, out uint dwWritten);
/// <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.IsNullOrEmpty(PrinterName)) { throw new ArgumentException("Contract assertion not met: !String.IsNullOrEmpty(PrinterName)", nameof(PrinterName)); } if (String.IsNullOrEmpty(dataType)) { throw new ArgumentException("Contract assertion not met: !String.IsNullOrEmpty(dataType)", nameof(dataType)); } SafePrinterHandle 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); } }
public static extern bool GetJob(SafePrinterHandle hPrinter, int JobId, int Level, IntPtr pJob, int cbBuf, out int pcbNeeded);
internal static extern bool EndPagePrinter(SafePrinterHandle hPrinter);
internal static extern bool StartPagePrinter(SafePrinterHandle hPrinter);
internal static extern uint StartDocPrinter(SafePrinterHandle hPrinter, int level, IntPtr di);
internal static extern bool OpenPrinter(string szPrinter, out SafePrinterHandle hPrinter, IntPtr pd);