1

我使用常规 GDI+/.NET 方法在带有 7.5X8 厘米标签的标签打印机上打印,效果很好

void pdPrintLabel(object sender, PrintPageEventArgs ev)
{
  Graphics g = ev.Graphics;  

  using (Font smallFont = new Font(FontFamily.GenericSansSerif, 6),
              mediumFont = new Font(FontFamily.GenericSansSerif, 8),
              bigFont = new Font(FontFamily.GenericSansSerif, 10, FontStyle.Bold))
  {
    SizeF smallSize = g.MeasureString("XXX", smallFont);
    SizeF mediumSize = g.MeasureString("XXX", mediumFont);
    SizeF bigSize = g.MeasureString("XXX", bigFont);

    Brush blackBrush = Brushes.Black;

    g.DrawString((bagNumber / 50 + 1) + bagNumber, bigFont, blackBrush, pos);
    // etc
  }
}

现在打印机更换了,相同型号只是不同的打印机。相同的代码现在只填充了标签的一半。我猜有些设置是不同的。我可以用

ev.Graphics.ScaleTransform(1.3f, 1.4f);

但只有在微调/重新编译/测试参数之后。当然,我不想每次使用新打印机时都更改该代码。那么有没有一种算法可以用来计算正确的 ScaleTransform 参数?

编辑:

最重要的是,从一台打印机导入设置并将它们导出到另一台打印机并没有改变任何东西

4

1 回答 1

2

打印机的默认缩放模式是 GraphicsUnit.Display,代码中的一个像素在纸上是 0.01 英寸。这是一种与分辨率无关的缩放模式,无论打印机分辨率如何,输出在纸张上的尺寸始终相同。所以你永远不需要自己使用 Graphics.ScaleTransform 来调整缩放比例。

这台打印机的打印机驱动程序有问题,它似乎误报了打印机分辨率。这是非常罕见的,尤其是当您使用完全相同的打印机型号时。确保它不是打印机的内置功能来缩放恰好在第二台打印机上具有不同设置的输出。对于标签打印机来说并非完全不寻常,他们喜欢容纳不是为处理各种标签尺寸而设计的软件。如果您无法从手册中解决问题,则需要制造商的帮助。

于 2013-09-13T14:21:28.050 回答