将面板打印到打印机

时间:2015-12-06 10:12:16

标签: c# winforms graphics printing dpi

我正在尝试将面板(及其内容)打印到打印机。 我在网上看到了不同的帖子,但我无法打印面板并获得正确的尺寸。该面板的印刷量非常大,与预期不符。

例如,我想打印一个面板,输出尺寸为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);
    }

1 个答案:

答案 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);