狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

【C#】C/S程序使用HTML文件作為打印模板

admin
2023年8月11日 17:49 本文熱度 1497

public partial class Print : Form
    {

       // 定義dgSetPage托付進(jìn)行打印時(shí)的選項(xiàng)設(shè)置
        public delegate void dgSetPage();   

       //定義dgFiledelete 托付進(jìn)行打印完畢后。刪除填充后的模板文件
        public delegate void dgFiledelete();

 

        [DllImport("User32.dll", EntryPoint = "FindWindow")]
        private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
        [DllImport("User32.dll", EntryPoint = "FindWindowEx")]
        private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpClassName, string lpWindowName);
 
        [DllImport("User32.dll", EntryPoint = "SendMessage")]
        public static extern int SendMessage(IntPtr hWnd, int msg, int wParam, int lParam);


        //定義SendMessage方法內(nèi)使用的鼠標(biāo)單擊 常量

        const int BM_CLICK = 0xF5;


        private void btnPrint_Click(object sender, EventArgs e)
        {
            btnPrint.Enabled = false;

           //由于是使用WebBrowser對象進(jìn)行打印HTML文件,所以無法控制頁面設(shè)置,須要使用注冊表改動(dòng)一些內(nèi)容

           //方法 ChangePageSettingByRegist 。改動(dòng)注冊表,取消頁眉、頁角項(xiàng)目
            ChangePageSettingByRegist();

           //讀取數(shù)據(jù)填充HTML模板
            string sFillDataResult=FillDataToNewFile();


            if (sFillDataResult.IndexOf("NG") >= 0)
            {
                MessageBox.Show(sFillDataResult);
                return;
            }

            pd_PrintPage(); 
            btnPrint.Enabled = true;
        }


        private void pd_PrintPage()
        {
            //創(chuàng)建一個(gè)WebBrowser對象,然后用它在后臺打開并解釋HTML文件
            WebBrowser webBrowserForPrinting = new WebBrowser();

           //  lblNewFile.Text  保存是填充后的模板文件名稱 
            webBrowserForPrinting.Url = new Uri(Application.StartupPath.ToString() + "\\" +  lblNewFile.Text);

            //當(dāng)載入文件完畢后激發(fā)手動(dòng)追加的事件
            webBrowserForPrinting.DocumentCompleted +=   new WebBrowserDocumentCompletedEventHandler(PrintDocument);
            webBrowserForPrinting.Focus();
        }


        private void PrintDocument(object sender,WebBrowserDocumentCompletedEventArgs e)
        { 
            //創(chuàng)建一個(gè)新的線程,用于當(dāng)彈出頁面設(shè)置對話框時(shí)發(fā)送設(shè)置為橫向的指令
            Thread th = new Thread(new ThreadStart(new dgSetPage(SetPage)));
            th.Start(); 

            //彈出頁面設(shè)置對話框-----即上方定義的新進(jìn)程須要處理的窗體
            ((WebBrowser)sender).ShowPageSetupDialog();

            //打印
            ((WebBrowser)sender).Print();
           
            //釋放資源
            ((WebBrowser)sender).Dispose();

            //刪除填充后的模板文件,防止反復(fù)打印
            System.IO.File.delete(lblNewFile.Text);
            lblNewFile.Text = "";
        }

        //  此處方式被凝視掉了,由于假設(shè)須要改動(dòng)主窗體內(nèi)控件的內(nèi)容或者狀況里須要使用托付調(diào)用改動(dòng)方法


       //  須要時(shí),把SetPage與SetPage2名稱互換就可以在變更后的名稱為SetPage2內(nèi)加入改動(dòng)主窗體內(nèi)容的代碼
        //private void SetPage2()
        //{
        //    //新建托付對象
        //    MethodInvoker In = new MethodInvoker(SetPage2);
        //    this.BeginInvoke(In);
        //}


        private void SetPage()
        {
            int i = 0;

          //      此處須要設(shè)置循環(huán)查找時(shí)間。眼下為超過10秒未找到結(jié)束查找
          while (true)
            {
                IntPtr WindownHand = FindWindow("#32770", "頁面設(shè)置");
                if (WindownHand != IntPtr.Zero)
                {

                    //找到窗體內(nèi)子項(xiàng)目的名柄,然后模擬鼠標(biāo)左鍵單擊事件
                    IntPtr Wk = FindWindowEx(WindownHand, IntPtr.Zero, null, "橫向(&A)");
                    SendMessage(Wk, BM_CLICK, 0, 0);

                    IntPtr Wk1 = FindWindowEx(WindownHand, IntPtr.Zero, null, "確定");
                    SendMessage(Wk1, BM_CLICK, 0, 0);

                    break;
                }
                else
                {
                    if (i > 20)
                        break;
                    Thread.Sleep(500);
                    i++;
                }
            }

        }


        //改動(dòng)注冊表,把頁眉頁腳拿掉。然后設(shè)置為縮放至一頁
        private void ChangePageSettingByRegist()
        {
            RegistryKey hklm = Registry.CurrentUser;
            RegistryKey software = hklm.OpenSubKey(@"Software\Microsoft\Internet Explorer\PageSetup".ToUpper(), true);
            object A = (object)"";
            object B = (object)"0.5";
            object C = (object)"0";
            software.SetValue("header", A);
            software.SetValue("footer", A);
            software.SetValue("margin_bottom", B);
            software.SetValue("margin_left", C);
            software.SetValue("margin_right", C);
            software.SetValue("margin_top", C);
            software.SetValue("Shrink_To_Fit","yes");          

        }


HTML模板內(nèi)容片段

     <%A%>  占位符,用于替換

    <table cellpadding="0" cellspacing="0" border="0px">
        <tr><td colspan="8"  class="EachPartSpace"></td></tr>
        <tr><td class="LayOutFieldTitle" colspan="8">Machine Protocol</td></tr>       
        <tr>
            <td class="FieldNameHorizontal Column1With">Purchase Order No:</td>
            <td class="FieldValueHorizontal Column2With"><%OrderNo%></td>
            <td class="FieldNameHorizontal Column1With">Unit No:</td>
            <td class="FieldValueHorizontal Column2With"><%UnitNo%></td>
            <td class="FieldNameHorizontal Column1With">Region:</td>
            <td class="FieldValueHorizontal Column6With"><%Region%></td>
            <td class="FieldNameHorizontal Column2With">Assembly date:</td>
            <td class="FieldValueHorizontal Column2With"><%AssemblyDate%></td>
        </tr>
    </table>


該文章在 2023/8/11 17:49:26 編輯過

全部評論2

admin
2023年8月11日 18:9
 打印時(shí)動(dòng)態(tài)更改打印機(jī)參見:
【C#】Winform之C/S架構(gòu)html頁面文件實(shí)現(xiàn)直接點(diǎn)擊批量順序打印[4]
  http://20825.oa22.cn
admin
2023年8月11日 18:32
 在用c#實(shí)現(xiàn)打印功能時(shí),我們可以將內(nèi)容先轉(zhuǎn)化為網(wǎng)頁形式或者吧模板寫成固定的html格式,然后進(jìn)行內(nèi)容填充。

在打印過程中,我們可以用到的函數(shù):

//轉(zhuǎn)到某個(gè)網(wǎng)址
webBrowser.Navigate("");
//直接打印
 webBrowser.Print();
 //預(yù)覽
 webBrowser.ShowPrintPreviewDialog();
 //打印
 webBrowser.ShowPrintDialog();
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved