C#将A4尺寸面板打印到打印机

问题描述 投票:-1回答:1

我正在尝试将面板打印到A4尺寸的纸张上。该面板将包含报告,发票等,因此它应该在设计器中完全打印。

面板的属性是,

Properties

小组的内容,

contents

这是我工作的代码。

       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(panel1.Width, panel1.Height);

        float tgtWidthMM = 210;  //A4 paper size
        float tgtHeightMM = 297;  
        float tgtWidthInches = tgtWidthMM / 25.4f;
        float tgtHeightInches = tgtHeightMM / 25.4f;
        float srcWidthPx = bmp.Width; 
        float srcHeightPx = bmp.Height; 
        float dpiX = srcWidthPx / tgtWidthInches;
        float dpiY = srcHeightPx / tgtHeightInches;

        bmp.SetResolution(dpiX, dpiY);

        panel1.DrawToBitmap(bmp, panel1.ClientRectangle);

        e.Graphics.PageUnit = GraphicsUnit.Millimeter;
        e.Graphics.DrawImage(bmp, 0, 0, tgtWidthMM, tgtHeightMM);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        int pixelsWidth = 787;   
        int pixelsHeight = 1114;     //1 cm ~ 37.5      
        panel1.Size = new Size(pixelsWidth, pixelsHeight);

        PrintPanel();
    }

这很好,并将内容打印到pdf(我的默认打印机设置为Microsoft pdf打印机)。问题是内容没有填满A4纸,它只是侧面如下所示:pdf

编辑:

我发布问题后立即发现了我的错误。单击按钮时,我正在设置面板高度和宽度。这些值大于设计者中设置的值,并且标签未锚定。通过评论出panel1.Size = new Size(pixelsWidth, pixelsHeight);线。事情更好。

虽然标签似乎有点像素化,有没有办法让它有更清晰的分辨率?

c# printing panel bmp
1个回答
0
投票

你已经进行了大量的调整,看起来你的比率是这里的罪魁祸首。

  • 小组有width=420height=594
  • 然后A4应该具有相同的宽高比(例如:width=840height=1188

对于你的分辨率问题,为了简单起见,我建议你在单个单元(像素)中工作,并使用整数(因为位图不适用于小数 - 即没有像半像素那样)

我建议如果你要使用位图在A4上打印,尝试获得A4的宽度/高度的整数度量(以像素为单位)并从那里开始工作。

© www.soinside.com 2019 - 2024. All rights reserved.