茄子在线看片免费人成视频,午夜福利精品a在线观看,国产高清自产拍在线观看,久久综合久久狠狠综合

    <s id="ddbnn"></s>
  • <sub id="ddbnn"><ol id="ddbnn"></ol></sub>

  • <legend id="ddbnn"></legend><s id="ddbnn"></s>

    關(guān)于ASP.NET頁(yè)面打印技術(shù)的總結(jié)
    來源:易賢網(wǎng) 閱讀:1892 次 日期:2015-04-29 14:21:17
    溫馨提示:易賢網(wǎng)小編為您整理了“關(guān)于ASP.NET頁(yè)面打印技術(shù)的總結(jié)”,方便廣大網(wǎng)友查閱!

    B/S結(jié)構(gòu)導(dǎo)致了Web應(yīng)用程序中打印的特殊性。

    ● 程序運(yùn)行在瀏覽器中,打印機(jī)在本地,而文件確可能在服務(wù)器上,導(dǎo)致了打印控制不是很靈活。

    ● 格式如何控制和定制等,是我們開發(fā)中可能會(huì)面對(duì)的問題。

    打印文檔的生成

    1、客戶端腳本方式

    一般情況下,主要使用JS 可以分析源頁(yè)面的內(nèi)容,將欲打印的頁(yè)面元素提取出來,實(shí)現(xiàn)打印。通過分析源文檔的內(nèi)容,可以生成打印目標(biāo)文檔。

    優(yōu)點(diǎn):客戶端獨(dú)立完成打印目標(biāo)文檔的生成,減輕服務(wù)器負(fù)荷;

    缺點(diǎn):源文檔的分析操作復(fù)雜,并且源文檔中的打印內(nèi)容要有約定。

    2、服務(wù)器端程序方式

    利用后臺(tái)代碼從數(shù)據(jù)庫(kù)中讀取打印源,生成打印目標(biāo)文檔。當(dāng)?shù)捻?yè)面生成時(shí),還應(yīng)適當(dāng)考慮使用CSS 來實(shí)現(xiàn)強(qiáng)制分頁(yè)控制。

    優(yōu)點(diǎn):可以生成內(nèi)容非常豐富的打印目標(biāo)文檔,目標(biāo)文檔的內(nèi)容的可控性強(qiáng)。由于打印內(nèi)容是從數(shù)據(jù)庫(kù)中獲取的,所以生成操作相對(duì)簡(jiǎn)單;

    缺點(diǎn):服務(wù)器端負(fù)載比較大;

    頁(yè)面設(shè)置

    ● 頁(yè)面設(shè)置主要是指設(shè)置

    打印文檔的頁(yè)邊距、頁(yè)眉、頁(yè)腳、紙張等內(nèi)容。頁(yè)面設(shè)置將直接影響到打印文檔版面的生成效果,所以它和打印文檔的生成有著密切的關(guān)系。比如:表格的行數(shù)、大小、位置、字體的大小等。

    現(xiàn)有的技術(shù)是利用IE6.0 內(nèi)置的打印模板方式來控制頁(yè)面設(shè)置,其可以對(duì)打印目標(biāo)文檔產(chǎn)生非常大的影響。打印模板可以控制頁(yè)邊距、頁(yè)眉、頁(yè)腳、奇偶頁(yè)等內(nèi)容,并可以將用戶的設(shè)置取得,還可以將設(shè)置發(fā)送到服務(wù)器端。打印模板技術(shù)可以自定預(yù)覽窗口和打印格式,最大限度地影響目標(biāo)文檔和打印效果。

    IE直接打印

    ● 即直接調(diào)用window.print或者webrower控件的ExecWB方法來打印。

    ● 優(yōu)點(diǎn):方便快捷,客戶端無(wú)需任何設(shè)置即可。

    ● 缺點(diǎn):打印控制不是很靈活。如果直接調(diào)用

    window.print來打印頁(yè)面,頁(yè)面上別的元素也會(huì)被打印處理,頁(yè)頭頁(yè)尾的格式也不好控制。

    ● 常用方法:大部分情況會(huì)把查詢的結(jié)果綁定到DataGrid上來,然后打印DataGrid。這種情況的打印一般來說格式比較固定簡(jiǎn)單,確定后基本不會(huì)再作更改。所以可以采用IE直接打印。

    【實(shí)例代碼】

    注:①這是客戶端通過window.print打印指定內(nèi)容。這里定義sprnstr和eprnstr來指定內(nèi)容

    執(zhí)行代碼:

    <input type="button" name="print" value="預(yù)覽并打印" onclick="preview()">

    $news_page$

    ② 如果直接使用window.print將打印頁(yè)面上的所有內(nèi)容,但是我們可以使用

    <script language="Javascript">

    function preview()

    {

    bdhtml=window.document.body.innerHTML;

    sprnstr="<!--startprint-->";

    eprnstr="<!--endprint-->";

    prnhtml=bdhtml.substr(bdhtml.indexOf(sprnstr)+17);

    prnhtml=prnhtml.substring(0,prnhtml.indexOf(eprnstr));

    window.document.body.innerHTML=prnhtml;

    window.print();

    }

    </script>

    <!--省略部分代碼-->

    <form id="WebForm1" method="post" runat="server">

    <center>本部分以上不被打印</center>

    <!--startprint-->

    <div align="center">

    <asp:DataGrid id="dgShow" runat="server">

    <!--省略部分代碼-->

    </asp:DataGrid>

    </div>

    <!--endprint-->

    <center>本部分以下不被打印</center>

    <div align="center">

    <input type="button" name="print" value="預(yù)覽并打印" onclick="preview()">

    </div>

    <style> @media Print { .Noprn { DISPLAY: none }}

    </style>

    <p class="Noprn">不打印</p>

    <table id="datagrid">

    <tr>

    <td>打印</td>

    </tr>

    </table>

    <input class="Noprn" type="button" onclick="window.print()" value="print">

    </form>

    WebBrowser 控件技術(shù)

    ● 打印操作的實(shí)現(xiàn)

    此功能的實(shí)現(xiàn)主要是利用WebBrowser控件的函數(shù)接口來實(shí)現(xiàn)打印、打印預(yù)覽(默認(rèn)的)、頁(yè)面設(shè)置(默認(rèn)的)。

    <object ID=‘WebBrowser1’ WIDTH=0 HEIGHT=0

    CLASSID=‘CLSID:8856F961-340A-11D0-A96B-00C04FD705A2’>

    //打印

    WebBrowser1.ExecWB(6,1);

    //打印設(shè)置

    WebBrowser1.ExecWB(8,1);

    //打印預(yù)覽

    WebBrowser1.ExecWB(7,1);

    //直接打印

    WebBrowser1.ExecWB(6,6);

    //自定義類PrintClass

    public string DGPrint(DataSet ds)

    {

    //DGPrint執(zhí)行的功能:根據(jù)DataTable轉(zhuǎn)換成對(duì)應(yīng)的HTML對(duì)應(yīng)的字符串

    DataTable myDataTable=new DataTable();

    myDataTable=ds.Tables[0];

    int myRow=myDataTable.Rows.Count;

    int myCol=myDataTable.Columns.Count;

    StringBuilder sb=new StringBuilder();

    string colHeaders="<html><body>"+"<object ID='WebBrowser' WIDTH=0 HEIGHT=0 CLASSID='CLSID:8856F961-340A-11D0-A96B-00C04FD705A2'VIEWASTEXT></object>" +"<table><tr>";

    for(int i=0;i<myCol;i++)

    {

    colHeaders +="<td>"+ myDataTable.Columns[i].ColumnName.ToString()+"</td>";

    }

    colHeaders += "</tr>";

    sb.Append(colHeaders);

    for(int i=0;i<myRow;i++)

    {

    sb.Append("<tr>");

    for(int j=0;j<myCol;j++)

    {

    sb.Append("<td>");

    sb.Append(myDataTable.Rows[i][j].ToString().Trim());

    sb.Append("</td>");

    }

    sb.Append("</tr>");

    }

    sb.Append("</table></body></html>");

    colHeaders=sb.ToString();

    colHeaders+="<script languge='Javascript'>WebBrowser.ExecWB(6,1); window.opener=null;window.close();</script>";

    return(colHeaders);

    }

    $news_page$

    //頁(yè)面:打印按鈕事件

    PrintClass myP = new PrintClass();

    Response.Write(myP.DGPrint(Bind());

    在把DataGrid轉(zhuǎn)換為對(duì)應(yīng)的HTML代碼時(shí),如果存在按鈕列就會(huì)報(bào)錯(cuò),最好把這一列隱藏,一般只能轉(zhuǎn)換數(shù)據(jù)列。其次要注意分頁(yè)問題,一般只能打印當(dāng)前一頁(yè),最好在打印之前除掉分頁(yè)

    導(dǎo)出到Excel,Word中去打印

    ● 可以在服務(wù)端或者客戶端進(jìn)行。

    ● 優(yōu)點(diǎn):使用這種方法,可適應(yīng)性比較強(qiáng),控制較好。

    ● 缺點(diǎn):在服務(wù)端使用的話,要求服務(wù)端要安裝Word,Excel,在客戶端使用的話,要

    求客戶端在IE的安全設(shè)置上有一定要求。

    代碼如下:

    protected void btnMIME_Click(object sender, System.EventArgs e)

    {

    BindData();

    Response.ContentType = "application/vnd.ms-excel";

    Response.AddHeader("Content-Disposition", "inline;filename="+HttpUtility.UrlEncode("下載文件.xls",Encoding.UTF8));

    //如果輸出為Word,修改為以下代碼

    //Response.ContentType = "application/ms-word"

    //Response.AddHeader("Content-Disposition", "inline;filename=test.doc")

    StringBuilder sb=new StringBuilder();

    System.IO.StringWriter sw = new System.IO.StringWriter(sb);

    System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(sw);

    sb.Append("<html><body>");

    dgShow.RenderControl(hw);

    sb.Append("</body></html>");

    Response.Write(sb.ToString());

    Response.End();

    }

    protected void btnCom_Click(object sender, System.EventArgs e)

    {

    ExportToExcel(BindData(),Server.MapPath("ComExcel.xls"));

    }

    //從DataSet到出到Excel

    #region從DataSet到出到Excel

    ///導(dǎo)出指定的Excel文件

    public void ExportToExcel(DataSet ds,string strExcelFileName)

    {

    if (ds.Tables.Count==0 || strExcelFileName=="") return;

    doExport(ds,strExcelFileName);

    }

    ///執(zhí)行導(dǎo)出

    private void doExport(DataSet ds,string strExcelFileName)

    {

    excel.Application excel= new excel.Application();

    int rowIndex=1;

    int colIndex=0;

    excel.Application.Workbooks.Add(true);

    System.Data.DataTable table=ds.Tables[0] ;

    foreach(DataColumn col in table.Columns)

    {

    colIndex++;

    excel.Cells[1,colIndex]=col.ColumnName;

    }

    foreach(DataRow row in table.Rows)

    {

    rowIndex++;

    colIndex=0;

    foreach(DataColumn col in table.Columns)

    {

    colIndex++;

    excel.Cells[rowIndex,colIndex]=row[col.ColumnName].ToString();

    }

    }

    excel.Visible=false;

    excel.ActiveWorkbook.SaveAs(strExcelFileName+".XLS",Excel.XlFileFormat.xlExcel9795,null,null,false,false,Excel.XlSaveAsAccessMode.xlNoChange,null,null,null,null,null);

    excel.Quit();

    excel=null;

    GC.Collect();//垃圾回收

    }

    #endregion

    $news_page$

    利用.Net組件打印

    利用.Net組件

    ● 優(yōu)點(diǎn):這種打印方式對(duì)于格式變化大,數(shù)據(jù)量小的應(yīng)用來說非常合適。

    ● 缺點(diǎn):

    – 需要客戶端安.Net framework組件。

    – Xml的解析上,如果文件較大速度上不是很理想。

    – 頁(yè)面首次加載時(shí)會(huì)有明顯的延時(shí)。

    使用XSL和XSLT轉(zhuǎn)換Xml

    ● XSL:擴(kuò)展樣式表語(yǔ)言,可以通過它來把Xml轉(zhuǎn)換為其他的文本格式

    ● XSL轉(zhuǎn)換包括發(fā)現(xiàn)或者選擇一個(gè)模式匹配,通過使用XPath選擇一個(gè)結(jié)果集,然后對(duì)結(jié)果集中的每一項(xiàng),為這些匹配定義結(jié)果輸出。

    ● XSL是一個(gè)功能強(qiáng)大的工具,可以把Xml轉(zhuǎn)換成任何你想要的格式。

    代碼如下:

    XslTransform xslt = new XslTransform();

    xslt.Load(Server.MapPath( "StudentsToHTML.xsl") );

    XPathDocument XDoc = new XPathDocument(Server.MapPath( "Students.Xml" ));

    XmlWriter writer = new XmlTextWriter( server.MapPath("Students.html"), System.Text.Encoding.UTF8 );

    xslt.Transform( XDoc, null, writer );

    writer.Close();

    Response.Redirect("Students.html");

    利用ActiveX控件打印

    利用第三方控件

    ● 自己開發(fā)控件。這種方式很多商用軟件采用這種方式,寫成控件后已經(jīng)無(wú)所謂是在web中使用還是應(yīng)用程序中使用了。

    ● 優(yōu)點(diǎn):打印方式非常靈活,基本上程序能做到的web也能做得到。

    ● 缺點(diǎn):客戶端需要安裝組件,部署不是很方便。

    使用水晶報(bào)表

    ● 用戶僅需要Web 瀏覽器就可以查看報(bào)表

    ● 報(bào)表查看器控件可以是應(yīng)用程序中眾多控件之一。

    ● 與報(bào)表輕松交互

    ● 用戶可將報(bào)表導(dǎo)出為Microsoft word 和Excel 格式,以及PDF、HTML 和Crystal Reports for visual Studio .Net格式。

    ● 可以使用報(bào)表控件直接打印

    $news_page$

    代碼如下:

    //水晶報(bào)表的填充,省略連接代碼

    myReport ReportDoc = new myReport();

    ReportDoc.SetDataSource(ds);

    Crv.ReportSource = ReportDoc;

    //輸出為指定類型文件

    CrystalDecisions.Shared.DiskFileDestinationOptions DiskOpts = new CrystalDecisions.Shared.DiskFileDestinationOptions();

    ReportDoc.ExportOptions.ExportDestinationType = CrystalDecisions.Shared.ExportDestinationType.DiskFile;

    string strFileName = server.MapPath("Output");

    switch (ddlFormat.SelectedItem.Text)

    {

    case "Rich Text (RTF)":

    ReportDoc.ExportOptions.ExportFormatType = CrystalDecisions.Shared.ExportFormatType.RichText;

    DiskOpts.DiskFileName =strFileName + ".rtf";

    break;

    case "Portable Document (PDF)":

    ReportDoc.ExportOptions.ExportFormatType = CrystalDecisions.Shared.ExportFormatType.PortableDocFormat;

    DiskOpts.DiskFileName = strFileName + ".pdf";

    break;

    case "MS word (DOC)":

    ReportDoc.ExportOptions.ExportFormatType = CrystalDecisions.Shared.ExportFormatType.WordForWindows;

    DiskOpts.DiskFileName = strFileName + ".doc";

    break;

    case "MS excel (XLS)":

    ReportDoc.ExportOptions.ExportFormatType = CrystalDecisions.Shared.ExportFormatType.Excel;//

    DiskOpts.DiskFileName = strFileName + ".xls";

    break;

    default:

    break;

    }

    ReportDoc.ExportOptions.DestinationOptions = DiskOpts;

    ReportDoc.Export();

    //打印

    // 指定打印機(jī)名稱

    string strPrinterName;

    strPrinterName = @"Canon Bubble-Jet BJC-210SP";

    // 設(shè)置打印頁(yè)邊距

    PageMargins margins;

    margins = ReportDoc.PrintOptions.PageMargins;

    margins.bottomMargin = 250;

    margins.leftMargin = 350;

    margins.rightMargin = 350;

    margins.topMargin = 450;

    ReportDoc.PrintOptions.ApplyPageMargins(margins);

    //應(yīng)用打印機(jī)名稱

    ReportDoc.PrintOptions.PrinterName = strPrinterName;

    // 打印 // 打印報(bào)表。將startPageN 和endPageN

    // 參數(shù)設(shè)置為0 表示打印所有頁(yè)。

    ReportDoc.PrintToPrinter(1, false,0,0);

    更多信息請(qǐng)查看IT技術(shù)專欄

    更多信息請(qǐng)查看網(wǎng)絡(luò)編程
    易賢網(wǎng)手機(jī)網(wǎng)站地址:關(guān)于ASP.NET頁(yè)面打印技術(shù)的總結(jié)
    由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

    2026上岸·考公考編培訓(xùn)報(bào)班

    • 報(bào)班類型
    • 姓名
    • 手機(jī)號(hào)
    • 驗(yàn)證碼
    關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 新媒體/短視頻平臺(tái) | 手機(jī)站點(diǎn) | 投訴建議
    工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
    云南網(wǎng)警備案專用圖標(biāo)
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
    咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
    云南網(wǎng)警報(bào)警專用圖標(biāo)