【问题标题】:print preprinted invoice, field in position x,y c# from a file format从文件格式打印预打印发票,位置 x,y c# 中的字段
【发布时间】:2013-07-31 16:25:58
【问题描述】:

对不起,我的英语

好吧,我在一个程序中看到,当它需要打印一些东西时,第一件事是读取一个文件,其中包含将在矩阵打印机中打印的字段的行和列(点打印机,我找不到正确的词)

我的想法是在文件中写入我需要像这样打印的字段的位置

(x,y) 字段1, (x,y) 字段2, (x,y) 字段3,

这样打印每个字段,所以我的程序需要读取文件进行打印, 如果我需要打印的预印本文档发生变化,这种方式允许我更改格式中字段的位置

我想这样做是因为我有很多不同的预印发票,我需要调整打印机方式

我阅读了有关 PrintDocument 的信息,但没有找到很好的解释 我读了this,但这是一个非常简单的例子

希望有人能指引我正确的方向

【问题讨论】:

    标签: c# winforms printers invoices


    【解决方案1】:

    我认为打印机的类型并不重要(矩阵、喷墨和激光)。这是一个更完整的代码示例。

    http://msdn.microsoft.com/en-us/library/system.drawing.printing.printdocument.printpage.aspx

    对于您的具体情况,您需要从发票格式文件中为每个字段解析 x,y 位置信息。获得 x 和 y 后,只需将其绘制到 PrintPage 事件参数 Graphics 对象,就像在示例代码中一样。

    棘手的部分是解析格式文件以获取正确的 x 和 y 位置数据。您可以使用非常简单的格式让事情变得更轻松。例如,您可以按如下方式格式化文件。

        x
        y
        [field1]
        x
        y
        [field2]
        ...
    

    假设您想打印一个如下所示的简单页面。

        07-31-2013         Invoice             Page 1
    
        Item               Quantity            Price
        --------           --------            --------
        Sprocket           1                   $100.00
        Cog                2                   $ 25.00
    
        Total: $150.00
    

    您的实际格式化发票文件将是...

        1
        1
        07-31-2013
        1
        20
        Invoice
        1
        40
        Page 1
        3
        1
        Item
        3
        20
        Quantity
        3
        40
        Price
        4
        1
        --------
        4
        20
        --------
        4
        40
        --------
        5
        1
        Sprocket
        5
        20
        1
        5
        40
        $100.00
        6
        1
        Cog
        6
        20
        2
        6
        40
        $ 25.00
        8
        1
        Total: $150.00
    

    您的打印代码将是这样的。

    // The PrintPage event is raised for each page to be printed. 
    private void pd_PrintPage(object sender, PrintPageEventArgs ev)
    {
        int row = 0;
        int col = 0;
        float xPos = 0;
        float yPos = 0;
        float leftMargin = ev.MarginBounds.Left;
        float topMargin = ev.MarginBounds.Top;
        string line = null;
    
        // Print each line of the file. 
        while (true)
        {
            try
            {
                row = Convert.ToInt32(streamToPrint.ReadLine());
                col = Convert.ToInt32(streamToPrint.ReadLine());
                line = streamToPrint.ReadLine();
            }
            catch
            {
                break;
            }
    
            xPos = leftMargin + (col * ev.Graphics.MeasureString(" ", printFont, ev.PageBounds.Width));
            yPos = topMargin + (row * printFont.GetHeight(ev.Graphics));
    
            ev.Graphics.DrawString(line, printFont, Brushes.Black, xPos, yPos, new StringFormat());
        }
    }
    

    【讨论】:

    • 是的,我需要这样的东西,现在我必须实现我的想法,谢谢,你知道我如何打印一条不同大小和类型的字母
    • 在上面的例子中,printFont 决定了打印文本的字体系列和大小。您可以设置如下printFont = new Font("Arial", 10);。查看此链接了解更多信息 - msdn.microsoft.com/en-us/library/system.drawing.font.aspx
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-13
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    相关资源
    最近更新 更多