C# 打印问题 请教大家

来源:百度知道 编辑:UC知道 时间:2024/06/07 06:57:15
下面两个问题,能答出一个就可以了
第一:我用C#直接操作LPT1端口打印,
如这下面代码,我如何确定打印的坐标?因为我用来在POS软件上打小票
IntPtr iHandle = CreateFile(prnPort, 0x40000000, 0, 0, OPEN_EXISTING, 0, 0);
if (iHandle.ToInt32() == -1)
{
return "没有连接打印机或者打印机端口不是LPT1";
}
else
{
FileStream fs = new FileStream(iHandle, FileAccess.ReadWrite);
StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default);
sw.WriteLine(str);
sw.Close();
fs.Close();
return "";
}

第二个问题:用printDocument控件打印,现在就在用,但是太浪费纸,几行字,打在中间,前面一大截,后面一大截,能否解决?因为打印的内容长度不确定,有些人东西多,内容就长,东西少内容就短,如何用printDocument控制?

可以先将文件输入到一个richtextbox中,然后读取该字符的位置并换算成其在打印中位置
有个实例代码可参考下:
private void PrintDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
//用来存放要打印的字符
string mychar;
Font printFont ;
//用来设置打印要用的刷子对象
SolidBrush br;
//用来读取打印的位置
Point Pos=new Point(0,0);
//打印文件中每一个字符
while( Pos.Y < e.MarginBounds.Bottom)
{
if( CharNumber >= RichTextBox1.TextLength)
{
//如果字符数超过了文本框中字符数退出循环
break;
}
//在CharNumber后面选择一个字符
RichTextBox1.Select(CharNumber, 1);
//读取该字符
mychar = RichTextBox1.SelectedText;
//读取该字符的字体
printFont = RichTextBox1.SelectionFont;
//读取该字符的位置并换算成其在打印中位置
Pos = RichTextBox1.GetPositionFromCharIndex(CharNumber + 1);
Pos = new Point(Pos.X, Pos.Y - PageNumber * (e.MarginBounds.Bottom - e.MarginBounds.Top));
Pos = new Point(Pos.X + e.Ma