internal static extern bool WritePrinter(
     // 0
     SafePrinterHandle hPrinter,
     [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)] byte[] pBytes,
     // 2
     uint dwCount,
     out uint dwWritten);
Exemple #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.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);