windows 下c++ 打印

int showPic(HDC hdcPrint,CString strURL,float picX,float picY,float picCX,float picCY)
{  
    CFile file;
    CString LocalPicLen;
    HGLOBAL hMem;
    file.Open(strURL,CFile::modeReadWrite);
    DWORD len = file.GetLength();
    LocalPicLen.Format(_T("%d"),len);
    hMem = GlobalAlloc(GMEM_MOVEABLE,len);
    LPVOID pData = NULL; 
    pData = GlobalLock(hMem);
    file.Read(pData,len);
    file.Close();
    GlobalUnlock(hMem);
    CreateStreamOnHGlobal(hMem,TRUE,&m_pStream);
    OleLoadPicture(m_pStream,len,TRUE,IID_IPicture,(LPVOID*)&m_pPicture);
    m_pPicture->get_Height(&m_JPGHeight);
    m_pPicture->get_Width(&m_JPGWidth);
    picX =  picX*11.8;
    picY =  picY*11.8;
    m_pPicture->Render(hdcPrint,(int)picX,(int)picY,(int)picCX,(int)picCY,
        0,m_JPGHeight,m_JPGWidth,-m_JPGHeight,NULL);    


    return 0;

}


void OnBnClickedPrintcard()
{
    // TODO: 在此添加控件通知处理程序代码

    HDC hdcprint; 
    CFont Frontfont,Backfont,font1,font2 ;
    int intBold = FW_BOLD;
    //   if(!m_fiSBold)
    //       intBold = FW_NORMAL;
    int m_fontSize = 50;
    CString m_printerFont ="华文中宋";

    Frontfont.CreateFont(50,   //文字的高度
        0,   // 由系统根据高宽比选取最佳宽度值
        0,    //文本的倾斜度为0,表示水平,是一行文字旋转
        0,     //字体的倾斜度为0
        intBold,  //字体的粗度
        false,   //非斜体字,true 可以斜体,文字倾斜度可以实现
        false,   //无下滑线,true有下划线
        0,    //无删除线
        GB2312_CHARSET,  // 表示所用的字符集
        OUT_DEFAULT_PRECIS,  //输出精度的默认值
        CLIP_DEFAULT_PRECIS,  //裁剪精度的默认值
        DEFAULT_QUALITY, //输出质量为默认值
        DEFAULT_PITCH|FF_DONTCARE, //字间距和字体系列使用默认值
        (LPCSTR)m_printerFont     //字体名称
        );

    //   int intBold2 = FW_BOLD;
    //   if(!m_bisBold)
    int  intBold2 = FW_NORMAL;
    Backfont.CreateFont(50,   //文字的高度
        0,   // 由系统根据高宽比选取最佳宽度值
        0,    //文本的倾斜度为0,表示水平,是一行文字旋转
        0,     //字体的倾斜度为0
        intBold2,  //字体的粗度
        false,   //非斜体字,true 可以斜体,文字倾斜度可以实现
        false,   //无下滑线,true有下划线
        0,    //无删除线
        GB2312_CHARSET,  // 表示所用的字符集
        OUT_DEFAULT_PRECIS,  //输出精度的默认值
        CLIP_DEFAULT_PRECIS,  //裁剪精度的默认值
        DEFAULT_QUALITY, //输出质量为默认值
        DEFAULT_PITCH|FF_DONTCARE, //字间距和字体系列使用默认值
        (LPTSTR)"华文中宋"    //字体名称
        );

    font1.CreateFont(75,   //文字的高度
        0,   // 由系统根据高宽比选取最佳宽度值
        0,    //文本的倾斜度为0,表示水平,是一行文字旋转
        0,     //字体的倾斜度为0
        intBold,  //字体的粗度
        false,   //非斜体字,true 可以斜体,文字倾斜度可以实现
        false,   //无下滑线,true有下划线
        0,    //无删除线
        GB2312_CHARSET,  // 表示所用的字符集
        OUT_DEFAULT_PRECIS,  //输出精度的默认值
        CLIP_DEFAULT_PRECIS,  //裁剪精度的默认值
        DEFAULT_QUALITY, //输出质量为默认值
        DEFAULT_PITCH|FF_DONTCARE, //字间距和字体系列使用默认值
        (LPCSTR)m_printerFont     //字体名称
        );

    font2.CreateFont(130,   //文字的高度
        0,   // 由系统根据高宽比选取最佳宽度值
        0,    //文本的倾斜度为0,表示水平,是一行文字旋转
        0,     //字体的倾斜度为0
        intBold,  //字体的粗度
        false,   //非斜体字,true 可以斜体,文字倾斜度可以实现
        false,   //无下滑线,true有下划线
        0,    //无删除线
        GB2312_CHARSET,  // 表示所用的字符集
        OUT_DEFAULT_PRECIS,  //输出精度的默认值
        CLIP_DEFAULT_PRECIS,  //裁剪精度的默认值
        DEFAULT_QUALITY, //输出质量为默认值
        DEFAULT_PITCH|FF_DONTCARE, //字间距和字体系列使用默认值
        (LPCSTR)m_printerFont     //字体名称
        );

    DOCINFO di;
    di.cbSize = sizeof(DOCINFO);
    di.lpszDocName = "cardinfo"; 
    di.lpszOutput =  NULL; 
    di.lpszDatatype =  NULL; 
    di.fwType = 0; 
    int retVal = 0;


    hdcprint = CreateDC(_T(""),_T(""),NULL,NULL);
    if(hdcprint!=0)
    {

        if(StartDoc(hdcprint,&di)>0) //开始执行一个打印作业
        {
            StartPage(hdcprint); //打印机走纸,开始打印
            SaveDC(hdcprint); //保存打印机设备句柄  
            retVal = showPic(hdcprint,"d:\\front.jpg",0,0,1016,642);

            retVal = showPic(hdcprint,"d:\\1.jpg",55,6,263,341);
            SelectObject(hdcprint,Frontfont);
            float m_iDX =6;
            float m_iDY =8;
            m_iDX = m_iDX*11.8;
            m_iDY = m_iDY*11.8;
            CString m_iDText ="姓名: 张三";
            SetBkMode(hdcprint,TRANSPARENT);
            //SetTextColor(hdcprint,RGB(m_fontColorR,m_fontColorG,m_fontColorB));
            TextOut(hdcprint,m_iDX,m_iDY,m_iDText,m_iDText.GetLength());// 

       
            // SetTextColor(hdcprint,RGB(255,255,255));

            // RestoreDC(hdcprint,-1); //恢复打印机设备句柄
            EndPage(hdcprint); //打印机停纸,停止打印
            retVal = showPic(hdcprint,"d:\\back.jpg",0,0,1016,642);
            SetBkMode(hdcprint,TRANSPARENT);
            m_iDX =6;
            m_iDY =40;
            m_iDX = m_iDX*11.8;
            m_iDY = m_iDY*11.8;

            m_iDText ="XXX:X";
            TextOut(hdcprint,m_iDX,m_iDY,m_iDText,m_iDText.GetLength());
            m_iDX =6;
            m_iDY =46;
            m_iDX = m_iDX*11.8;
            m_iDY = m_iDY*11.8;
            m_iDText ="";
            T

            SelectObject(hdcprint,font2);
            m_iDY =15;
            m_iDX =45;
            m_iDX = m_iDX*11.8;
            m_iDY = m_iDY*11.8;
            m_iDText ="民 政 卡";
            TextOut(hdcprint,m_iDX,m_iDY,m_iDText,m_iDText.GetLength());// 
            RestoreDC(hdcprint,-1); //恢复打印机设备句柄
            EndPage(hdcprint); //打印机停纸,停止打印


            EndDoc(hdcprint); //结束一个打印作业
            //MessageBox("打印完毕!","提示",MB_ICONINFORMATION);
        }

        DeleteDC(hdcprint);

    }
    else
    {
        MessageBox("找不到打印机,请确定是否有副本");
        return   ;
    }

}

猜你喜欢

转载自blog.csdn.net/xmmdbk/article/details/82734227