📄 20001013001.htm
字号:
<HTML>
<HEAD>
<TITLE>直接发送数据到打印机</TITLE>
<META content="MSHTML 5.00.2314.1000" name=GENERATOR>
</HEAD>
<BODY aLink=#FF0000 bgColor=#ffffff leftMargin=0 link=#187800 topMargin=0
vLink=#990099>
<div align="center">
<table width="744" border="0" cellspacing="0" cellpadding="0" height="76">
<tr>
<td>
<p align="center"><b><font
size=2><font size="3"><br>
直接发送数据到打印机<br>
</font></font></b></p>
<p align="left"> 下面是一个将数据直接发送到打印机的示例:<br>
记得在文件中加上#include winspool.h <br>
<br>
bool Print(char* szPrinterName, char* szBuffer)// szBuffer是我们希望发送到打印机的数据缓冲<br>
{<br>
HANDLE hPrinter; //打印机句柄<br>
int iLen = strlen(szBuffer);// 发送数据的长度<br>
DWORD dwWritten; // 已经向打印机写了多少<br>
<br>
if(OpenPrinter(szPrinterName, &hPrinter, NULL))<br>
//Open打印机并赋给一个句柄(已经保存在hPrinter)<br>
{<br>
DOC_INFO_1 Info;//文档信息<br>
memset(&Info, 0, sizeof(Info));<br>
Info.pDocName = "My PrintJob"; <br>
//文档名(which is shown in the PrintManager)<br>
Info.pOutputFile = NULL; <br>
//不须要向一个文件写,设为NULL<br>
Info.pDatatype = "RAW";<br>
//数据以RAW格式发送(Win9x和WinNT都支持RAW和EMF格式,WinNT还支持TEXT格式<br>
<br>
if(!StartDocPrinter(hPrinter, 1, (LPBYTE)&Info))//文档开始<br>
return false;<br>
<br>
// 告诉打印机开始新页<br>
StartPagePrinter(hPrinter);<br>
<br>
// 向打印机写数据<br>
if(!WritePrinter(hPrinter, szBuffer, iLen, &dwWritten))<br>
{<br>
//当发送数据时出现错误<br>
//用最后的错误指出发生了什么错误<br>
}<br>
EndPagePrinter(hPrinter);//告诉打印机已经完成当前页<br>
if(!EndDocPrinter(hPrinter))//文档结束<br>
return false;<br>
ClosePrinter(hPrinter);//关闭打印机<br>
return true;<br>
}<br>
else<br>
{<br>
return false;<br>
}<br>
}<br>
<br>
假如你的打印机直接与计算机相连(LPT1-LPT3)或者影射为网络打印机,那你就可以直接用fopen函数来实现。<br>
eg. fopen("lpt1", "wt") 或 fopen("\\\\MainServer\\MatrixPrinter", "wt")<br>
<br>
摘自C++ Builder开发者</p>
</td>
</tr>
</table>
</div>
</BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -