当前位置:编程学习 > C#/ASP.NET >>

网络打印

关于网络打印: 
1.如何列举局域网网络打印机共享名称? 
2.如何列举指定IP的电脑上的打印机的共享名称? 
3.如何直接向打印机发送控制符(如:ESC   $21   $12)? 
4.如何直接利用打印机内部字库打印,这样比图形打印要快? 
5.如何同时(给定时间内)向多台打印机发送打印内容? 

问题1,2的目的:让用户方便设定打印机; 
问题3,4的目的:用于连续不定长度页面的打印,如POS机打印; 
问题5的目的:用于多台打印机同时分别输出不同内容,用于餐饮系统厨房打印; 

问题1,2解决后,问题3,4就可以解决:
各位高手指点! --------------------编程问答-------------------- 枚举打印机
System.Management.ManagementClass mc =new ManagementClass("Win32_Printer")   
 System.Management.ManagementObjectCollection mocs = mc.GetInstances();  

[DllImport("shell32.dll", CharSet=CharSet.Auto)]   
  public static extern Int32 SHInvokePrinterCommand(   
  IntPtr hwnd, UInt32 uAction, [MarshalAs(UnmanagedType.LPWStr)]   
  String lpBuf1,   
  [MarshalAs(UnmanagedType.LPWStr)]   
  String lpBuf2,   
  Int32 fModal); 
http://topic.csdn.net/u/20100313/12/b7e2ceb5-08ab-4fa8-92b5-12b4cbde061f.html?70298 --------------------编程问答-------------------- 学习并帮顶 --------------------编程问答--------------------
引用楼主 guanshenglang 的回复:
关于网络打印: 
1.如何列举局域网网络打印机共享名称? 
2.如何列举指定IP的电脑上的打印机的共享名称? 
3.如何直接向打印机发送控制符(如:ESC   $21   $12)? 
4.如何直接利用打印机内部字库打印,这样比图形打印要快? 
5.如何同时(给定时间内)向多台打印机发送打印内容? 

问题1,2的目的:让用户方便设定打印机; 
问题3,4的目的:用于连续不定长度页……
楼主的思路不错,可以做。直接写代码就可以了。 --------------------编程问答--------------------
引用楼主 guanshenglang 的回复:
关于网络打印: 
1.如何列举局域网网络打印机共享名称? 
2.如何列举指定IP的电脑上的打印机的共享名称? 
3.如何直接向打印机发送控制符(如:ESC   $21   $12)? 
4.如何直接利用打印机内部字库打印,这样比图形打印要快? 
5.如何同时(给定时间内)向多台打印机发送打印内容? 

问题1,2的目的:让用户方便设定打印机; 
问题3,4的目的:用于连续不定长度页……


好问题!

参考资料:
如何列举指定IP的电脑上的打印机的共享名称?
Choosing a printer when printing from Crystal Reports in C#

如何列举局域网网络打印机共享名称? 
Set Default Printer based on the Network that the System Connected

--------------------编程问答-------------------- 2.如何列举指定IP的电脑上的打印机的共享名称?  
3.如何直接向打印机发送控制符(如:ESC $21 $12)?  
4.如何直接利用打印机内部字库打印,这样比图形打印要快?  
5.如何同时(给定时间内)向多台打印机发送打印内容?  
--------------------------------------------
对于第一条不建议采取枚举网络打印的方法,有不确定性,网络打印机一般有IP,监听的端口是9001,你可以开一个socket确定一个IP段来逐个测试,如果能连上的应该就是网络打印机。
2.使用任意一家打印机厂家的支持POS/ESC支持的二次开发包,比如我用的北洋的,支持网口POS指令,
并且能实时获取打印机状态。
3.同第2条
4.同第2条
5.同第2条,使用多线程
总体上来说我的应该是个很烂的建议,但是使用ESC指令的话,这应该是个稍微可行的办法了。

http://blog.csdn.net/afeng124/archive/2010/05/20/5610614.aspx
C#版OPOS打印(基于北洋OPOS SDK二次开发包,支持EPSON和北洋、佳博、商祺等支持标准ESC/POS指令的POS打印机)  --------------------编程问答-------------------- 给你一些代码吧。 --------------------编程问答--------------------
        private bool printReport()
        {

            DataView dv;
            string strRepVer = "A";
            string strShowBOM = "Y";
            string strShowBOMColor = "Y";
            string strShowBOMSize = "Y";
            string strShowAssortColors = "N";
            string strShowColorRatio = "Y";
            string strShowSizeRatio = "Y";
            string strShowOrderMat = "N";
            string strReceycleTypeCode1 = "R01";
            string strReceycleTypeCode2 = "R02";

            string strPrintLable1 = "FALSE";
            string strPrintLable2 = "FALSE";
            string strPrintPackge = "FALSE";


            dv = GetReportHd(Convert.ToInt32(cmbReportName.SelectedValue.ToString()));
            strRepVer = dv[0]["Version"].ToString();


            string strReportName = dv[0]["RepPath"].ToString() + dv[0]["RepID"].ToString();

            //strReportName = @"F:\Documents and Settings\chenzd\桌面\WGERP004APP.rpt";

            rptDOC = new ReportDocument();


            try
            {
                rptDOC.Load(strReportName);
                ConnectionInfo connectionInfo = new ConnectionInfo();

                connectionInfo.ServerName = _db.Server;
                connectionInfo.DatabaseName = _db.DatabaseName;
                connectionInfo.UserID = _db.UserID;
                connectionInfo.Password = _db.Password;

                SetDBLogonForReport(connectionInfo, rptDOC);

                SetDBLogonForSubreports(connectionInfo, rptDOC);

                string strSONo = "";
                string strShowPic = "N";

                strSONo = txtSO.Text.Trim().ToString();

                if (cbShowPic.Checked)
                {
                    strShowPic = "Y";
                }
                else
                {
                    strShowPic = "N";

                }

                if (cbShowBOM.Checked)
                {
                    strShowBOM = "Y";
                }
                else
                {
                    strShowBOM = "N";
                }
                if (cbShowBS.Checked)
                {
                    strShowBOMSize = "Y";
                }
                else
                {
                    strShowBOMSize = "N";
                }
                if (cbShowBC.Checked)
                {
                    strShowBOMColor = "Y";
                }
                else
                {
                    strShowBOMColor = "N";
                }

                if (cbShowAssortColor.Checked)
                {
                    strShowAssortColors = "Y";
                }
                else
                    strShowAssortColors = "N";

                if (chkShowColorRatio.Checked)
                {
                    strShowColorRatio = "Y";
                }
                else
                    strShowColorRatio = "N";

                if (chkShowSizeRatio.Checked)
                {
                    strShowSizeRatio = "Y";
                }
                else
                    strShowSizeRatio = "N";

                if (chkShowOrderMat.Checked)
                {
                    strShowOrderMat = "TRUE";
                }
                else
                    strShowOrderMat = "FALSE";


                if (chkPrintLable1.Checked)
                {
                    strPrintLable1 = "TRUE";

                }
                else
                {
                    strPrintLable1 = "FALSE";
                }
                if (chkPrintLable2.Checked)
                {
                    strPrintLable2 = "TRUE";
                }
                else
                    strPrintLable2 = "FALSE";

                if (chkPrintPackage.Checked)
                {
                    strPrintPackge = "TRUE";
                }
                else
                    strPrintPackge = "FALSE";

                SetReportParameter(rptDOC, "@strOrderNo", strSONo);

                SetReportParameter(rptDOC, "@strShowBOM", strShowBOM);

                SetReportParameter(rptDOC, "@strShowBOMColor", strShowBOMColor);

                SetReportParameter(rptDOC, "@strShowBOMSize", strShowBOMSize);

                SetReportParameter(rptDOC, "@strShowAssortColorInfo", strShowAssortColors);

                SetReportParameter(rptDOC, "@blnShowOrderMat", strShowOrderMat);


                // modified by Mickey in 20100511
                SetReportParameter(rptDOC, "WGERP004AP_SizeColor_Sub.rpt", "@strOrder", strSONo);
                SetReportParameter(rptDOC, "WGERP004AP_SizeColor_Sub.rpt", "@Type", "1");
                SetReportParameter(rptDOC, "WGERP004AP_SizeColor_Sub.rpt", "@ShowColorRatio", strShowColorRatio);
                SetReportParameter(rptDOC, "WGERP004AP_SizeColor_Sub.rpt", "@ShowSizeRatio", strShowSizeRatio);

                // modified by Mickey in 20100511
                SetReportParameter(rptDOC, "WGERP004AP_SizeColor_Sub.rpt - 01", "@strOrder", strSONo);
                SetReportParameter(rptDOC, "WGERP004AP_SizeColor_Sub.rpt - 01", "@Type", "2");
                SetReportParameter(rptDOC, "WGERP004AP_SizeColor_Sub.rpt - 01", "@ShowColorRatio", strShowColorRatio);
                SetReportParameter(rptDOC, "WGERP004AP_SizeColor_Sub.rpt - 01", "@ShowSizeRatio", strShowSizeRatio);


                SetReportParameter(rptDOC, "ORDERBOMCOLORS", "@strFrSO", strSONo);

                SetReportParameter(rptDOC, "ORDERBOMCOLORS", "@strSO", strSONo);

                SetReportParameter(rptDOC, "ORDERMATS", "@strOrderNo", strSONo);
                SetReportParameter(rptDOC, "ORDERMATS", "@strOrderNo", strSONo);

                SetReportParameter(rptDOC, "ORDERMATS", "@strMatType", "C01");

                SetReportParameter(rptDOC, "PACKINGMATS", "@strOrderNo", strSONo);
                SetReportParameter(rptDOC, "PACKINGMATS", "@strMatType", "C03");

                SetReportParameter(rptDOC, "ORDBOMSIZE", "@strSO", strSONo);

                SetReportParameter(rptDOC, "ORDBOMSIZE", "@strSO", strSONo);
                SetReportParameter(rptDOC, "ORDBOMSIZE", "@strFrSO", strSONo);

                SetReportParameter(rptDOC, "@PrintLabel1", strPrintLable1);

                SetReportParameter(rptDOC, "@PrintLabel2", strPrintLable2);

                SetReportParameter(rptDOC, "@PrintPackage1", strPrintPackge);

                SetReportParameter(rptDOC, "@PrintPackage2", strPrintPackge);



                SetReportParameter(rptDOC, "BOM", "@strOrderNo", strSONo);

                if (Convert.ToInt32(cmbReportName.SelectedValue.ToString()) == 35)
                {
                    string strBomversion = this.cboBomVersion.SelectedValue.ToString();
                    SetReportParameter(rptDOC, "BOM", "@strBomversion", strBomversion);
                    SetReportParameter(rptDOC, "BOMC2", "@strBomversion", strBomversion);

                }
                SetReportParameter(rptDOC, "BOMC2", "@strOrderNo", strSONo);
                SetReportParameter(rptDOC, "BOMC3", "@strOrderNo", strSONo);

                SetReportParameter(rptDOC, "COLORASSORT", "@strOrderNo", strSONo);

                //ORDERMATS

                SetReportParameter(rptDOC, "Receycle1", "@OrderNo", strSONo);
                SetReportParameter(rptDOC, "Receycle2", "@OrderNo", strSONo);


                SetReportParameter(rptDOC, "Receycle1", "@ReceycleTypeCode", strReceycleTypeCode1);
                SetReportParameter(rptDOC, "Receycle2", "@ReceycleTypeCode", strReceycleTypeCode2);


                //sample color size 

                SetReportParameter(rptDOC, "SAMPLECOLORSIZE", "@strOrder", strSONo);



            }
            catch
            {
                _db.Disconnect();
                throw;

            }
            finally
            {
                _db.Disconnect();
            }

            return true;

        }


        private void SetDBLogonForReport(ConnectionInfo connectionInfo, ReportDocument reportDocument)
        {
            Tables tables = reportDocument.Database.Tables;
            foreach (CrystalDecisions.CrystalReports.Engine.Table table in tables)
            {
                TableLogOnInfo tableLogonInfo = table.LogOnInfo;
                tableLogonInfo.ConnectionInfo = connectionInfo;
                table.ApplyLogOnInfo(tableLogonInfo);

            }

        }

        private void SetDBLogonForSubreports(ConnectionInfo connectionInfo, ReportDocument reportDocument)
        {
            Sections sections = reportDocument.ReportDefinition.Sections;
            foreach (Section section in sections)
            {
                ReportObjects reportObjects = section.ReportObjects;
                foreach (ReportObject reportObject in reportObjects)
                {
                    if (reportObject.Kind == ReportObjectKind.SubreportObject)
                    {
                        SubreportObject subreportObject = (SubreportObject)reportObject;
                        ReportDocument subReportDocument = subreportObject.OpenSubreport(subreportObject.SubreportName);
                        SetDBLogonForReport(connectionInfo, subReportDocument);

                    }
                }

            }

        }
--------------------编程问答-------------------- private void SetReportParameter(ReportDocument rptDoc, string strPara, string strParaValue)
        {
            ParameterValues currentParameterValues = new ParameterValues();
            ParameterDiscreteValue parameterDiscreteValue = new ParameterDiscreteValue();
            parameterDiscreteValue.Value = strParaValue.ToString();
            currentParameterValues.Add(parameterDiscreteValue);


            ParameterFieldDefinitions parameterFieldDefinitions = rptDoc.DataDefinition.ParameterFields;
            ParameterFieldDefinition parameterFieldDefinition = parameterFieldDefinitions[strPara];
            parameterFieldDefinition.ApplyCurrentValues(currentParameterValues);


        }

        private void SetReportParameter(ReportDocument rptDoc, string strSubRepName, string strPara, string strParaValue)
        {

            ParameterValues currentParameterValues = new ParameterValues();
            ParameterDiscreteValue parameterDiscreteValue = new ParameterDiscreteValue();
            parameterDiscreteValue.Value = strParaValue.ToString();
            currentParameterValues.Add(parameterDiscreteValue);

            ParameterFieldDefinitions parameterFieldDefinitions = rptDoc.DataDefinition.ParameterFields;
            ParameterFieldDefinition parameterFieldDefinition = parameterFieldDefinitions[strPara, strSubRepName];
            parameterFieldDefinition.ApplyCurrentValues(currentParameterValues);

        }
        private ArrayList GetDefaultValuesFromParameterField(ReportDocument reportDocument, string strParameterName)
        {
            ParameterFieldDefinitions parameterFieldDefinitions = reportDocument.DataDefinition.ParameterFields;
            ParameterFieldDefinition parameterFieldDefinition = parameterFieldDefinitions[strParameterName];
            ParameterValues defaultParameterValues = parameterFieldDefinition.DefaultValues;
            ArrayList arrayList = new ArrayList();

            foreach (ParameterValue parameterValue in defaultParameterValues)
            {
                if (!parameterValue.IsRange)
                {
                    ParameterDiscreteValue parameterDiscreteValue = (ParameterDiscreteValue)parameterValue;
                    arrayList.Add(parameterDiscreteValue.Value.ToString());
                }

            }
            return arrayList;
        }

        private void SetDateRangeForOrders(ReportDocument reportDocument, string startValue, string endValue, string strPara)
        {
            ParameterRangeValue parameterRangeValue = new ParameterRangeValue();
            parameterRangeValue.StartValue = startValue;
            parameterRangeValue.EndValue = endValue;

            parameterRangeValue.LowerBoundType = RangeBoundType.BoundInclusive;
            parameterRangeValue.UpperBoundType = RangeBoundType.BoundInclusive;
            ParameterFieldDefinitions parameterFieldDefinitions = reportDocument.DataDefinition.ParameterFields;
            ParameterFieldDefinition parameterFieldDefinition = parameterFieldDefinitions[strPara];
            parameterFieldDefinition.CurrentValues.Clear();
            parameterFieldDefinition.CurrentValues.Add(parameterRangeValue);
            parameterFieldDefinition.ApplyCurrentValues(parameterFieldDefinition.CurrentValues);
        }


        private void SetCurrentValuesForParameterField(ReportDocument reportDocument, ArrayList arrayList, string strParameterName)
        {
            ParameterValues currentParameterValues = new ParameterValues();
            foreach (object submittedValue in arrayList)
            {
                ParameterDiscreteValue parameterDiscreteValue = new ParameterDiscreteValue();
                parameterDiscreteValue.Value = submittedValue.ToString();
                currentParameterValues.Add(parameterDiscreteValue);

            }
            ParameterFieldDefinitions parameterFieldDefinitions = reportDocument.DataDefinition.ParameterFields;
            ParameterFieldDefinition parameterFieldDefinition = parameterFieldDefinitions[strParameterName];
            parameterFieldDefinition.ApplyCurrentValues(currentParameterValues);
        }

        private void frmRptCenter_Load(object sender, EventArgs e)
        {
            blnInitiateData();

            setTabIndexes();
        }

        private DataView GetReportHd()
        {
            DataTable dt = null;

            if (_db == null)
            {
                _db = new Framework.Win.Library.Database(SystemCode, FuncCode, _connName);

            }
            string strAccessColGroup = GlobalService.LoginSession.GetAuthority(SystemCode, FuncCode, "ARG");

            try
            {
                _db.Connect();
                IDbCommand cmd = _db.GetCommand("usp_GetReportHd");
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add(_db.GetParameter("@strrepGroup", "ORDER"));
                //cmd.Parameters.Add(_db.GetParameter("@RoleGroup", strAccessColGroup));

                dt = _db.ExecuteQuery(cmd).Tables[0];
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                _db.Disconnect();
            }

            return dt.DefaultView;

        }
        private DataView GetReportHd(Int32 intRptID)
        {
            DataTable dt = null;

            if (_db == null)
            {
                _db = new Framework.Win.Library.Database(SystemCode, FuncCode, _connName);

            }
            try
            {
                _db.Connect();
                IDbCommand cmd = _db.GetCommand("usp_GetReportHdByRptID");
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add(_db.GetParameter("@intRptID", intRptID));

                dt = _db.ExecuteQuery(cmd).Tables[0];
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                _db.Disconnect();
            }
            return dt.DefaultView;

        }

        private void setTabIndexes()
        {

            cmbReportName.TabIndex = 1;

        }

        private void cmbReportName_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cmbReportName.SelectedIndex != -1)
            {
                if (cmbReportName.SelectedValue.ToString() == "35")
                {
                    this.cboBomVersion.Visible = true;
                    this.cLabel1.Visible = true;
                }
                else
                {
                    this.cboBomVersion.Visible = false;
                    this.cLabel1.Visible = false;

                }
            }
            else
            {
                this.cboBomVersion.Visible = false;
            }
        }

        private void frmRptCenter_Activated(object sender, EventArgs e)
        {
            SetButtonMode(this.FormMode);
        }


        private void txtSO_DoubleClick(object sender, EventArgs e)
        {
            string strEA = GlobalService.ControlHandler.GetEntryAssistID(txtSO.ControlID);
            EntryAssist ea = new EntryAssist(GlobalService.Instance().CompanyCode, strEA);
            ea.FilterColumn = "Canceled";
            ea.FilterValue = "N";
            ea.SearchValue = txtSO.Text.Trim();
            ea.ShowDialog();
            if (!(ea.SearchValue == null))
            {
                txtSO.Text = ea.SearchValue;
            }
        }

        private void tpView_Click(object sender, EventArgs e)
        {
        }

        private void tc1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (tc1.SelectedIndex == 1)
            {
                if (txtSO.Text == "" || txtSO.Text == null)
                {
                    return;
                }
                else
                {
                    this.Cursor = Cursors.Arrow;
                    tc1.Enabled = false;
                    if (rptDOC.IsLoaded) rptDOC.Close();
                    this.crvReportViewer.Refresh();
                    printReport();
                    this.crvReportViewer.ReportSource = rptDOC;


                    this.Cursor = Cursors.Arrow;
                    tc1.Enabled = true;
                }
            }
            if (tc1.SelectedTab.Name == "tpPacking")
            {
                if (txtSO.Text != "")
                {
                    if (_loadPackingFile(_OrderID))
                    {

                        this.cWebBrowser_Packing.Navigate(_PackingFile, false);

                    }
                }

            }
        } --------------------编程问答-------------------- 帮你定一下,哑巴的可以了 --------------------编程问答--------------------      private bool _loadPackingFile(string strOrderID)
        {
            bool blngetFile = true;

            string proc = "SELECT OrderID,PackingAttached, FileType,PackingFileName FROM dbo.T_OrderAttached WHERE OrderID= " + strOrderID;

            System.Data.DataTable dt = new System.Data.DataTable();
            byte[] mydata;
            System.IO.MemoryStream myStream;

            _db.Connect();

            try
            {
                IDbCommand scm = _db.GetCommand(proc);
                scm.CommandType = CommandType.Text;

                dt = _db.ExecuteQuery(scm).Tables[0];

                _db.Disconnect();

                if (dt.Rows.Count > 0)
                {
                    if (dt.Rows[0]["PackingAttached"].ToString().Trim() != "")
                    {
                        mydata = (byte[])(dt.Rows[0]["PackingAttached"]);
                        myStream = new System.IO.MemoryStream();

                        if (mydata.Length > 0)
                        {
                            foreach (byte a in mydata)
                            {
                                myStream.WriteByte(a);
                            }
                            System.IO.FileInfo fi;

                            string strVoucherFileName = dt.Rows[0]["PackingFileName"].ToString();

                            _PackingFile = "C:\\Documents and Settings\\All Users\\Templates\\" + strVoucherFileName;

                            if (System.IO.File.Exists(_PackingFile))
                            {
                                System.IO.File.Delete(_PackingFile);
                            }

                            fi = new System.IO.FileInfo(_PackingFile);

                            System.IO.FileStream fs;


                            fs = fi.OpenWrite();
                            fs.Write(mydata, 0, mydata.Length);
                            fs.Close();
                        }
                    }
                    else
                    {
                        blngetFile = false;
                    }
                }
                else
                {
                    blngetFile = false;
                }
            }
            catch
            {
                blngetFile = false;
            }

            return blngetFile;

        }

        private void frmRptCenter_FormClosing(object sender, FormClosingEventArgs e)
        {

            rptDOC.Dispose();
        }

        private void txtSO_Validating(object sender, CancelEventArgs e)
        {

            if (txtSO.Text != "")
            {
                string strOrderNO = txtSO.Text.ToString().Trim();

                //clsOrders.get
                cboBomVersion.DisplayMember = "Version";
                cboBomVersion.ValueMember = "Version";
                cboBomVersion.DataSource = clsOrders.GetOrderBomVersion(txtSO.Text.Trim().ToString(), _db);


                WGS.Warehouses.Orders ords = Systems.GetOrders(_db, strOrderNO);

                if (ords.OrderID == 0)
                {
                    string[] err = new string[1];
                    err[0] = strOrderNO;
                    MessageHandler.ShowDialog("ERP0001", err);
                    e.Cancel = true;
                }
                else
                {

                    txtSO.Text = ords.OrderNO.ToString();
                    _OrderID = ords.OrderID.ToString();
                }

            }
        }

    }

}
稍稍改动一点就可以了 --------------------编程问答-------------------- 打印全部的代码自己好好修改一下 --------------------编程问答--------------------

using System ;
using System.Drawing ;
using System.Collections ;
using System.ComponentModel ;
using System.Windows.Forms ;
using System.Data ;
using System.IO ;
using System.Drawing.Printing ; 
public class Form1 : Form
{ private RichTextBox richTextBox1 ;
private Button button1 ;
private Button button2 ;
private Button button3 ;
private Button button4 ;
private Button button5 ;
private OpenFileDialog openFileDialog1 ;
private SaveFileDialog saveFileDialog1 ;
private PrintDialog printDialog1 ;
private PrintDocument ThePrintDocument ;
private PrintPreviewDialog printPreviewDialog1 ;
private StringReader myReader ;
private System.ComponentModel.Container components = null ;
public Form1 ( )
{ //初始化窗体中的各个组件
InitializeComponent ( ) ;
} //清除程序中使用多的资源
protected override void Dispose ( bool disposing )
{ if ( disposing )
{ if ( components != null ) 
{ components.Dispose ( ) ;
} }
base.Dispose ( disposing ) ;
} private void InitializeComponent ( )
{ richTextBox1 = new RichTextBox ( ) ;
button1 = new Button ( ) ;
button2 = new Button ( ) ;
button3 = new Button ( ) ;
button4 = new Button ( ) ;
button5 = new Button ( ) ;
saveFileDialog1 = new SaveFileDialog ( ) ;
openFileDialog1 = new OpenFileDialog ( ) ;
printPreviewDialog1 = new PrintPreviewDialog ( ) ;
printDialog1 = new PrintDialog ( ) ;
ThePrintDocument = new PrintDocument ( ) ;
ThePrintDocument.PrintPage += new PrintPageEventHandler ( ThePrintDocument_PrintPage ) ;
SuspendLayout ( ) ;
richTextBox1.Anchor = AnchorStyles.None ;
richTextBox1.Name = "richTextBox1" ;
richTextBox1.Size = new Size ( 448 , 280 ) ;
richTextBox1.TabIndex = 0 ;
richTextBox1.Text = "" ;
button1.Anchor = AnchorStyles.None ;
button1.Location = new Point ( 41 , 289 ) ;
button1.Name = "button1" ;
button1.Size = new Size ( 48 , 30 ) ;
button1.TabIndex = 1 ;
button1.Text = "打开" ;
button1.Click += new System.EventHandler ( button1_Click ) ;
button2.Anchor = AnchorStyles.None ;
button2.Location = new Point ( 274 , 288 ) ;
button2.Name = "button2" ;
button2.Size = new Size ( 48 , 30 ) ;
button2.TabIndex = 4 ;
button2.Text = "预览" ;
button2.Click += new System.EventHandler ( button2_Click ) ;
button3.Anchor = AnchorStyles.None ;
button3.Location = new Point ( 108 , 288 ) ;
button3.Name = "button3" ;
button3.Size = new Size ( 48 , 30 ) ;
button3.TabIndex = 2 ;
button3.Text = "保存" ;
button3.Click += new System.EventHandler ( button3_Click ) ;
button4.Anchor = AnchorStyles.None ;
button4.Location = new Point ( 174 , 288 ) ;
button4.Name = "button4" ;
button4.Size = new Size ( 80 , 30 ) ;
button4.TabIndex = 3 ;
button4.Text = "打印机设置" ;
button4.Click += new System.EventHandler ( button4_Click ) ;
button5.Anchor = AnchorStyles.None ;
button5.Location = new Point ( 345 , 288 ) ;
button5.Name = "button5" ;
button5.Size = new Size ( 48 , 30 ) ;
button5.TabIndex = 5 ;
button5.Text = "打印" ;
button5.Click += new System.EventHandler ( button5_Click ) ;
saveFileDialog1.DefaultExt = "*.txt" ;
saveFileDialog1.FileName = "file.txt" ;
saveFileDialog1.InitialDirectory = "c:\\" ;
saveFileDialog1.Title = "另存为!" ;
openFileDialog1.DefaultExt = "*.txt" ;
openFileDialog1.FileName = "file.txt" ;
openFileDialog1.InitialDirectory = "c:\\" ;
openFileDialog1.Title = "打开文本文件!" ;
AutoScaleBaseSize = new Size ( 6 , 14 ) ;
ClientSize = new Size ( 448 , 325 ) ;
this.Controls.Add ( button1 ) ;
this.Controls.Add ( button2 ) ;
this.Controls.Add ( button3 ) ;
this.Controls.Add ( button4 ) ;
this.Controls.Add ( button5 ) ;
this.Controls.Add ( richTextBox1 ) ;
this.MaximizeBox = false ;
this.Name = "Form1" ;
this.Text = "C#来操作文本文件" ;
this.ResumeLayout ( false ) ;
} static void Main ( ) 
{ Application.Run ( new Form1 ( ) ) ;

private void button1_Click ( object sender , System.EventArgs e )
{ try
{ if ( openFileDialog1.ShowDialog ( ) == DialogResult.OK )
{ FileStream fs = new FileStream ( openFileDialog1.FileName , FileMode.Open , FileAccess.Read ) ;
StreamReader m_streamReader = new StreamReader ( fs ) ; 
//使用StreamReader类来读取文件
m_streamReader.BaseStream.Seek ( 0 , SeekOrigin.Begin ) ;
// 从数据流中读取每一行,直到文件的最后一行,并在richTextBox1中显示出内容
this.richTextBox1.Text = "" ;
string strLine = m_streamReader.ReadLine ( ) ;
while ( strLine != null )
{ this.richTextBox1.Text += strLine + "\n" ;
strLine = m_streamReader.ReadLine ( ) ;
} //关闭此StreamReader对象
m_streamReader.Close ( ) ;

} catch ( Exception em )
{ Console.WriteLine ( em.Message.ToString ( ) ) ;


private void button3_Click ( object sender , System.EventArgs e )
{ try
{ //获得另存为的文件名称
if ( saveFileDialog1.ShowDialog ( ) == DialogResult.OK )

//创建一个文件流,用以写入或者创建一个StreamWriter
FileStream fs = new FileStream ( @saveFileDialog1.FileName , FileMode.OpenOrCreate , FileAccess.Write ) ;
StreamWriter m_streamWriter = new StreamWriter ( fs ) ;
m_streamWriter.Flush ( ) ;
// 使用StreamWriter来往文件中写入内容
m_streamWriter.BaseStream.Seek ( 0 , SeekOrigin.Begin ) ;
// 把richTextBox1中的内容写入文件
m_streamWriter.Write ( richTextBox1.Text ) ;
//关闭此文件
m_streamWriter.Flush ( ) ;
m_streamWriter.Close ( ) ;
} }
catch ( Exception em )
{ Console.WriteLine ( em.Message.ToString ( ) ) ;
} }
private void button4_Click ( object sender , System.EventArgs e )
{ printDialog1.Document = ThePrintDocument ;
printDialog1.ShowDialog ( ) ;
} //预览打印文档
private void button2_Click ( object sender , System.EventArgs e )
{ try
{ string strText = richTextBox1.Text ;
myReader = new StringReader ( strText ) ;
PrintPreviewDialog printPreviewDialog1 = new PrintPreviewDialog ( ) ;
printPreviewDialog1.Document = ThePrintDocument ;
printPreviewDialog1.FormBorderStyle = FormBorderStyle.Fixed3D ;
printPreviewDialog1.ShowDialog ( ) ;
} catch ( Exception exp )
{ Console.WriteLine ( exp.Message.ToString ( ) ) ;
} }
//打印richTextBox1中的内容
private void button5_Click ( object sender , System.EventArgs e )
{ printDialog1.Document = ThePrintDocument ;
string strText = richTextBox1.Text ;
myReader = new StringReader ( strText ) ;
if ( printDialog1.ShowDialog ( ) == DialogResult.OK )
{ ThePrintDocument.Print ( ) ;
} }
protected void ThePrintDocument_PrintPage ( object sender , PrintPageEventArgs ev )
{ float linesPerPage = 0 ;
float yPosition = 0 ;
int count = 0 ;
float leftMargin = ev.MarginBounds.Left ;
float topMargin = ev.MarginBounds.Top ;
string line = null ;
Font printFont = richTextBox1.Font ;
SolidBrush myBrush = new SolidBrush ( Color.Black ) ;
//计算每一页打印多少行 
linesPerPage = ev.MarginBounds.Height / printFont.GetHeight ( ev.Graphics ) ;
//重复使用StringReader对象 ,打印出richTextBox1中的所有内容
while ( count < linesPerPage && ( ( line = myReader.ReadLine ( ) ) != null ) ) 
{ // 计算出要打印的下一行所基于页面的位置
yPosition = topMargin + ( count * printFont.GetHeight ( ev.Graphics ) ) ;
// 打印出richTextBox1中的下一行内容
ev.Graphics.DrawString ( line , printFont , myBrush , leftMargin , yPosition , new StringFormat ( ) ) ;
count++ ;
} // 判断如果还要下一页,则继续打印
if ( line != null )
ev.HasMorePages = true ;
else
ev.HasMorePages = false ;
myBrush.Dispose ( ) ;
} } 
--------------------编程问答-------------------- 你是用什么语言开发,我这有VC的代码,也许可你帮你解决1,2,5三个问题 --------------------编程问答-------------------- 都是高手啊 --------------------编程问答-------------------- 高手啊! --------------------编程问答-------------------- upp --------------------编程问答-------------------- 膜拜神人。 --------------------编程问答-------------------- 贴点代码就成神人了。。。。。。。。 - -|| --------------------编程问答-------------------- 楼主 搞定没?能否给小弟个源码  着急用 alinly21@163.com 跪谢!!!!!!!!1
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,