我认为打印机的类型并不重要(矩阵、喷墨和激光)。这是一个更完整的代码示例。
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());
}
}