C# 将 A4 大小的面板打印到打印机

Posted

技术标签:

【中文标题】C# 将 A4 大小的面板打印到打印机【英文标题】:C# Printing A4 size panel to a printer 【发布时间】:2017-02-14 16:55:50 【问题描述】:

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

面板的属性是,

面板的内容,

这是我正在工作的代码。

       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纸,它只是在旁边,如下图所示:

编辑:

我一发布问题就发现了我的错误。单击按钮时,我正在设置面板的高度和宽度。这些值大于设计器中的一组值,并且标签未锚定。只需注释掉panel1.Size = new Size(pixelsWidth, pixelsHeight); 行。事情会更好。

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

【问题讨论】:

【参考方案1】:

您在尺寸调整方面做了很多工作,看来您的比率是这里的罪魁祸首。

面板有width=420,height=594 A4 应该是相同的纵横比(例如:width=840height=1188)

对于您的分辨率问题,为简单起见,我建议您使用单个单位(像素),并使用整数(因为位图不适用于小数 - 即没有半像素之类的东西)

如果您要使用位图在 A4 上打印,我的建议是尝试获取 A4 宽度/高度的整数度量(以像素为单位),然后从那里返回。

【讨论】:

这会发生在您尝试使用浮点缩放它时,这也是您正在放大而不是缩小的事实。 @PeresCudd 我根据你的新问题更新了我的答案。 阅读我刚才更新的答案,特别是使用像素而不是小数缩放,尝试整数缩放。

以上是关于C# 将 A4 大小的面板打印到打印机的主要内容,如果未能解决你的问题,请参考以下文章

eplan 纸张设置大小,怎么设置成a4纸横向

如何把A4的word文档,用A5大小的纸张打印出来,

在 C# winforms 中将 RDLC 报告适合 A4 页面

c# winform如何设置打印纸张大小

C#打印的时候如何设置A4纸张为横向

怎么在C#打印自定义纸张