【发布时间】:2023-12-20 18:26:01
【问题描述】:
我在使用PrintDocument 类打印标签时遇到问题。我正在尝试打印恰好是条形码的图像。此图像是使用找到的代码生成的 here.
我遇到的问题是,在 dpi 为 203 的打印机上打印图像时,条形边缘模糊。我认为这是由于图像试图在打印头上的 2 个点之间打印时打印机上的抖动造成的。
我曾尝试在生成图像之前缩放条形码,但这没有效果。
public void Print()
{
PrintDocument printDocument = new PrintDocument
{
DefaultPageSettings =
{
Landscape = label.Landscape,
PaperSize = label.PaperSize
},
OriginAtMargins = true,
PrinterSettings = { PrinterName = "PrinterName" },
PrintController = new StandardPrintController()
};
printDocument.PrintPage += On_PrintPage;
printDocument.Print();
}
private void On_PrintPage(object sender, PrintPageEventArgs e)
{
e.Graphics.ResetTransform();
DrawBarcode(_elements[0], e.Graphics);
}
private DrawBarcode(IElement labelElement, Graphics graphics)
{
float xTranslate = (labelElement.X/96)*Dpi - ((hardMarginX/100)*Dpi );
float yTranslate = (labelElement.Y/96)*Dpi - ((hardMarginY/100)*Dpi );
//Call to baroode library
Image barcodeImage = labelElement.GetBarcodeImage((int) ((labelElement.Width/96)*Dpi ), (int) ((labelElement.Height/96)*Dpi ));
graphics.TranslateTransform(xTranslate, yTranslate);
graphics.DrawImage(barcodeImage, new Rectangle(0, 0, barcodeImage.Width, barcodeImage.Height));
graphics.ResetTransform();
}
IElement 对象只是一个类,它包含有关将打印在标签上的元素的位置和大小的信息。
我认为生成大小为(labelElement.Width/96)*Dpi 的Dpi = 203 可以解决问题。在此更改之前,dpi 始终为 300,因为这是 GDI 使用的单位。此更改对条码图像的清晰度没有帮助,并导致元素没有出现在应有的位置。
我是否可以在 PrintDocument 类的 203 dpi 打印机上打印清晰的图像(特别是条形码)?
谢谢
【问题讨论】: