最近一個新的項目中,有一個要求,就是把資料列印出來。經過調查,寫了一個類。
主要應用了 System.Drawing
Pint為主要方法 參數是將要列印的結果。 public void Print(CmDCardPrintData argDcardData)
{
Thread.CurrentThread.CurrentCulture =
CultureInfo.CreateSpecificCulture("en-US");
printData = argDcardData;
bool isToBitmap = Boolean.Parse(reportSettings["print.toBitmap"]);
string bitmapSaveDir = reportSettings["print.bitmapSaveDir"];
string printerName = reportSettings["print.printerName"];
mCode39Format = reportSettings["print.CODE39.Format"];
leftMargin = Int32.Parse(reportSettings["print.leftMargin"]);
topMargin = Int32.Parse(reportSettings["print.topMargin"]);
if (isToBitmap)
{
for debug. print to bitmap image.#region for debug. print to bitmap image.
// for debug. print to bitmap image.
Bitmap bitmap = new Bitmap(1024, 768);
Graphics g = Graphics.FromImage(bitmap);
g.FillRectangle(Brushes.White, 0, 0, 1024, 768);
PrintData(g, leftMargin, topMargin);
string path = String.Format(bitmapSaveDir, CmStringUtils.GetSysDateString());
CmFileUtils.EnsureDirectory(path);
bitmap.Save(path);
#endregion
}
else
{
print to printer#region print to printer
// print to printer
PrintDocument pd = new PrintDocument();
if (!CmStringUtils.IsEmpty(printerName))
{
pd.PrinterSettings.PrinterName = printerName;
}
Margins margins = new Margins(leftMargin, leftMargin, topMargin, topMargin);
pd.DefaultPageSettings.Margins = margins;
pd.DefaultPageSettings.Landscape = true;
pd.PrintPage += new PrintPageEventHandler
(this.Pd_PrintPage);
try
{
// Print to printer.
pd.Print();
}
catch (Exception ex)
{
// if any error occurred.
CmLogger.Log(ex);
throw new CmLogicException("SE00027", ex);
}
#endregion
}
}
private void Pd_PrintPage(object sender, PrintPageEventArgs ev)
{
PrintData(ev.Graphics, ev.MarginBounds.Left, ev.MarginBounds.Top);
ev.HasMorePages = false;
}
private void DrawText(Graphics g, string curField,string text)
{
g.TranslateTransform(leftMargin + fieldInfos[curField].Left, topMargin + fieldInfos[curField].Top);
g.ScaleTransform(1.0F, fieldInfos[curField].VerticalRatio);
g.DrawString(text,
fieldInfos[curField].Font, Brushes.Black,
0, 0);
// reset matrix
g.ResetTransform();
}
列印的結果圖: