| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392 |
- using System;
- using System.Collections;
- using System.ComponentModel;
- using System.Drawing.Printing;
- using System.Runtime.InteropServices;
- using System.Security;
- using System.Text;
- using System.Windows.Forms;
- using Microsoft.VisualBasic;
- using Microsoft.VisualBasic.CompilerServices;
- namespace Dongke.IBOSS.PRD.Framework.Controls
- {
- [EditorBrowsable(EditorBrowsableState.Never)]
- public class definepaper
- {
- [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
- private struct structPrinterDefaults
- {
- [MarshalAs(UnmanagedType.LPTStr)]
- public string pDatatype;
- public IntPtr pDevMode;
- [MarshalAs(UnmanagedType.I4)]
- public int DesiredAccess;
- }
- [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
- private struct structSize
- {
- public int width;
- public int height;
- }
- [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
- private struct structRect
- {
- public int left;
- public int top;
- public int right;
- public int bottom;
- }
- [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
- private struct structFormInfo1
- {
- [MarshalAs(UnmanagedType.I4)]
- public int Flags;
- [MarshalAs(UnmanagedType.LPTStr)]
- public string pName;
- public structSize size;
- public structRect ImageableArea;
- }
- [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
- private struct structDevMode
- {
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
- public string dmDeviceName;
- [MarshalAs(UnmanagedType.U2)]
- public short dmSpecVersion;
- [MarshalAs(UnmanagedType.U2)]
- public short dmDriverVersion;
- [MarshalAs(UnmanagedType.U2)]
- public short dmSize;
- [MarshalAs(UnmanagedType.U2)]
- public short dmDriverExtra;
- [MarshalAs(UnmanagedType.U4)]
- public int dmFields;
- [MarshalAs(UnmanagedType.I2)]
- public short dmOrientation;
- [MarshalAs(UnmanagedType.I2)]
- public short dmPaperSize;
- [MarshalAs(UnmanagedType.I2)]
- public short dmPaperLength;
- [MarshalAs(UnmanagedType.I2)]
- public short dmPaperWidth;
- [MarshalAs(UnmanagedType.I2)]
- public short dmScale;
- [MarshalAs(UnmanagedType.I2)]
- public short dmCopies;
- [MarshalAs(UnmanagedType.I2)]
- public short dmDefaultSource;
- [MarshalAs(UnmanagedType.I2)]
- public short dmPrintQuality;
- [MarshalAs(UnmanagedType.I2)]
- public short dmColor;
- [MarshalAs(UnmanagedType.I2)]
- public short dmDuplex;
- [MarshalAs(UnmanagedType.I2)]
- public short dmYResolution;
- [MarshalAs(UnmanagedType.I2)]
- public short dmTTOption;
- [MarshalAs(UnmanagedType.I2)]
- public short dmCollate;
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
- public string dmFormName;
- [MarshalAs(UnmanagedType.U2)]
- public short dmLogPixels;
- [MarshalAs(UnmanagedType.U4)]
- public int dmBitsPerPel;
- [MarshalAs(UnmanagedType.U4)]
- public int dmPelsWidth;
- [MarshalAs(UnmanagedType.U4)]
- public int dmPelsHeight;
- [MarshalAs(UnmanagedType.U4)]
- public int dmNup;
- [MarshalAs(UnmanagedType.U4)]
- public int dmDisplayFrequency;
- [MarshalAs(UnmanagedType.U4)]
- public int dmICMMethod;
- [MarshalAs(UnmanagedType.U4)]
- public int dmICMIntent;
- [MarshalAs(UnmanagedType.U4)]
- public int dmMediaType;
- [MarshalAs(UnmanagedType.U4)]
- public int dmDitherType;
- [MarshalAs(UnmanagedType.U4)]
- public int dmReserved1;
- [MarshalAs(UnmanagedType.U4)]
- public int dmReserved2;
- }
- [DllImport("winspool.Drv", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)]
- [SuppressUnmanagedCodeSecurity]
- [return: MarshalAs(UnmanagedType.I4)]
- private static extern int OpenPrinter([MarshalAs(UnmanagedType.LPTStr)] string printername, ref IntPtr phPrinter, ref structPrinterDefaults pd);
- [DllImport("winspool.Drv", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)]
- [SuppressUnmanagedCodeSecurity]
- [return: MarshalAs(UnmanagedType.I4)]
- private static extern int ClosePrinter(IntPtr phPrinter);
- [DllImport("winspool.Drv", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)]
- [SuppressUnmanagedCodeSecurity]
- [return: MarshalAs(UnmanagedType.I4)]
- private static extern int AddForm(IntPtr hPrinter, [MarshalAs(UnmanagedType.I4)] int Level, ref structFormInfo1 pForm);
- [DllImport("winspool.Drv", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)]
- [SuppressUnmanagedCodeSecurity]
- [return: MarshalAs(UnmanagedType.I4)]
- private static extern int DeleteForm(IntPtr hPrinter, [MarshalAs(UnmanagedType.LPTStr)] string pFormName);
- [DllImport("winspool.Drv", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)]
- [SuppressUnmanagedCodeSecurity]
- [return: MarshalAs(UnmanagedType.I4)]
- private static extern int SetForm(IntPtr hPrinter, [MarshalAs(UnmanagedType.LPTStr)] string pFormName, [MarshalAs(UnmanagedType.I4)] int Level, ref structFormInfo1 pForm);
- [DllImport("kernel32.dll", CallingConvention = CallingConvention.StdCall, ExactSpelling = true)]
- [SuppressUnmanagedCodeSecurity]
- [return: MarshalAs(UnmanagedType.I4)]
- private static extern int GetLastError();
- [DllImport("GDI32.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)]
- [SuppressUnmanagedCodeSecurity]
- private static extern IntPtr CreateDC([MarshalAs(UnmanagedType.LPTStr)] string lpDriverName, [MarshalAs(UnmanagedType.LPTStr)] string lpDeviceName, [MarshalAs(UnmanagedType.LPTStr)] string lpOutput, ref structDevMode lpInitData);
- [DllImport("GDI32.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)]
- [SuppressUnmanagedCodeSecurity]
- private static extern IntPtr ResetDC(IntPtr hdc, ref structDevMode lpInitData);
- [DllImport("GDI32.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)]
- [SuppressUnmanagedCodeSecurity]
- [return: MarshalAs(UnmanagedType.I4)]
- private static extern int DeleteDC(IntPtr hdc);
- public static PaperSize GetPrintForm(string printerName, PaperKind paperkind)
- {
- PaperSize result = null;
- PrinterSettings printerSettings = new PrinterSettings();
- printerSettings.PrinterName = printerName;
- try
- {
- IEnumerator enumerator = printerSettings.PaperSizes.GetEnumerator();
- while (enumerator.MoveNext())
- {
- PaperSize paperSize = (PaperSize)enumerator.Current;
- if (paperSize.Kind == paperkind)
- {
- result = paperSize;
- break;
- }
- }
- }
- finally
- {
- IEnumerator enumerator2 = null;
- if (enumerator2 is IDisposable)
- {
- (enumerator2 as IDisposable).Dispose();
- }
- }
- return result;
- }
- public static PaperSize GetPrintForm(string printerName, string paperName)
- {
- PaperSize result = null;
- PrinterSettings printerSettings = new PrinterSettings();
- if (Module1.IsValidPrinterName(printerName))
- {
- printerSettings.PrinterName = printerName;
- }
- try
- {
- IEnumerator enumerator = printerSettings.PaperSizes.GetEnumerator();
- while (enumerator.MoveNext())
- {
- PaperSize paperSize = (PaperSize)enumerator.Current;
- if (Operators.CompareString(paperSize.PaperName.ToLower(), paperName.ToLower(), TextCompare: false) == 0)
- {
- result = paperSize;
- break;
- }
- }
- }
- finally
- {
- IEnumerator enumerator2 = null;
- if (enumerator2 is IDisposable)
- {
- (enumerator2 as IDisposable).Dispose();
- }
- }
- return result;
- }
- public static void SetPrintForm(string printerName, string paperName, float width, float height)
- {
- if (!Module1.IsValidPrinterName(printerName))
- {
- PrinterSettings printerSettings = new PrinterSettings();
- printerName = printerSettings.PrinterName;
- }
- paperName = Strings.Trim(paperName);
- if (PlatformID.Win32NT != Environment.OSVersion.Platform)
- {
- return;
- }
- structPrinterDefaults pd = default(structPrinterDefaults);
- pd.pDatatype = null;
- pd.pDevMode = IntPtr.Zero;
- pd.DesiredAccess = 12;
- IntPtr phPrinter = IntPtr.Zero;
- long num = OpenPrinter(printerName, ref phPrinter, ref pd);
- if (num == 0)
- {
- return;
- }
- checked
- {
- try
- {
- structFormInfo1 pForm = default(structFormInfo1);
- pForm.Flags = 0;
- pForm.pName = paperName;
- pForm.size.width = (int)Math.Round(width * 1000f);
- pForm.size.height = (int)Math.Round(height * 1000f);
- pForm.ImageableArea.left = 0;
- pForm.ImageableArea.right = pForm.size.width;
- pForm.ImageableArea.top = 0;
- pForm.ImageableArea.bottom = pForm.size.height;
- bool flag;
- if (GetPrintForm(printerName, paperName) != null)
- {
- flag = SetForm(phPrinter, paperName, 1, ref pForm) != 0;
- }
- else
- {
- AddCustomPaperSize(printerName, paperName, width, height);
- flag = true;
- }
- if (!flag)
- {
- StringBuilder stringBuilder = new StringBuilder();
- stringBuilder.AppendFormat("添加纸张{0}时发生错误!, 系统错误号: {1}", paperName, GetLastError());
- MessageBox.Show(stringBuilder.ToString());
- }
- }
- finally
- {
- ClosePrinter(phPrinter);
- }
- }
- }
- public static void AddCustomPaperSize(string printerName, string paperName, float width, float height)
- {
- checked
- {
- if (PlatformID.Win32NT == Environment.OSVersion.Platform)
- {
- structPrinterDefaults pd = default(structPrinterDefaults);
- pd.pDatatype = null;
- pd.pDevMode = IntPtr.Zero;
- pd.DesiredAccess = 12;
- IntPtr phPrinter = IntPtr.Zero;
- if (OpenPrinter(printerName, ref phPrinter, ref pd) == 0)
- {
- StringBuilder stringBuilder = new StringBuilder();
- stringBuilder.AppendFormat("打开打印机{0} 时出现异常!, 系统错误号: {1}", printerName, GetLastError());
- throw new ApplicationException(stringBuilder.ToString());
- }
- try
- {
- DeleteForm(phPrinter, paperName);
- structFormInfo1 pForm = default(structFormInfo1);
- pForm.Flags = 0;
- pForm.pName = paperName;
- pForm.size.width = (int)Math.Round((double)width * 1000.0);
- pForm.size.height = (int)Math.Round((double)height * 1000.0);
- pForm.ImageableArea.left = 0;
- pForm.ImageableArea.right = pForm.size.width;
- pForm.ImageableArea.top = 0;
- pForm.ImageableArea.bottom = pForm.size.height;
- try
- {
- if (AddForm(phPrinter, 1, ref pForm) == 0)
- {
- StringBuilder stringBuilder2 = new StringBuilder();
- stringBuilder2.AppendFormat("添加纸张{0}时发生错误!, 系统错误号: {1}", paperName, GetLastError());
- throw new ApplicationException(stringBuilder2.ToString());
- }
- return;
- }
- catch (Exception projectError)
- {
- ProjectData.SetProjectError(projectError);
- ProjectData.ClearProjectError();
- return;
- }
- }
- finally
- {
- ClosePrinter(phPrinter);
- }
- }
- structDevMode lpInitData = default(structDevMode);
- IntPtr intPtr = CreateDC(null, printerName, null, ref lpInitData);
- if (intPtr != IntPtr.Zero)
- {
- lpInitData.dmFields = 14;
- lpInitData.dmPaperSize = 256;
- lpInitData.dmPaperWidth = (short)Math.Round((double)width * 2.54 * 1000.0);
- lpInitData.dmPaperLength = (short)Math.Round((double)height * 2.54 * 1000.0);
- ResetDC(intPtr, ref lpInitData);
- DeleteDC(intPtr);
- }
- }
- }
- }
- }
|