C#Can';t打印正确的图像大小

C#Can';t打印正确的图像大小,c#,printing,C#,Printing,我正在尝试制作一个程序,将图像文件打印到A4大小的纸张上。(图像缩放为A4)这是我目前使用的代码 Function.cs Image tmp; public void PrintImage(string FileName) { tmp = Image.FromFile(FileName); PrintDocument printDoc = new PrintDocument(); printDoc.Docu

我正在尝试制作一个程序,将图像文件打印到A4大小的纸张上。(图像缩放为A4)这是我目前使用的代码

Function.cs        

    Image tmp;
    public void PrintImage(string FileName)
    {
        tmp = Image.FromFile(FileName);
        PrintDocument printDoc = new PrintDocument();
        printDoc.DocumentName = "My Print Document";
        printDoc.PrintPage += new PrintPageEventHandler(OnPrintPage);
        // Send print message
        Console.WriteLine("Sending Print Message...");
        try
        {
            printDoc.Print();
        }
        catch(Exception)
        {
            Console.WriteLine("Error: No Printer Installed");
        }
        //
        // Event Handler
        //
    }
    private void OnPrintPage(object sender, PrintPageEventArgs ppea)
    {
    Console.WriteLine("Printing...");
    Graphics g = ppea.Graphics;
    g.DrawImage(tmp,0,0);
    }



Main.cs

    string ReceiptFilePath = "C:\\Receipt.jpg"; // The Image I want to print.

    private void button1_Click(object sender, EventArgs e)
    {
        functions.PrintImage(ReceiptFilePath);
    }
使用上面的代码,它可以打印,但是它不是A4大小,而是放大了近400%。我应该如何修改代码

图像缩放为A4

这就是问题陈述。打印文档已经缩放。它将从PrintPage事件处理程序中的e.Graphics获取的图形实例初始化为PageUnit=GraphicsUnit.Display。这是一种预煮缩放模式,使纸张上的一个像素为0.01英寸。或者换句话说,100 x 100像素的图像在纸上变成1.00 x 1.00英寸

这是一种方便的缩放模式,选择此模式可以使您在屏幕上绘制的任何内容在纸上的大小大致相同。视频适配器通常以每英寸96点的分辨率工作。尽管这种情况正在改变,但更高版本的Windows确实很容易增加这一点

因此,通过预先调整图像的大小,最终会使图像变大。然后,由于打印机的图形对象进行了额外的缩放,使其在纸张上过大


给出更好的建议并不是那么容易,因为你没有描述你是如何对图像进行预定标的。简单地不开处方可能已经解决了你的问题。使用Graphics.DrawImage(Image,Rectangle)重载可能是更好的选择,它可以让您直接控制纸张上图像的大小。这也给了你一个处理不同纸张尺寸的机会,同时还能使图像更合适。

我开始有了一些想法。。。这意味着如果我将图像缩放到830px*1170px,它将正常打印?它将以8.3x11.7英寸的速度打印。听起来像A4大小的,我在大洋的另一边。请注意,您需要保持图像的纵横比。请记住纸页边距,你不能一直打印到纸的边缘。我尝试过这种方法,它可以无缝工作,但是它的分辨率非常低。。。有没有办法解决这个问题?打印机的分辨率比显示器高得多,通常是显示器的6倍(600 dpi比96 dpi)。因此,在显示器上看起来像样的图像将在纸上把像素变成6x6的矩形。一臂之遥看起来像颗粒状的。您需要更长的手臂或更好的图像源。