打印纸宽为60mm,高为40mm,我设置打印区域为240*160,pd.DefaultPageSettings.PaperSize = new PaperSize("Custum", 240, 160);
经过打印试验,搞好将打印纸铺满,于是我计算打印机的分辨率:240/(60/25.4)=101.6 DPI,
但我在代码中获取打印机分辨却为203!
e.Graphics.DpiX .ToString ()的值为"203"!
为什么相差了一半?
这个问题拖了很久都未解决,也不知道哪个地方出现了错误,求指点呀……Graphics.DpiXC#打印机分辨率

解决方案 »

  1.   

    貌似没错呀,纸的宽度为:60mm/25.4mm/inch=2.36inch
    分辨率为:240pixel/2.36inch=101.6dpi
      

  2.   

    看看打印机设置里面的DPI是多少。
      

  3.   

    打印机的DPI应该是固定的吧
    图形对象的DPI可以自己设置
      

  4.   

    PrintDocument pd = new PrintDocument();                PageSettings df = new PageSettings();            df.PaperSize = new PaperSize("A4", 300, 142);
                PrinterResolution pr = new PrinterResolution();
                pr.X = 1200;
                pr.Y = 1200;
                df.PrinterResolution = pr;
                pd.DefaultPageSettings = df;
    打印机的DPI是可以设置的,在首选项也能看到喔
      

  5.   

    这是一个条码打印机,型号为:Eltron LP2642,里面写着最大支持分辨率为203,我找不到调节分辨率的选项,有一个出纸速度的选项可以选:2.5cm/s,3.7cm/s,5cm/s,但我试过都没什么却别……
      

  6.   

    搞打印不需要DPI什么设计。直接在 PrintDocument上打印输出即可。
      

  7.   

    这是一个条码打印机,型号为:Eltron LP2642,里面写着最大支持分辨率为203,我找不到调节分辨率的选项,有一个出纸速度的选项可以选:2.5cm/s,3.7cm/s,5cm/s,但我试过都没什么却别……
    你在代码中获取的DPI就是打印机的DPI啊。
      

  8.   

    那输出的位置怎么确定呢?graphics.drawstring 的位置呀,有其他方法吗?
      

  9.   

    DrawString不是有坐标吗?
    你直接测试你的标签坐指定就OK了。PrintDocument本身就是与设备无关的。你还中纠结DPI干什么?
      

  10.   

    额,我说明一下我的理解……比如
                e.Graphics.DrawString(Lab_ID.Text, new Font(new FontFamily("黑体"), 16, FontStyle.Bold), System.Drawing.Brushes.Black, 10, 15);这时打印的字(Lab_ID.Text)离打印纸的左边为10个像素,我假设这个距离为1厘米,
    在第二次打印前,我将打印机的打印分辨率调高一倍,那么同样是10个像素的边距,会不会是0.5厘米呢?
      

  11.   

    哈哈你有个关键值没设定在打印的时候可以指定 PageUnit 也就是 使用单位。如果你指定的是mm 毫米。
    那么你在测量的时把你的测量数据mm值对到DrawString坐标即。
    不用管设备分辨率、DPI 什么的。因为它是与设备无关的。
      

  12.   

    关键代码。
    e.Graphics.PageUnit = GraphicsUnit.Millimeter测量值 往DrawString里写就行了。 PaperSize 用的是英尺 一般我们都是用的是毫米 Millimeter所以需要转换一下纸大小。width为mm width/25.4 *100 好像就可以了。你自己查一下