将面板打印到打印机

我正在尝试将面板(及其内容)打印到打印机。 我在网上看到了不同的post,但我无法打印面板并获得正确的尺寸。 面板打印得非常大,并不像预期的那样。

例如,我想打印一个面板,输出尺寸为80mm X 40mm:

private void Print_Click(object sender, EventArgs e) { int pixelsWidth = 300; // 300 pixels= ~8cm int pixelsHeight = 150; // 150 pixels= ~4cm panelLabel.Size = new Size(pixelsWidth,pixelsHeight); PrintPanel(); } private void PrintPanel() { System.Drawing.Printing.PrintDocument doc = new PrintDocument(); doc.PrintPage += new PrintPageEventHandler(doc_PrintPage); doc.Print(); } private void doc_PrintPage(object sender, PrintPageEventArgs e) { Bitmap bmp = new Bitmap(panelLabel.Width, panelLabel.Height); panelLabel.DrawToBitmap(bmp, new Rectangle(0, 0, panelLabel.Width, panelLabel.Height)); RectangleF bounds = e.PageSettings.PrintableArea; e.Graphics.PageUnit = GraphicsUnit.Millimeter; e.Graphics.DrawImage(bmp, bounds.Left, bounds.Top, bounds.Width, bounds.Height); } 

你已经把事情做好了。

唯一缺少的是设置Bitmap的分辨率

如果不这样做,则会从屏幕上复制,这通常不适用于打印机。 通常导致输出太小,但是由于您已经将Graphics设置为使用毫米,我们需要调整位图以了解像素应该转换为什么。

假设二次像素尝试这样:

 int pixelsWidth = 300; // 300 pixels= ~8cm int pixelsHeight = 150; // 150 pixels= ~4cm Bitmap bmp = new Bitmap(pixelsWidth, pixelsHeight); //.. float targetWidthInInches = 80f / 25.4f; float dpi = 1f * pixelsWidth / targetWidthInInches; bmp.SetResolution(dpi, dpi);