首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

C# 怎么自动打印

2012-12-29 
C# 如何自动打印C# 如何自动打印 [.NET技术 C#][解决办法]你是指用c#编程?还是问的普通的办公问题?普通办

C# 如何自动打印
C# 如何自动打印 [.NET技术 C#]
[解决办法]
你是指用c#编程?还是问的普通的办公问题?普通办公问题:麻烦你打开“苏州001.doc”,文件->打印->选择好相应城市的打印机->打印编程问题:获取文件名中的城市名你会吧,然后根据城市名得到打印机名(这一步只能你手动设定,比如苏州(城市名)对应打印机名是001,你也可以把对应的打印机名设为城市名  这样就ok了)然后运用打印类: public class RawPrinterHelper        {            // [Methods]            [DllImport("winspool.Drv", CallingConvention = CallingConvention.StdCall, SetLastError = true, ExactSpelling = true)]            public static extern bool ClosePrinter(IntPtr hPrinter);            [DllImport("winspool.Drv", CallingConvention = CallingConvention.StdCall, SetLastError = true, ExactSpelling = true)]            public static extern bool EndDocPrinter(IntPtr hPrinter);            [DllImport("winspool.Drv", CallingConvention = CallingConvention.StdCall, SetLastError = true, ExactSpelling = true)]            public static extern bool EndPagePrinter(IntPtr hPrinter);            [DllImport("winspool.Drv", EntryPoint = "OpenPrinterA", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]            public static extern bool OpenPrinter([MarshalAs(UnmanagedType.LPStr)] string szPrinter, out IntPtr hPrinter, IntPtr pd);            public static bool SendBytesToPrinter(string szPrinterName, IntPtr pBytes, int dwCount)            {                int dwError = 0;                int dwWritten = 0;                IntPtr hPrinter = new IntPtr(0);                DOCINFOA di = new DOCINFOA();                bool bSuccess = false;                di.pDocName = "My C#.NET RAW Document";                di.pDataType = "RAW";                if (OpenPrinter(szPrinterName.Normalize(), out hPrinter, IntPtr.Zero))                {                    if (StartDocPrinter(hPrinter, 1, di))                    {                        if (StartPagePrinter(hPrinter))                        {                            bSuccess = WritePrinter(hPrinter, pBytes, dwCount, out dwWritten);                            EndPagePrinter(hPrinter);                        }                        EndDocPrinter(hPrinter);                    }                    ClosePrinter(hPrinter);                }                if (!bSuccess)                {                    dwError = Marshal.GetLastWin32Error();                }                return bSuccess;            }            public static bool SendFileToPrinter(string szPrinterName, string szFileName)            {                FileStream fs = new FileStream(szFileName, FileMode.Open);                BinaryReader br = new BinaryReader(fs);                byte[] bytes = new byte[fs.Length];                bool bSuccess = false;                IntPtr pUnmanagedBytes = new IntPtr(0);                int nLength = Convert.ToInt32(fs.Length);                bytes = br.ReadBytes(nLength);                pUnmanagedBytes = Marshal.AllocCoTaskMem(nLength);                Marshal.Copy(bytes, 0, pUnmanagedBytes, nLength);                bSuccess = SendBytesToPrinter(szPrinterName, pUnmanagedBytes, nLength);                Marshal.FreeCoTaskMem(pUnmanagedBytes);                return bSuccess;            }            public static bool SendStringToPrinter(string szPrinterName, string szString)            {                int dwCount = szString.Length;                IntPtr pBytes = Marshal.StringToCoTaskMemAnsi(szString);                SendBytesToPrinter(szPrinterName, pBytes, dwCount);                Marshal.FreeCoTaskMem(pBytes);                return true;            }            [DllImport("winspool.Drv", EntryPoint = "StartDocPrinterA", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]            public static extern bool StartDocPrinter(IntPtr hPrinter, int level, [In, MarshalAs(UnmanagedType.LPStruct)] DOCINFOA di);            [DllImport("winspool.Drv", CallingConvention = CallingConvention.StdCall, SetLastError = true, ExactSpelling = true)]            public static extern bool StartPagePrinter(IntPtr hPrinter);            [DllImport("winspool.Drv", CallingConvention = CallingConvention.StdCall, SetLastError = true, ExactSpelling = true)]            public static extern bool WritePrinter(IntPtr hPrinter, IntPtr pBytes, int dwCount, out int dwWritten);             //Nested Types            [StructLayout(LayoutKind.Sequential)]            public class DOCINFOA            {                [MarshalAs(UnmanagedType.LPStr)]                public string pDocName;                [MarshalAs(UnmanagedType.LPStr)]                public string pOutputFile;                [MarshalAs(UnmanagedType.LPStr)]                public string pDataType;            }        }这是网上的一个比较标准的打印类,比较好用,直接copy然后:SendFileToPrinter(打印机名,文件名).


[解决办法]
C#实现打印方式有很多种方法的,你可以尝试一下js:

script language="Javascript">function preview(){    bdhtml=window.document.body.innerHTML;    sprnstr="<!--startprint-->";    eprnstr="<!--endprint-->";    prnhtml=bdhtml.substr(bdhtml.indexOf(sprnstr)+17);    prnhtml=prnhtml.substring(0,prnhtml.indexOf(eprnstr));    window.document.body.innerHTML=prnhtml;    window.print();}</script><!--省略部分代码--><form id="WebForm1" method="post" runat="server">     <center>本部分以上不被打印</center>     <!--startprint-->     <div align="center">         <asp:DataGrid id="dgShow" runat="server">              <!--省略部分代码-->         </asp:DataGrid>     </div>     <!--endprint-->     <center>本部分以下不被打印</center>     <div align="center">         <input type="button" name="print" value="预览并打印" onclick="preview()">     </div>     <style> @media Print { .Noprn { DISPLAY: none }}     </style>     <p class="Noprn">不打印</p>     <table id="datagrid">         <tr>              <td>打印</td>         </tr>     </table>     <input class="Noprn" type="button" onclick="window.print()" value="print"></form> 

热点排行