0

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

谢谢。

4

2 回答 2

3

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

在项目的Winform添加PrintDocument工具中,双击它以访问它的PrintPage事件处理程序,假设您已经拥有s1s2并且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在打印文档之前使用 a 来查看发生了什么

于 2013-05-12T00:32:03.423 回答
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;

}
于 2013-05-12T01:41:39.480 回答