我编制程序打印一张表格,在HP DeskJet 670C上进行调试,打印的效果能够满足要求,然后用一台HP 6L 进行测试,结果打印出来的字和表格都变小了,请问各位这是什么原因?该如何处理。

解决方案 »

  1.   

    你大概使用了默认的映射模式
    其实打印机也有自己的打印精度定义,使用mm_text映射模式时,程序将自动使用这种映射模式来调整字体大小.
    在编写打印程序时,我一般使用mm_metric等代表实际长度的映射模式不知道这些对你是否有帮助
      

  2.   

    不知你具体是怎么写打印代码的,基本上是因为这两种打印机分辨率不同所产生的。如果是这样,解决办法是,主要是让坐标系的单位值固定,就是SetMapMode(),用:
    MM_HIENGLISH(每个单位0.001 inch);
    MM_HIMETRIC(每个单位0.001 mm);
    MM_HIENGLISH(每个单位0.01 inch);
    MM_HIMETRIC(每个单位0.01 mm)。
    当然,你也可以使用其他Mapping Mode,这样,你需要用GetDeviceCaps()得到显示/打印分辨率来调整你每个函数的输出坐标。
      

  3.   

    你应该SetMapMode()来调整映射模式,然后再GetWindowOrg()
    GetWindowExt()
    GetViewportExt()
    GetViewportOrg()
    来调整;
      

  4.   

    代码如下,请各位帮忙CPrintDialog dlg(FALSE);
    dlg.GetDefaults();// is a default printer set up?
    HDC hdcPrinter = dlg.GetPrinterDC();if (hdcPrinter == NULL)
    {
       MessageBox(_T("Buy a printer!"));
    }
    else
    {
       // create a CDC and attach it to the default printer
       CDC dcPrinter;
       dcPrinter.Attach(hdcPrinter);
        // call StartDoc() to begin printing
       DOCINFO docinfo;
       memset(&docinfo, 0, sizeof(docinfo));
       docinfo.cbSize = sizeof(docinfo);
       docinfo.lpszDocName = _T("my print");   // if it fails, complain and exit gracefully
       if (dcPrinter.StartDoc(&docinfo) < 0)
       {
          MessageBox(_T("Printer wouldn't initalize"));
       }
       else
       {
          // start a page
          if (dcPrinter.StartPage() < 0)
          {
             MessageBox(_T("Could not start page"));
             dcPrinter.AbortDoc();
          }
          else
          {
                      //划线,输出文本操作         dcPrinter.EndPage();
             dcPrinter.EndDoc();
    //         dcPrinter.SelectObject(pOldFont);
          }
       }
    }