1、打印机的分辨率(象素/英寸)
X方向分辨率=GetDeviceCaps(Printer->Handle,LOGPIXELSX);
Y方向分辨率=GetDeviceCaps(Printer->Handle,LOGPIXELSY);
2、打印纸的大小(以象素为单位)
通过Printer的PageWidth和PageHeight属性可得到可打印范围的象素数
物理象素数用以下API得到:
宽=GetDeviceCaps(Printer->Handle,PHYSICALWIDTH)
高=GetDeviceCaps(Printer->Handle,PHYSICALHEIGHT)
物理象素数总是比可打印范围的象素数要大一些(去掉页边距等)。
3、打印纸的实际大小(以英寸为单位)
打印纸的实际大小=物理象素数/分辨率;
纸的宽度=(double)(GetDeviceCaps(Printer->Handle,PHYSICALWIDTH)/
GetDeviceCaps(Printer->Handle,LOGPIXELSX));
纸的高度=(double)(GetDeviceCaps(Printer->Handle,PHYSICALHEIGHT)/
GetDeviceCaps(Printer->Handle,LOGPIXELSY));
注:1 inch=2.54 cm
连接打印机:
HDC hdcPrint;//定义一个设备环境句柄
//定义一个打印作业
static DOCINFO di={ sizeof(DOCINFO), "printer", NULL};
char *szDevice;
szDevice = (char *)strPrinterName.c_str();//打印机模式名
if (NULL != szDevice)
{
//创建一个打印机设备句柄
hdcPrint = CreateDC(NULL, szDevice, NULL, NULL);
if(hdcPrint != 0)
{
//开始执行打印作业
if(StartDoc(hdcPrint, &di) > 0)
{
//打印机走纸,开始打印
StartPage(hdcPrint);
//保存打印机设备句柄
SaveDC(hdcPrint);
//实际打印
CImage image;
if(image.Load("C:\\1.bmp") == S_OK)
{
CString str = CAppConfig::m_strPaperType.c_str();
str.MakeUpper();
double fBmpWidth = 0.0;
double fBmpHeight = 0.0;
if (str.GetLength() == 0)
{
return -1;
}
int X = GetDeviceCaps(hdcPrint, LOGPIXELSX);
int Y = GetDeviceCaps(hdcPrint, LOGPIXELSY);
if (str.Compare("A4") == 0)
{
/*fBmpWidth = int((m_nFilmW - 0.24) * CAppConfig::m_PrinterDPI / 2)-100;
fBmpHeight = int((m_nFilmH - 0.3) * CAppConfig::m_PrinterDPI / 2)-25;*/
fBmpWidth = int((m_nFilmW - 0.24) * X)-100;
fBmpHeight = int((m_nFilmH - 0.3) * Y)-25;
}
else if (str.Compare("A3") == 0)
{
/*fBmpWidth = int((m_nFilmW - 0.36) * CAppConfig::m_PrinterDPI / 2)-100;
fBmpHeight = int((m_nFilmH - 0.36) * CAppConfig::m_PrinterDPI / 2)-25;*/
fBmpWidth = int((m_nFilmW - 0.36) * X)-100;
fBmpHeight = int((m_nFilmH - 0.36) * Y)-25;
}
image.StretchBlt(hdcPrint, CRect(CAppConfig::m_xPos, CAppConfig::m_yPos, fBmpWidth, fBmpHeight), SRCCOPY);
}
//恢复打印机设备句柄
RestoreDC(hdcPrint, -1);
//打印机停纸,停止打印
EndPage(hdcPrint);
//结束一个打印作业
EndDoc(hdcPrint);
// MessageBox("打印完毕!","提示",MB_ICONINFORMATION);
}
//用API函数DeleteDC销毁一个打印机设备句柄
DeleteDC(hdcPrint);
}