说来也奇怪了,用MFC类写了一个打印的功能.当时测试的时候使用的是虚拟打印机,打印出来的效果还是可以,也就是满足了要求,  但是后来使用实际打印机的时候,打印出来的效果简直大相径庭啊,本来应该满满的一页,可是在打印出来的纸上却只有中间一点点,请问哪位高手可以指点指点啊,急啊!!!
急啊!!!急啊!!!急啊!!!急啊!!!急啊!!!急啊!!!急啊!!!急啊!!!急啊!!!

解决方案 »

  1.   

    分辨率的原因。打印的时候使用物理单位(英寸、厘米等)就可以了。英寸=像素 /分辨率dpi。  屏幕分辨率才96dpi, 打印机一般都有1200dpi以上,使用像素作为单位打印的话,不小才怪。
      

  2.   

    当然是在代码里面设置:
    例如代码:
      MoveTo(0, 0);
      LineTo(0, 96);因为屏幕的分辨率为96 dpi, 因此上面的语句是在屏幕上划96像素(96/96=1英寸)的线.
    当同样的代码不加修改的作用在打印机上时,他画出的线长是(假设打印机的分辨率是1200dpi):
    96/1200=0.08英寸。当然就差远了,所以正确的做法是:
    1。 使用统一的单位。
    使用SetMapMode  来设定一个要使用的映射模式,如:MM_HIMETRIC 使用0.01厘米作为逻辑单位。
    一厘米长的线等价于100个逻辑单位。
    该单位(厘米)是物理单位,与分辨率无关,所以就可以同用于各种显示设备、打印设备了。
    需要注意的是每一种映射的坐标系方向不一定相同, 选定某种映射后,就需要按照该映射的坐标系来作图了。
    专业图形软件一般是用这种方式。2。 使用单位转换。
    如果是非常简单的应用,不想那么复杂的话,可以进行简单的换算。如下语句:
    MoveTo(0,0);
    LineTO(0, 96);
    通常以屏幕显示地为准,那么它画的线长约(96/屏幕分辨率96dpi = 1英寸).下面的目标是在打印机上也能划出1英寸长的线。
    首先获取打印机的分辨率(GetCapbility之类的冬冬)p(架设p=1200).
    然后计算出所需要的像素 1 * 1200 =  1200.
    上面的语句就变成了
    MoveTo(0, 0);
    LineTo(0, 1200);上面只是详细的列出的原理性的过程,实际代码中可以简单的计算出一个比例,每次使用坐标的时候乘上一个比例就可以了。