从文件格式打印预打印发票,位置x,y c#的字段

本文关键字:位置 字段 格式 文件 式打印 打印 | 更新日期: 2023-09-27 18:25:37

对不起,我的英语

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

我的想法是在一个文件中写下我需要打印的字段的位置,就像这个

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

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

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

我读过关于PrintDocument的文章,但没有找到很好的解释我读过这篇文章,但这是一个非常简单的例子

我希望有人能指引我朝着正确的方向前进

我认为打印机的类型无关紧要(矩阵与喷墨与激光)。下面是一个更完整的代码示例。

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());
    }
}

从文件格式打印预打印发票,位置x,y c#的字段