我把一个文件的内容读出来,用相应的参数进行替换。
然后把它送到LPT1口打印。
在C#里应该调用什么API呢,具体怎么写呢?
请大家多多指教,谢谢了!

解决方案 »

  1.   

    reference:
    http://www.codeproject.com/useritems/LPrintWriter.asp
      

  2.   

    C#打印功能
    最重要的一个组件叫 PrintDocument.第一步是生成一个实例。
    PrintDocument doc1 = new PrintDocument()第二步是设定好参数第三步就是调用
    doc1.print()然后这个print() 会产生新的printPageEvent
    第四步。
    制作printEvent的响应方法,就象用GDI绘图一样,绘出来的就是打印结果。和普通的绘图不同,这个绘图受到打印纸张的限制。
    PrintPageEventArgs.MarginBounds 和PageBounds..Net 还提供了一些对话框:
    PrintPreviewControl: 设定好Document 属性 等于doc1就行了
    PrintDialog: 接受printer setting
    PageSetupDialog: 接受页面设置
      

  3.   

    using System;
    using System.Drawing;
    using System.Collections;
    using System.ComponentModel;
    using System.Windows.Forms;
    using System.Data;namespace PrintText
    {
    /// <summary>
    /// Form1 的摘要说明。
    /// </summary>
    public class Form1 : System.Windows.Forms.Form
    {
    private System.Windows.Forms.Label label1;
    private System.Windows.Forms.RichTextBox richTextBox1;
    private System.Windows.Forms.Button button1;
    private System.Windows.Forms.Button button2;
    private System.Windows.Forms.OpenFileDialog openFileDialog1;
    private System.Drawing.Printing.PrintDocument printDocument1;
    //记录打印行数
    private int i=0;
    /// <summary>
    /// 必需的设计器变量。
    /// </summary>
    private System.ComponentModel.Container components = null; public Form1()
    {
    //
    // Windows 窗体设计器支持所必需的
    //
    InitializeComponent(); //
    // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
    //
    } /// <summary>
    /// 清理所有正在使用的资源。
    /// </summary>
    protected override void Dispose( bool disposing )
    {
    if( disposing )
    {
    if (components != null) 
    {
    components.Dispose();
    }
    }
    base.Dispose( disposing );
    } #region Windows 窗体设计器生成的代码
    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {
    this.label1 = new System.Windows.Forms.Label();
    this.richTextBox1 = new System.Windows.Forms.RichTextBox();
    this.button1 = new System.Windows.Forms.Button();
    this.button2 = new System.Windows.Forms.Button();
    this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
    this.printDocument1 = new System.Drawing.Printing.PrintDocument();
    this.SuspendLayout();
    // 
    // label1
    // 
    this.label1.Location = new System.Drawing.Point(8, 8);
    this.label1.Name = "label1";
    this.label1.Size = new System.Drawing.Size(304, 16);
    this.label1.TabIndex = 0;
    this.label1.Text = "文件内容:";
    // 
    // richTextBox1
    // 
    this.richTextBox1.Location = new System.Drawing.Point(8, 24);
    this.richTextBox1.Name = "richTextBox1";
    this.richTextBox1.Size = new System.Drawing.Size(312, 144);
    this.richTextBox1.TabIndex = 1;
    this.richTextBox1.Text = "";
    // 
    // button1
    // 
    this.button1.Location = new System.Drawing.Point(48, 176);
    this.button1.Name = "button1";
    this.button1.Size = new System.Drawing.Size(88, 23);
    this.button1.TabIndex = 2;
    this.button1.Text = "浏览文件";
    this.button1.Click += new System.EventHandler(this.button1_Click);
    // 
    // button2
    // 
    this.button2.Location = new System.Drawing.Point(184, 176);
    this.button2.Name = "button2";
    this.button2.Size = new System.Drawing.Size(88, 23);
    this.button2.TabIndex = 3;
    this.button2.Text = "打印文件";
    this.button2.Click += new System.EventHandler(this.button2_Click);
    // 
    // openFileDialog1
    // 
    this.openFileDialog1.Filter = "所有文本文件(*.txt)|*.txt|所有文件(*.*)|*.*";
    // 
    // printDocument1
    // 
    this.printDocument1.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.printDocument1_PrintPage);
    // 
    // Form1
    // 
    this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
    this.ClientSize = new System.Drawing.Size(328, 206);
    this.Controls.Add(this.button2);
    this.Controls.Add(this.button1);
    this.Controls.Add(this.richTextBox1);
    this.Controls.Add(this.label1);
    this.MaximizeBox = false;
    this.Name = "Form1";
    this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
    this.Text = "演示直接打印文件";
    this.ResumeLayout(false); }
    #endregion /// <summary>
    /// 应用程序的主入口点。
    /// </summary>
    [STAThread]
    static void Main() 
    {
    Application.Run(new Form1());
    } private void button1_Click(object sender, System.EventArgs e)
    {//浏览文件内容
    if(this.openFileDialog1.ShowDialog()==DialogResult.OK)
    {
    string MyFileName=this.openFileDialog1.FileName;
    string MyShortFileName=MyFileName.Substring(MyFileName.LastIndexOf("\\")+1);
    this.label1.Text=MyShortFileName+"的内容如下:";
    this.richTextBox1.LoadFile(MyFileName,RichTextBoxStreamType.PlainText);
    }
    } private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
    {//打印信息处理
    //获得绘制对象
    Graphics g=e.Graphics;
    //一页中的行数
    float LinePages = 0 ;
    //待绘文本的纵向坐标
    float YPos =  0 ;
    //行计数
    int count = 0 ;
    //左边界
    float LeftMargin = e.MarginBounds.Left;
    //顶边界
    float topMargin = e.MarginBounds.Top;
    //字符串流
    String line=null;
    //根据页面的高度和字体的高度计算
    //一页中可以打印的行数
    LinePages = e.MarginBounds.Height  / this.Font.GetHeight(g) ;   
    if(i>=this.richTextBox1.Lines.Length-1)
    {
    e.HasMorePages = false ;
    return;
    }
    //每次从文件中读取一行并打印
    while (count < LinePages && ((line=this.richTextBox1.Lines[i++]) != null)) 
    {
    //计算这一行的显示位置
    YPos = topMargin + (count * this.Font.GetHeight(g));
    //绘制文本
    g.DrawString (line, this.Font, Brushes.Black, LeftMargin, YPos, new StringFormat());
    //行数增加
    count++;
    if(i>this.richTextBox1.Lines.Length-1)
    break;
    }
    //如果有多行,则另外打印一页
    if (line != null)
    e.HasMorePages = true ;
    else
    e.HasMorePages = false ;
    } private void button2_Click(object sender, System.EventArgs e)
    {//打印文件
    if(this.richTextBox1.Text.Length<1)
    return;
    i=0;
    try 
    {
      this.printDocument1.Print();

    catch(Exception error) 
        {//打印出错处理
      MessageBox.Show("打印文件发生错误:   " + error.Message,"",MessageBoxButtons.OK,MessageBoxIcon.Information);
    }
    }
    }
    }
      

  4.   

    谢谢楼上的热心回复:)
    我想像VB这样实现:
    Open "lpt1" For Output As #1
    print #1
    这样就可以了,在C#中有没有类似的写法呢?
      

  5.   

    我打印的文件是包含图片信息的.Prn(打印文件),PrintDocument是打印文本文件的吧,那么打印图片文件应该对应的是哪个类呢?请大家指教!
      

  6.   

    PrintDocument 不只是打印文本,他有Graphics ,可以通过绘制Graphics 来打印图象