C# 以高质量打印winform?

C# 以高质量打印winform?,c#,visual-studio-2010,printing,C#,Visual Studio 2010,Printing,我刚开始写代码,但我正在学习C语言,并且正在为我的商店制作一个小的账单制作程序。我需要打印这张表格,这是我的账单。通过在互联网上搜索,我发现了以下代码: printForm1.Print(this, PrintForm.PrintOption.ClientAreaOnly); 我的账单表单有两个图像和一个gridviewbox。此代码可以打印账单,但.xps文件的质量很差-即使文本打印不清晰 如何提高表单的打印质量?是的,除非你的手臂很长,否则看起来不太好。问题是打印机的像素分辨率比显示器高得

我刚开始写代码,但我正在学习C语言,并且正在为我的商店制作一个小的账单制作程序。我需要打印这张表格,这是我的账单。通过在互联网上搜索,我发现了以下代码:

printForm1.Print(this, PrintForm.PrintOption.ClientAreaOnly);
我的账单表单有两个图像和一个gridviewbox。此代码可以打印账单,但.xps文件的质量很差-即使文本打印不清晰


如何提高表单的打印质量?

是的,除非你的手臂很长,否则看起来不太好。问题是打印机的像素分辨率比显示器高得多。一台像样的打印机每英寸分辨率为600 dpi点。默认情况下,显示器的分辨率为96 dpi,但经过几十年的努力,显示器的分辨率终于有所提高

因此,要以这种方式打印表单,您有两个不愉快的选择。您可以打印表单,使屏幕上的一个像素等于纸张上的一个像素。这给了你一个非常清晰的原始形式的图像,但它的大小大约是一张邮票。或者你在纸上打印的表单和在屏幕上打印的表单一样大,就像你现在看到的一样。这将使显示器上的单个像素变成纸上的6 x 6斑点。结果看起来非常粗糙,尤其是文本看起来很糟糕

一个解决方案是在屏幕上画出6倍大的表格并打印出来。但是这不起作用,你不能使窗体比屏幕大。唯一真正的解决办法是在打印机上画6倍大的图。这需要PrintDocument类。在它的PrintPage事件处理程序中有一堆代码来进行绘图。你不能哄骗控件为你做这件事,所以那是一堆工作


或者使用报告生成器。他们的存在就是为了解决这个问题。谷歌.net报表生成器开始购物。

是的,除非你的手臂很长,否则看起来不太好。问题是打印机的像素分辨率比显示器高得多。一台像样的打印机每英寸分辨率为600 dpi点。默认情况下,显示器的分辨率为96 dpi,但经过几十年的努力,显示器的分辨率终于有所提高

因此,要以这种方式打印表单,您有两个不愉快的选择。您可以打印表单,使屏幕上的一个像素等于纸张上的一个像素。这给了你一个非常清晰的原始形式的图像,但它的大小大约是一张邮票。或者你在纸上打印的表单和在屏幕上打印的表单一样大,就像你现在看到的一样。这将使显示器上的单个像素变成纸上的6 x 6斑点。结果看起来非常粗糙,尤其是文本看起来很糟糕

一个解决方案是在屏幕上画出6倍大的表格并打印出来。但是这不起作用,你不能使窗体比屏幕大。唯一真正的解决办法是在打印机上画6倍大的图。这需要PrintDocument类。在它的PrintPage事件处理程序中有一堆代码来进行绘图。你不能哄骗控件为你做这件事,所以那是一堆工作


或者使用报告生成器。他们的存在就是为了解决这个问题。Google.net report generator开始购物。

以下是将大型图像渲染到打印机的基本示例:

Bitmap bitmapToPrint;
    public void printImage()
    {
        bitmapToPrint = new Bitmap(3400,4400);
        Font font = new Font(FontFamily.GenericSansSerif, 120, FontStyle.Regular);
        string alphabet = "abcdefghijklmnopqrstuvwxyz";
        Graphics graphics = Graphics.FromImage(bitmapToPrint);
        graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
        graphics.DrawString(alphabet, font, System.Drawing.Brushes.Black, 0, 0);
        graphics.DrawString(alphabet, font, System.Drawing.Brushes.Black, 0, 1000);
        graphics.DrawString(alphabet, font, System.Drawing.Brushes.Black, 0, 2000);
        graphics.DrawString(alphabet, font, System.Drawing.Brushes.Black, 0, 3000);

        PrintDocument pd = new PrintDocument();
        pd.PrinterSettings.PrinterName = "Microsoft XPS Document Writer";
        pd.PrinterSettings.PrintToFile = true;
        pd.PrintPage += new PrintPageEventHandler(pd_PrintPage);
        pd.Print();
    }
    void pd_PrintPage(object sender, PrintPageEventArgs e)
    {
        e.Graphics.DrawImage(bitmapToPrint, new RectangleF(0.0f, 0.0f, 850.0f, 1100.0f));
    }

以下是向打印机渲染大图像的基本示例:

Bitmap bitmapToPrint;
    public void printImage()
    {
        bitmapToPrint = new Bitmap(3400,4400);
        Font font = new Font(FontFamily.GenericSansSerif, 120, FontStyle.Regular);
        string alphabet = "abcdefghijklmnopqrstuvwxyz";
        Graphics graphics = Graphics.FromImage(bitmapToPrint);
        graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
        graphics.DrawString(alphabet, font, System.Drawing.Brushes.Black, 0, 0);
        graphics.DrawString(alphabet, font, System.Drawing.Brushes.Black, 0, 1000);
        graphics.DrawString(alphabet, font, System.Drawing.Brushes.Black, 0, 2000);
        graphics.DrawString(alphabet, font, System.Drawing.Brushes.Black, 0, 3000);

        PrintDocument pd = new PrintDocument();
        pd.PrinterSettings.PrinterName = "Microsoft XPS Document Writer";
        pd.PrinterSettings.PrintToFile = true;
        pd.PrintPage += new PrintPageEventHandler(pd_PrintPage);
        pd.Print();
    }
    void pd_PrintPage(object sender, PrintPageEventArgs e)
    {
        e.Graphics.DrawImage(bitmapToPrint, new RectangleF(0.0f, 0.0f, 850.0f, 1100.0f));
    }

搜索PrintScreen并使用它和您的表单位置/大小,以便创建高质量的表单图像,然后将其发送到打印机。所有步骤都将通过代码完成。可能会有帮助;我不确定除了你发布的那一行之外,你都尝试了些什么。搜索PrintScreen并使用它和你的表单位置/大小,以便创建高质量的表单图像,然后将其发送到打印机。所有步骤都将通过代码完成。可能会有帮助;我不知道除了你贴的那一行之外,你都试了些什么。谢谢你有用的回答。谢谢你有用的回答。