我正在尝试制作一个程序,将打印机上的图像文件打印到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%。我该如何修改代码?
答案 0 :(得分:2)
图像缩放为A4
这是问题陈述。 PrintDocument已经扩展。它将您从PrintPage事件处理程序中的e.Graphics获取的Graphics实例初始化为PageUnit = GraphicsUnit.Display。这是一种预煮的缩放模式,可在纸上制作一个0.01英寸的像素。换句话说,100 x 100像素的图像在纸上变为1.00 x 1.00英寸。
这是一种方便的缩放模式,用于将您在屏幕上绘制的任何内容绘制成相同尺寸的纸张。视频适配器往往以每英寸96点的分辨率运行。虽然这种情况正在发生变化,但后来的Windows版本使得增加它变得非常容易。
因此,通过预先对图像进行预定,您最终会使图像变大。然后通过打印机的Graphics对象进行的额外缩放使其在纸上太大。
提供更好的建议并不容易,因为您没有描述如何对图像进行预分类。简单地说,预定标可能已经解决了你的问题。使用Graphics.DrawImage(Image,Rectangle)重载可能是一个更好的选择,它可以让您直接控制纸张上的图像大小。同时让您有机会处理不同的纸张尺寸并使图像更合适。