如何使用打印机打印字符串?

时间:2013-05-12 00:15:42

标签: c# .net string printing gdi+

我正在编写一个需要打印一些来自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#?

感谢。

2 个答案:

答案 0 :(得分:3)

要在纸张上打印字符串,您应首先使用C#中的GDI +在PrintDocument上绘制它们

在项目的Winform添加PrintDocument工具中,双击它以访问它的PrintPage事件处理程序, 假设您已经将s1s2s3作为字符串变量, 在我们使用的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;

}