我正在编写一个需要打印一些来自DataGridView的信息的应用程序,我已经有了我想打印的字符串,我只是不知道如何。我在网上发现了一些说我需要使用PrintDocument对象和PrintDialog的东西。
假设我有3个字符串,我想在一行(第1,2和3行)中打印每个字符串,但第一个必须以粗体显示并使用Arial字体。 输出(在纸上)将是:
string 1 (in bold and using the Arial font)
string 2
string 3
编辑:(由abelenky提问)
守则:
private void PrintCoupon()
{
string text = "Coupon\n";
foreach (DataGridViewRow dgvRow in dataGridViewCarrinho.Rows)
{
foreach (DataGridViewCell dgvCell in dgvRow.Cells)
{
text += dgvCell.Value.ToString() + " ";
}
text += "\n";
}
MessageBox.Show(text);
// I should print the coupon here
}
那么我该如何使用C#?
感谢。
答案 0 :(得分:3)
要在纸张上打印字符串,您应首先使用C#中的GDI +在PrintDocument
上绘制它们
在项目的Winform
添加PrintDocument
工具中,双击它以访问它的PrintPage
事件处理程序,
假设您已经将s1
,s2
和s3
作为字符串变量,
在我们使用的PrintPage
事件处理程序中:
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
Font f1 = new Font("Arial", 24, FontStyle.Bold, GraphicsUnit.Pixel);
Font f2 = new Font("Arial", 12, FontStyle.Regular, GraphicsUnit.Pixel);
Font f3 = new Font("Arial", 12, FontStyle.Regular, GraphicsUnit.Pixel);
e.Graphics.DrawString(s1, f1, Brushes.Black, new Point(10, 10));
e.Graphics.DrawString(s2, f2, Brushes.Black, new Point(10, 40));
e.Graphics.DrawString(s3, f3, Brushes.Black, new Point(10, 60));
}
以及每当您想要打印文档时:
printDocument1.Print();
您还可以考虑使用PrintPreviewDialog
查看打印文档之前发生了什么
答案 1 :(得分:1)
试试这个..
using System.Drawing;
private void printButton_Click(object sender, EventArgs e)
{
PrintDocument pd = new PrintDocument();
pd.PrintPage += new PrintPageEventHandler
(this.pd_PrintPage);
pd.Print();
}
// The PrintPage event is raised for each page to be printed.
void pd_PrintPage(Object* /*sender*/, PrintPageEventArgs* ev)
{
Font myFont = new Font( "m_svoboda", 14, FontStyle.Underline, GraphicsUnit.Point );
float lineHeight = myFont.GetHeight( e.Graphics ) + 4;
float yLineTop = e.MarginBounds.Top;
string text = "Coupon\n";
foreach (DataGridViewRow dgvRow in dataGridViewCarrinho.Rows)
{
foreach (DataGridViewCell dgvCell in dgvRow.Cells)
{
text += dgvCell.Value.ToString() + " ";
}
text += "\n";
}
//MessageBox.Show(text);
// I should print the coupon here
e.Graphics.DrawString( text, myFont, Brushes.Black,
new PointF( e.MarginBounds.Left, yLineTop ) );
yLineTop += lineHeight;
}