从文件格式打印预打印发票,位置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());
}
}