我需要在针式打印机上用连续打印纸(两边带孔的那种)打印一个很长的图形,可能长10多米,这里不考虑打印宽度,只考虑长度。
我现在的方法是先把数据按照自定义的页长分配到每一页中,从第一页开始转入该页的数据用MoveTo,LineTo画好后调用EndPage,StartPage循环打印下一页,直到打完。
但是执行EndPage后不但打印当前页的数据,而且还会自动走纸,各页间留出了一段空白。我在XP下使用VC6开发一个dll实现上述功能,打印机是金长城5370TX,Epson1600K仿真
测试的数据是(0,0)到(1000,2500)的位置画一条直线,为了模仿多页连续打印,每页的页长我设置成200。映射模式使用MM_TEXT。请各位帮帮忙,怎么能解决EndPage后自动走纸的问题。多谢。void Print()
{
CPrintDialog dlg(FALSE);
if (dlg.DoModal() != IDOK)
return;
CPrintInfo prInfo;
// 得到缺省的打印机设置
CPrintDialog *pReservedPD = prInfo.m_pPD;
prInfo.m_pPD = &dlg;

DEVMODE *pDevMode;
//得到缺省DEVMODE信息
pDevMode = prInfo.m_pPD->GetDevMode();
//修改打印纸的宽度,长度等参数
pDevMode->dmPaperSize = DMPAPER_USER;
pDevMode->dmPaperLength = 200;
pDevMode->dmPaperWidth = 2000;
pDevMode->dmFields |= DM_PAPERSIZE | DM_PAPERLENGTH | DM_PAPERWIDTH; 

//把测试数据按照页长分配到各页,保存到m_aryPrintPoint,y坐标转换成各页中的坐标
AdjustPtCoorbyPageLength(pDevMode->dmPaperLength);

prInfo.m_pPD->m_pd.nMinPage = 1;
//m_fPtYMin,m_fPtYMax是测试数据y方向的最小值最大值
prInfo.m_pPD->m_pd.nMaxPage = (m_fPtYMax - m_fPtYMin) / pDevMode->dmPaperLength + 1;
prInfo.m_pPD->m_pd.nFromPage = 1;
prInfo.m_pPD->m_pd.nToPage = prInfo.m_pPD->m_pd.nMaxPage;
prInfo.m_nCurPage = 1;

//打印机句柄
HDC hDCPrint = prInfo.m_pPD->GetPrinterDC();
//根据DEVMODE修改hDCPrint
if(::ResetDC(hDCPrint, pDevMode) == NULL)
return;
//将句柄附加到PrintDC上
CDC dcPrint;
dcPrint.Attach(hDCPrint); 
dcPrint.SetMapMode(MM_TEXT);

DOCINFO di;
memset(&di, 0, sizeof(DOCINFO));
di.cbSize = sizeof(DOCINFO);
di.lpszOutput = NULL;
dcPrint.StartDoc(&di);
dcPrint.StartPage();
 
CString str;
PRINTPOINT curPoint, lastPoint;
for (int i = 0; i <= prInfo.m_pPD->m_pd.nMaxPage; i++) {
//用MoveTo,LineTo画出当前页的内容
DrawOnePage();

dcPrint.EndPage();
dcPrint.StartPage();
}

dcPrint.EndPage();
dcPrint.EndDoc();
dcPrint.Detach();
prInfo.m_pPD = pReservedPD;
}

解决方案 »

  1.   

    http://www.vckbase.com/document/viewdoc/?id=1270
      

  2.   

    考虑直接用Escape向打印机发送命令。GDI的打印是以分页为基础的,不适合连续纸打印。
      

  3.   

    Mackz,你说的“考虑直接用Escape向打印机发送命令”是不是指在EndPage打印完一页内容并走纸后,再用Escape指令让打印机退纸到适当的位置呢?
      

  4.   

    Mackz,你说的“考虑直接用Escape向打印机发送命令”是不是指在EndPage打印完一页内容并走纸后,再用Escape指令让打印机退纸到适当的位置呢?
    //
    指用打印机指令(打印机手册上有)直接绘图。不用StartPage、EndPage之类的。
      

  5.   

    lfchen,“指用打印机指令(打印机手册上有)直接绘图。不用StartPage、EndPage之类的。”手册里只提供了Esc的控制命令,找不到直接绘图的命令。我没用过打印机指令绘图,能说的详细点吗?
      

  6.   

    ESC命令里有控制,打点,画线等等命令。
      

  7.   

    lfchen,我手头的打印机手册里差不到打点画线这样的命令,只好先考虑一下退纸这样的控制命令