LZ用printDocument打印表格挺麻烦的,光是计算文字之间的间距什么就够麻烦了,最好还是用水晶报表,这个很简单,做好报表,打印的时候用表格填充一下报表就可以打印了

解决方案 »

  1.   

    谢谢各位热心肠哈,但是作为编程学习者,我希望能把问题搞清楚,这个像素值与可计量单位之间的转换问题我查过网上很多答案,有一种方法应该可行,可是我没搞懂,没看到详细代码,大致思路是:1、用API函数获得设备句柄(指针)
    2、用API函数获得设备分辨率
    3、根据水平与垂直方向分辨率分别对宽、高进行换算,这样就可以统一坐标数据的计量单位
    4、用e.Graphics.PageUnit来指定打印时的计量单位为换算后统一的单位我不知道为什么要这样做,也不知道这个办法的具体代码如何写,我不知道为什么用e.Graphics.DpiX/Y来做换算参数为什么得到的打印结果相差甚远,好象没人愿意涉及这个问题,大家都在回避回答这样的问题,我刚学,是真的不懂,也许是因为这个问题很SB,没人愿意回答吧。
      

  2.   

    因为没人这么做打印。你的基础自己开发打印控件又不够,所以别人不知道怎么回答你。
    就实际问题而言,你应该用水晶报表或者RDLC来实现打印部分。gdi+来打印datagridview不是一个明智的选择。像素值和英寸之间的关系,专业名词叫做DPI。一般我们的显示器是96DPI,而不同打印机也有不同。GDI+是与设备分离的图形库,只负责像素部分。实际大小的转换就要你自己控制了,一般打印机驱动会说明自身的DPI,
    或者你也可以打印到PDF文件,PDF的DPI默认是72.