在C#中,我尝试使用PrintDocument类打印图像,代码如下。图像的大小为1200像素宽,1800像素高。我正尝试用一台小型zeebra打印机在4*6的纸张上打印这张图片。但是程序只打印了4*6张大图像。这意味着它不会将图像调整为纸张大小!
PrintDocument pd = new PrintDocument();
pd.PrintPage += (sender, args) =>
{
Image i = Image.FromFile("C://tesimage.PNG");
Point p = new Point(100, 100);
args.Graphics.DrawImage(i, 10, 10, i.Width, i.Height);
};
pd.Print();
当我使用窗口打印打印相同的图像时(右键单击并选择打印,它会自动缩放到纸张大小并正确打印。这意味着所有的东西都是用4*6的纸写的。)如何在我的C#程序中执行相同的操作?
发布于 2012-04-03 06:30:48
传递给DrawImage方法的参数应该是您希望在纸上显示的图像的大小,而不是图像本身的大小,然后DrawImage命令将为您处理缩放。最简单的方法可能是使用下面的DrawImage命令覆盖。
args.Graphics.DrawImage(i, args.MarginBounds);
注意:如果图像的比例与矩形不同,这将使图像倾斜。通过对图像大小和纸张大小进行一些简单的数学运算,您可以在不扭曲图像的情况下创建一个适合纸张边界的新矩形。
发布于 2013-10-11 05:01:52
我不想践踏BBoy已经不错的答案,但我已经完成了保持纵横比的代码。我接受了他的建议,所以他应该在这里得到部分学分!
PrintDocument pd = new PrintDocument();
pd.DefaultPageSettings.PrinterSettings.PrinterName = "Printer Name";
pd.DefaultPageSettings.Landscape = true; //or false!
pd.PrintPage += (sender, args) =>
{
Image i = Image.FromFile(@"C:\...\...\image.jpg");
Rectangle m = args.MarginBounds;
if ((double)i.Width / (double)i.Height > (double)m.Width / (double)m.Height) // image is wider
{
m.Height = (int)((double)i.Height / (double)i.Width * (double)m.Width);
}
else
{
m.Width = (int)((double)i.Width / (double)i.Height * (double)m.Height);
}
args.Graphics.DrawImage(i, m);
};
pd.Print();
发布于 2015-06-30 23:12:33
BBoy提供的解决方案运行良好。但在我的例子中,我不得不使用
e.Graphics.DrawImage(memoryImage, e.PageBounds);
这将仅打印表单。当我使用MarginBounds时,即使窗体比显示器屏幕小,它也会打印整个屏幕。PageBounds解决了这个问题。感谢BBoy!
https://stackoverflow.com/questions/9982579
复制相似问题