2009-06-04 67 views
0

我有一些代码用于以编程方式创建一个文档发送到打印机。它是这样的:c#图形创建

private void pd_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs ev) 
{  
     ev.Graphics.DrawImage(pictureBox1.Image, 50, 100); 

     string drawToday="Date  : "+strToday; 
     string drawPolicyNo="Policy # : " + strPolicyNo; 
     string drawUser="User  : " + strUser; 
     Font drawFont=new Font("Arial",30); 
     SolidBrush drawBrush=new SolidBrush(Color.Black); 
     PointF drawPointToday=new Point(50,400); 
     PointF drawPointPolicyNo=new Point(50,450); 
     PointF drawPointUser=new Point(50,500); 
     ev.Graphics.DrawString(drawToday,drawFont,drawBrush,drawPointToday); 
     ev.Graphics.DrawString(drawPolicyNo,drawFont,drawBrush,drawPointPolicyNo); 
     ev.Graphics.DrawString(drawUser,drawFont,drawBrush,drawPointUser); 
} 

其有效代码,但现在我需要做同样的程序,而是将其写入到一个图像文件,以便它可以被发送到浏览器,并从那里打印。重复使用这段代码应该相对简单,但不幸的是,在更换PrintPageEventArgument时使用了什么样的绘图表面。

感谢

编辑:谢谢,我感到我只是需要另一个图形对象,但显卡本身对象不具有公共构造函数,所以我在找的是什么对象上的建议,我需要代替以便能够创建一个Graphics对象来绘制。我想也许是位图?位图当然是基于像素而不是基于点的,所以我不确定这是否是最好的介质。

+0

你可以得到一个图形对象来自许多不同的地方,如图像和控件。您可能会想要查看DpiX,DpiY,PageScale和PageUnit(也许是我现在不记得的其他几个属性)属性,以便从不同来源获取图形对象以类似方式运行。使用调试器调查PrintPage事件中图形对象的值以获得良好的起点。 – 2009-06-04 22:20:22

回答

5

如果我理解正确的话,你可以简单地从你的事件处理程序打出来的代码转换成另一种方法接受一个Graphics对象作为参数:

private void Print(Graphics g) 
{ 
    g.DrawImage(pictureBox1.Image, 50, 100); 

    string drawToday="Date  : "+strToday; 
    string drawPolicyNo="Policy # : " + strPolicyNo; 
    string drawUser="User  : " + strUser; 
    Font drawFont=new Font("Arial",30); 
    SolidBrush drawBrush=new SolidBrush(Color.Black); 
    PointF drawPointToday=new Point(50,400); 
    PointF drawPointPolicyNo=new Point(50,450); 
    PointF drawPointUser=new Point(50,500); 
    g.DrawString(drawToday,drawFont,drawBrush,drawPointToday); 
    g.DrawString(drawPolicyNo,drawFont,drawBrush,drawPointPolicyNo); 
    g.DrawString(drawUser,drawFont,drawBrush,drawPointUser); 
} 

然后调用该方法从事件处理程序:

private void pd_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs ev) 
{  
     Print(ev.Graphics); 
} 

然后你就可以重复使用相同的方法输出打印到任何其他Graphics实例:

using (Bitmap img = new Bitmap(width, height)) 
using (Graphics g = Graphics.FromImage(img)) 
{ 
    Print(g); 
    img.Save(fileName); 
} 
+0

谢谢弗雷德里克,有点我想。位图将是继续这样做的方式。 – 2009-06-04 22:03:16

2

要写出你的图形对象到图像文件中,你可以做这样的事情:

public void SaveImage(Graphics surface) 
{ 
    Bitmap bmp = new Bitmap(50, 100, surface); 
    bmp.Save("filename.png", ImageFormat.Png); 
} 

您可以从的imageformat类,如JPG,BMP等选择其他格式