c# – 打印质量winform

尝试从WinForms应用程序打印时,我有2个问题.第一个是非常非常糟糕的质量,无论我尝试.第二个是我从左上角有一个大的页边距,而winform正在削减.有任何想法吗?这是我的代码:

Bitmap MemoryImage;
    public void GetPrintArea(Panel pnl)
    {
        MemoryImage = new Bitmap(pnl.Width, pnl.Height);
        Rectangle rect = new Rectangle(0, 0, pnl.Width, pnl.Height);
        pnl.DrawToBitmap(MemoryImage, new Rectangle(0, 0, pnl.Width, pnl.Height));
    }
    protected override void OnPaint(PaintEventArgs e)
    {
        if (MemoryImage != null)
        {
            e.Graphics.DrawImage(MemoryImage, 0, 0);
            base.OnPaint(e);
        }
    }
    void printdoc1_PrintPage(object sender, PrintPageEventArgs e)
    {
        e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
        e.Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBilinear;
        e.Graphics.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
        Rectangle pagearea = e.PageBounds;
        e.Graphics.DrawImage(MemoryImage, (pagearea.Width / 2) - (this.panel1.Width / 2), this.panel1.Location.Y);

    }
    public void Print(Panel pnl)
    {
        panel1 = pnl;
        GetPrintArea(pnl);
        printPreviewDialog1.Document = printdoc1;
        printPreviewDialog1.ShowDialog();
    }
    private void button2_Click(object sender, EventArgs e)
    {
        Print(this.panel1);
    }
这一次又一次出现.只是没有魔法的解决方案,尽管最终问题可能会消失. “视网膜”显示器的出现至关重要.

核心问题是显示器的分辨率比打印机差得多.典型的打印机的分辨率为每英寸600点.这使得它能够在一张纸上打印6600 x 5100个像素.与显示器可以显示的相比,全高清显示器的尺寸远远超出了1920 x 1080像素.大概要差5倍,给或拿.

当您在一张纸上打印显示器上显示的内容并尝试保持相同的尺寸时,这样做效果不佳.不可避免地,由于监视器上缺少像素,来自监视器的每个像素都打印在纸上的5×5斑点上.如果您尝试将像素映射到一对一,您将在纸上获得剃须刀.但它已经变成邮票了.

不可避免地,由于这些像素斑点,打印输出看起来很粒状.文字看起来特别糟糕.操作系统使用很多技巧,使文本在分辨率差的显示器上看起来不错.抗锯齿是标准的,像ClearType这样的技巧被设计为利用可以帮助增加感知分辨率的监视物理学.当文本打印时,这不再起作用,那些抗锯齿像素变成斑点并变得非常明显,完全破坏了效果.对于彩色打印机上的ClearType文本特别不利,现在可以清楚地看到红色和蓝色的彩色条纹.

唯一有用的方法是使用实​​际分辨率渲染到打印机,而不是显示器分辨率.就像在.NET中使用PrintDocument类一样.使用报表生成器可以帮助避免编写代码.

相关文章
相关标签/搜索