我正在尝试将面板(及其内容)打印到打印机。 我在网上看到了不同的帖子,但我无法打印面板并获得正确的尺寸。该面板的印刷量非常大,与预期不符。
例如,我想打印一个面板,输出尺寸为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);
}
答案 0 :(得分:0)
你已经把事情做好了。
唯一缺少的是为位图设置分辨率。
如果您不这样做,则会从屏幕上复制,这通常不适用于打印机。通常导致输出太小,但是因为您已经将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);