å ¶ä»ç½ç«ä¸è½½æ¥çç±»ï¼å¯ä»¥ç¨äºWinformãAsp.Netï¼ç¨äºæå¡å¨ç«¯PDFæå ¶ä»æ件æå°ã
ç´æ¥ä¸ä»£ç ï¼
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.IO;
namespace CyServer.WinAPI
{
public class RawPrinterHelper
{
// 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;
}
[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 bool 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);
// SendBytesToPrinter()
// When the function is given a printer name and an unmanaged array
// of bytes, the function sends those bytes to the print queue.
// Returns true on success, false on failure.
public static bool SendBytesToPrinter(string szPrinterName, IntPtr pBytes, Int32 dwCount)
{
Int32 dwError = 0, dwWritten = 0;
IntPtr hPrinter = new IntPtr(0);
DOCINFOA di = new DOCINFOA();
bool bSuccess = false; // Assume failure unless you specifically succeed.
di.pDocName = "My C#.NET RAW Document";
di.pDataType = "RAW";
// Open the printer.
if (OpenPrinter(szPrinterName.Normalize(), out hPrinter, IntPtr.Zero))
{
// Start a document.
if (StartDocPrinter(hPrinter, 1, di))
{
// Start a page.
if (StartPagePrinter(hPrinter))
{
// Write your bytes.
bSuccess = WritePrinter(hPrinter, pBytes, dwCount, out dwWritten);
EndPagePrinter(hPrinter);
}
EndDocPrinter(hPrinter);
}
ClosePrinter(hPrinter);
}
// If you did not succeed, GetLastError may give more information
// about why not.
if (bSuccess == false)
{
dwError = Marshal.GetLastWin32Error();
}
return bSuccess;
}
public static bool SendFileToPrinter(string szPrinterName, string szFileName)
{
// Open the file.
FileStream fs = new FileStream(szFileName, FileMode.Open);
// Create a BinaryReader on the file.
BinaryReader br = new BinaryReader(fs);
// Dim an array of bytes big enough to hold the file's contents.
Byte[] bytes = new Byte[fs.Length];
bool bSuccess = false;
// Your unmanaged pointer.
IntPtr pUnmanagedBytes = new IntPtr(0);
int nLength;
nLength = Convert.ToInt32(fs.Length);
// Read the contents of the file into the array.
bytes = br.ReadBytes(nLength);
// Allocate some unmanaged memory for those bytes.
pUnmanagedBytes = Marshal.AllocCoTaskMem(nLength);
// Copy the managed byte array into the unmanaged array.
Marshal.Copy(bytes, 0, pUnmanagedBytes, nLength);
// Send the unmanaged bytes to the printer.
bSuccess = SendBytesToPrinter(szPrinterName, pUnmanagedBytes, nLength);
// Free the unmanaged memory that you allocated earlier.
Marshal.FreeCoTaskMem(pUnmanagedBytes);
return bSuccess;
}
public static bool SendStringToPrinter(string szPrinterName, string szString)
{
IntPtr pBytes;
Int32 dwCount;
// How many characters are in the string?
dwCount = szString.Length;
// Assume that the printer is expecting ANSI text, and then convert
// the string to ANSI text.
pBytes = Marshal.StringToCoTaskMemAnsi(szString);
// Send the converted ANSI string to the printer.
SendBytesToPrinter(szPrinterName, pBytes, dwCount);
Marshal.FreeCoTaskMem(pBytes);
return true;
}
}
}
ä¸é¢åCopyä¸äºä»ç»ï¼
æå°ç®¡çåºå½æ°Winspool.drv
æå°æºåºå±é©±å¨çå
å½æ°å称 说æ
AbortPrinter å é¤æå°æºçåè±æºæ件
AddForm åå¯è¢«éæ©ç¨äºç»å®æå°æºçæ ¼å¼è¡¨ä¸æ·»å ä¸
æ ¼å¼
AddJob è¿åä¸ä¸ªå¯ç¨æ¥åå¨æå°å·¥ä½çæ件çå®æ´è·¯
å¾åæ件å
AddMonitor å®è£
ä¸ä¸ªæ¬æºæå°æºçè§å¨ï¼å¹¶è¿æ¥é
ç½®æ件
ãæ°æ®æ件åçè§å¨æ件
AddPort åæ¯æç端å£å表ä¸æ·»å ä¸ç«¯å£å
AddPrinter åæå®çæå¡å¨ææ¯æçæå°æºå表ä¸æ·»å ä¸
æå°æº
AddPrinterConnection 为å½åç¨æ·æ·»å æå®çæå°æºå¹¶è¿æ¥
AddPrinterDriver å®è£
ä¸æ¬å°æè¿ç¨æå°æºå¹¶è¿æ¥å¹æ¤æ件ãæ°
æ®æ件å驱å¨æ件
AddPrintProcessor å¨æå®çæå¡å¨ä¸å®è£
ä¸æå°å¤çç¨åºï¼å¹¶å°å®
çå称添å å°ææ¯æçå
é¨å表ä¸
AddPrintProvidor å®è£
ä¸æ¬å°æå°æºæä¾ç¨åºï¼å¹¶è¿æ¥é
ç½®æ件ã
æ°æ®æ件åæä¾ç¨åºæ件
AdvancedDocumentProperties 为ç»å®çæå°æºæ¾ç¤ºä¸ä¸ªæå°æºé«çº§é
置对è¯
æ¡ï¼ä»¥å
许è¿è¡é
ç½®
ClosePrinter å
³éç»å®çæå°æºå¯¹è±¡
ConfigurePort æ¾ç¤ºæå®æå¡å¨ä¸ç»å®ç«¯å£çé
置对è¯æ¡ï¼ä»¥
å
许è¿è¡é
ç½®
ConnectToPrinterDlg æ¾ç¤ºä¸å¯¹è¯æ¡ä¾ç¨æ·å¨ç½ç»æµè§å¹¶è¿æ¥æå°æº
DeleteForm ä»ææ¯æçæ ¼å¼è¡¨ä¸å é¤ä¸ä¸ªæ ¼å¼å
DeleteMonitor å é¤ä¸ä¸ªç±AddMonitorå½æ°ææ·»å çæå°æºç
è§å¨
DeleteProt æ¾ç¤ºä¸å¯¹è¯æ¡ï¼ä»¥å
许ç¨æ·å é¤ä¸ä¸ªç«¯å£å
DeletePrinter å é¤æå®çæå°æºå¯¹è±¡
DeletePrinterConnection å é¤æå®çæå°æºè¿æ¥
DeletePrinterDriver ä»ç»å®æå¡å¨ææ¯æç驱å¨å¨å称表ä¸å é¤æ
å®çæå°æºé©±å¨å¨
DeletePrintProcessor å é¤ç±AddPrintProcessorå½æ°ææ·»å çæå°æº
å¤çç¨åº
DeletePrintProvidor å é¤ç±AddPrintProvidorå½æ°ææ·»å çæä¾å¨
DeviceCapabilities è·åæå®çæå°æºæéæ±çæ§è½
DocumentProperties 为ç»å®çæå°æºæ¾ç¤ºä¸ä¸ªæå°æºé
置对è¯æ¡ï¼
以å
许è¿è¡é
ç½®
EndDocPrinter ç»æ¢ç»å®æå°æºçä¸ä¸ªæå°ä½ä¸
EndPagePrinter æ示ä¸é¡µçç»æåä¸ä¸é¡µçå¼å§
EnumForms æ举æå®æå°æºææ¯æçæ ¼å¼
EnumJobs ç¨æè¿°æå°æºçæå°ä½ä¸æ°æ®åå§åä¸ä¸ª
JOB_INFO_1æJOB_INFO_2ç»ææ°ç»,以便æ举æ
å°æºä½ä¸
EnumMonitors ç¨æè¿°ç»å®æå¡å¨ççè§å¨æ°æ®åå§åä¸ä¸ª
MONITOR_INFO_1ç»ææ°ç»,以便æ举æå°æºçè§
å¨
EnumPorts æ举å¯ç¨äºå¨æå®æå¡å¨ä¸è¿è¡æå°ç端å£
EnumPrinterDrivers æ举å¨ç»å®æå°æºæå¡å¨ä¸å®è£
çæææå°æº
驱å¨ç¨åº
EnumPrinters æ举æå®æå¡å¨ä¸å¯ç¨çæå°æº
EnumPrintProcessorDatatypes æ举æå®æå°æºå¤çç¨åºææ¯æçæ°æ®ç±»å
EnumPrintProcessors æ举å¨æå®æå¡å¨ä¸å®è£
çæå°å¤çå¨
FindClosePrinterChangeNotificationå
³ééè¿è°ç¨
FindFirstPrinterChangeNotificationå½æ°å»º
ç«çæ¹åéç¥å¯¹è±¡
FindFirstPrinterChangeNotificationå建ä¸ä¸ªæ¹åéç¥å¯¹è±¡å¹¶è¿åå¥æ,使ç¨è¯¥
å¥æå¨è°ç¨ä¸ä¸ªçå¾
å½æ°æé´,æ£æ¥æå°æºææ
å°æå¡å¨çåå
FindNextPrinterChangeNotification为ä¸æå®æå°æºææå°æå¡å¨ç¸å
³çæ¹åé
ç¥å¯¹è±¡æ£åæè¿çæ¹åéç¥éç¥ä¿¡æ¯,ä¹å¯ç¨æ¥
éæ°è®¾ç½®è¯¥æ¹åéç¥å¯¹è±¡ä¸ºä¸åä¿¡æ¯ç¶æ
FreePrinterNotifyInfo éæ¾ç³»ç»åé
çç±
FindNextPrinterChangeNotificationå½æ°è¿å
çç¼å²åº
GetForm å©ç¨æè¿°ç»å®æå°æºæå®æ ¼å¼çæ°æ®åå§åä¸
个FORM_INFO_1ç»æ
GetJob æ£åæå®æå°æºçæå°ä½ä¸æ°æ®
GetPrinter æ£åç»å®æå°æºçæ°æ®
GetPrinterData æ£åç»å®æå°æºçé
ç½®æ°æ®
GetPrinterDriver æ£åç»å®æå°æºç驱å¨ç¨åºæ°æ®
GetPrinterDriverDirectory æ£åç»å®æå°æºé©±å¨ç¨åºçç®å½è·¯å¾
GetPrintProcessDirectory æ£åæå®æå¡å¨ä¸æå°æºå¤çç¨åºçè·¯å¾
OpenPrinter æ£åä¸ä¸ªæ è¯ç¹å®æå°æºææå°æå¡å¨çå¥æ
并æå¼
PrinterMessageBox æ¾ç¤ºä¸ä¸ªæ¶æ¯æ¡,ä¾ä¸ä¸ªæ£æå°çåºç¨ç¨åºéç¥
ç¨æ·åçä¸ä¸ªæå°ä½ä¸é误
PrinterProperties 为ç»å®æå°æºæ¾ç¤ºä¸ä¸ªæå°æºæ§è½å¯¹è¯æ¡,以å
许è¿è¡è®¾ç½®
ReadPrinter ä»ç»å®æå°æºæ£åæ°æ®
ResetPrinter 让åºç¨ç¨åºè®¾å®æStartDocPrinterå½æ°æ交ç
æå°ææ¡£çæ°æ®ç±»åå设å¤æ¨¡å¼å¼
ScheduleJob éç¥åè±æºæå°ç¨åº,å¯ä¸ºæå®çä½ä¸å®ææå°
SetForm 为ç»å®çæå°æºè®¾ç½®æ ¼å¼ä¿¡æ¯
SetJob æå,æ¢å¤,åæ¶æéæ°å¯å¨ç»å®æå°æºä¸æå®
çæå°ä½ä¸
SetPrinter ç¨æå,æ¢å¤,ææ¸
é¤æææå°ä½ä¸æ¥è®¾ç½®æå®
çæå°æº
SetPrinterData 设置ä¸å°æå°æºçé
ç½®æ°æ®
StartDocPrinter éç¥åè±æºæå°ç¨åºå°å¨åè±æºä¸æå°ä¸ä¸ªæ
æ¡£
StartPagePrinter éç¥åè±æºæå°ç¨åºå°å¨ç»å®æå°æºä¸æå°ä¸é¡µ
WritePrinter éç¥åè±æºæå°ç¨åºåºåç»å®çæå°æºåæå®
çæ°æ®
ç¨åºå±çé讯å½ä»¤ï¼å®ç°å¾å¤å½ä»¤
Â