2009-06-04 120 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等選擇其他格式