大家好!我想把panel打印出来(里面有图片和文字),用的是把panel转化成图片打印,可是效果很差,请问还有其他方法吗?或者如何提高转换出来的图片效果??我的代码如下:
private void button4_Click(object sender, EventArgs e)
{
Graphics g1 = panel2.CreateGraphics();
g1.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g1.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
g1.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g1.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit; //g1.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
//g1.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit;
//g1.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit; myImage = new Bitmap(this.panel2.Width, this.panel2.Height, g1);
Graphics g2 = Graphics.FromImage(myImage);
g2.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g2.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
g2.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g2.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
IntPtr dc1 = g1.GetHdc();
IntPtr dc2 = g2.GetHdc();
BitBlt(dc2, 0, 0, this.panel2.Width, this.panel2.Height, dc1, 0, 0, 13369376);
g1.ReleaseHdc(dc1);
g2.ReleaseHdc(dc2);
myImage.RotateFlip(RotateFlipType.Rotate90FlipNone);
myImage.Save("c:/aa.bmp");
PageSetupDialog mypgDialog = new PageSetupDialog();
mypgDialog.Document = printDocument1; try
{
mypgDialog.ShowDialog();
}
catch
{
printDocument1.PrintController.OnEndPrint(printDocument1, new System.Drawing.Printing.PrintEventArgs());
}
//***************************** PrintPreviewDialog dlg = new PrintPreviewDialog(); dlg.Document = printDocument1;
dlg.Document.DefaultPageSettings.PaperSize = new System.Drawing.Printing.PaperSize("cardc", 204, 324); if (dlg.ShowDialog() == DialogResult.OK)
{
printDocument1.Print();
} g1.Dispose(); }
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
e.Graphics.DrawImage(myImage, 0, 0);
}
private void button4_Click(object sender, EventArgs e)
{
Graphics g1 = panel2.CreateGraphics();
g1.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g1.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
g1.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g1.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit; //g1.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
//g1.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit;
//g1.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit; myImage = new Bitmap(this.panel2.Width, this.panel2.Height, g1);
Graphics g2 = Graphics.FromImage(myImage);
g2.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g2.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
g2.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g2.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
IntPtr dc1 = g1.GetHdc();
IntPtr dc2 = g2.GetHdc();
BitBlt(dc2, 0, 0, this.panel2.Width, this.panel2.Height, dc1, 0, 0, 13369376);
g1.ReleaseHdc(dc1);
g2.ReleaseHdc(dc2);
myImage.RotateFlip(RotateFlipType.Rotate90FlipNone);
myImage.Save("c:/aa.bmp");
PageSetupDialog mypgDialog = new PageSetupDialog();
mypgDialog.Document = printDocument1; try
{
mypgDialog.ShowDialog();
}
catch
{
printDocument1.PrintController.OnEndPrint(printDocument1, new System.Drawing.Printing.PrintEventArgs());
}
//***************************** PrintPreviewDialog dlg = new PrintPreviewDialog(); dlg.Document = printDocument1;
dlg.Document.DefaultPageSettings.PaperSize = new System.Drawing.Printing.PaperSize("cardc", 204, 324); if (dlg.ShowDialog() == DialogResult.OK)
{
printDocument1.Print();
} g1.Dispose(); }
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
e.Graphics.DrawImage(myImage, 0, 0);
}
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
e.Graphics.DrawString
e.Graphics.DrawLine
e.Graphics.DrawImage
}
{
int w, h; if (pnl.VerticalScroll.Visible && pnl.HorizontalScroll.Visible)
{
w = pnl.HorizontalScroll.Maximum;
h = pnl.VerticalScroll.Maximum;
}
else if (pnl.VerticalScroll.Visible && !pnl.HorizontalScroll.Visible)
{
w = pnl.Width - SystemInformation.VerticalScrollBarWidth;
h = pnl.VerticalScroll.Maximum;
}
else if (!pnl.VerticalScroll.Visible && pnl.HorizontalScroll.Visible)
{
w = pnl.HorizontalScroll.Maximum;
h = pnl.Height - SystemInformation.HorizontalScrollBarHeight;
}
else
{
w = pnl.Width;
h = pnl.Height;
} Image m = new Bitmap(w, h);
Graphics g = Graphics.FromImage(m);
g.Clear(pnl.BackColor);
foreach (Control c in pnl.Controls)
{
Bitmap b = new Bitmap(c.Width, c.Height);
c.DrawToBitmap(b, new Rectangle(new Point(0, 0), c.Size));
g.DrawImage(b, c.Location);
} return m;
}
那就没有办法了,只能向你绘制的方式一步步打印出来了,在打印机的print里面写代码了