asp文件用什么打开如何使asp自动生成html文件asp怎么打开




asp文件用什么打开如何使asp自动生成html文件asp怎么打开

2022-07-20 20:04:29 网络知识 官方管理员

因个人需求,需要将html格式转换成PDF并加上水印图片。于是乎第一次接触这种需求的小菜鸟博主我,在某度搜索引擎上不断地查阅关键字资料、踩坑,终于有了一个相应的解决方案。以下是解决步骤,记录下来方便以后的回顾,以及各位大神们的品鉴。

  1、在NuGet搜索itextsharp关键字下载以下截图圈中的两个包,一般下载完后项目会自动引用。

asp文件用什么打开(如何使asp自动生成html)(1)

asp文件用什么打开(如何使asp自动生成html)(2)

  2、在项目文件中引入以下命名空间(建议下面提及的代码封装成类库,方便项目间调用,个人取舍)

asp文件用什么打开(如何使asp自动生成html)(3)

  3、Html字符串转pdf文件流,加水印图片以及未加水印重载精简帮助类(由博主踩坑整理,仅完成个人业务需求)

asp文件用什么打开(如何使asp自动生成html)(4)

1///<summary>2///Html字符串转PDF输出帮助类3///</summary>4publicclassHtmlToPdfHelper5{6#regionHtmlToPDF78///<summary>9///判断是否有乱码10///</summary>11///<paramname="txt"></param>12///<returns></returns>13privatestaticboolIsMessyCode(stringtxt)14{15varbytes=Encoding.UTF8.GetBytes(txt);16for(vari=0;i<bytes.Length;i++)17{18if(i<bytes.Length-3)19if(bytes[i]==239&&bytes[i+1]==191&&bytes[i+2]==189)20{21returntrue;22}23}24returnfalse;25}2627///<summary>28///将Html字符串输出到PDF档里29///</summary>30///<paramname="htmlText"></param>31///<returns></returns>32publicstaticbyte[]ConvertHtmlTextToPdf(stringhtmlText)33{34returnConvertHtmlTextToPdf(htmlText,"",0,0,0,0);35}3637///<summary>38///将Html字符串输出到PDF档里,并添加水印39///</summary>40///<paramname="htmlText">网页代码</param>41///<paramname="picPath">水印路径</param>42///<paramname="left">距离左边距离</param>43///<paramname="top">距顶部距离</param>44///<paramname="   width">水印宽度</param>45///<paramname="height">水印高度</param>46///<returns></returns>47publicstaticbyte[]ConvertHtmlTextToPdf(stringhtmlText,stringpicPath,intleft,inttop,int   width,intheight)48{49if(string.IsNullOrEmpty(htmlText))50{51returnnull;52}53//避免当htmlText无任何htmltag标签的纯文字时,转PDF时会挂掉,所以一律加上<p>标签54htmlText="<p>"+htmlText+"</p>";55MemoryStreamoutputStream=newMemoryStream();//要把PDF写到哪个串流56byte[]data=Encoding.UTF8.GetBytes(htmlText);//字串转成byte[]57MemoryStreammsInput=newMemoryStream(data);58Documentdoc=newDocument();//要写PDF的文件,建构子没填的话预设直式A459PdfWriterwriter=PdfWriter.GetInstance(doc,outputStream);60//指定文件预设开档时的缩放为100%61PdfDestinationpdfDest=newPdfDestination(PdfDestination.XYZ,0,doc.PageSize.Height,1f);62//开启Document文件63doc.Open();6465//写入水印图片66if(!string.IsNullOrEmpty(picPath))67{68Imageimg=Image.GetInstance(picPath);69//设置图片的位置70img.SetAbsolutePosition(   width+left,(doc.PageSize.Height-height)-top);71//设置图片的大小72img.ScaleAbsolute(   width,height);73doc.Add(img);74}75try76{77//使用XMLWorkerHelper把Htmlparse到PDF档里79XMLWorkerHelper.GetInstance().ParseXHtml(writer,doc,msInput,null,Encoding.UTF8);80//将pdfDest设定的资料写到PDF档81PdfActionaction=PdfAction.GotoLocalPage(1,pdfDest,writer);82writer.SetOpenAction(action);83}84catch(Exception)85{86returnnull;87}88doc.Close();89msInput.Close();90outputStream.Close();91//回传PDF档案92returnoutputStream.ToArray();94}9596#endregion9798}

asp文件用什么打开(如何使asp自动生成html)(5)

  4、获取网页字符串的方法

asp文件用什么打开(如何使asp自动生成html)(6)

1///<summary>2///获取网站内容,包含了HTML+CSS+JS3///</summary>4///<returns>String返回网页信息</returns>5publicstaticstringGetWebContent(stringinpath)6{7try8{9WebClientmyWebClient=newWebClient();10//获取或设置用于向Internet资源的请求进行身份验证的网络凭据11myWebClient.Credentials=CredentialCache.DefaultCredentials;12//从指定网站下载数据13Byte[]pageData=myWebClient.DownloadData(inpath);14//如果获取网站页面采用的是GB2312,则使用这句15stringpageHtml=Encoding.UTF8.GetString(pageData);16boolisBool=IsMessyCode(pageHtml);//判断使用哪种编码读取网页信息17if(!isBool)18{19stringpageHtml1=Encoding.UTF8.GetString(pageData);20pageHtml=pageHtml1;21}22else23{24stringpageHtml2=Encoding.Default.GetString(pageData);25pageHtml=pageHtml2;26}27returnpageHtml;28}29catch(WebExceptionwebEx)30{31returnwebEx.Message;32}33}

asp文件用什么打开(如何使asp自动生成html)(7)

  5、MVC设计模式下获取控制器视图Html方法,很XX的一个问题就是只能获取调用此方法的控制器下所有视图,不能跨控制器获取视图,有待优化

asp文件用什么打开(如何使asp自动生成html)(8)

1///<summary>2///获取MVC视图Html3///</summary>4///<paramname="context">控制器上下文</param>5///<paramname="viewName">视图名称</param>6///<paramname="param"></param>7///<returns></returns>8publicstaticstringGetViewHtml(ControllerContextcontext,stringviewName)9{10if(string.IsNullOrEmpty(viewName))11viewName=context.RouteData.GetRequiredString("action");12using(varsw=newStringWriter())13{14ViewEngineResultviewResult=ViewEngines.Engines.FindPartialView(context,viewName);15varviewContext=newViewContext(context,viewResult.View,context.Controller.ViewData,context.Controller.TempData,sw);16try17{18viewResult.View.Render(viewContext,sw);19}20catch(Exceptionex)21{22throw;23}2425returnsw.GetStringBuilder().ToString();26}27}

asp文件用什么打开(如何使asp自动生成html)(9)

  6、将pdf流输出至客户浏览器下载方法

asp文件用什么打开(如何使asp自动生成html)(10)

1///<summary>2///将pdf文件流输出至浏览器下载3///</summary>4///<paramname="pdfFile">PDF文件流</param>5publicstaticvoidPdfDownload(byte[]pdfFile)6{7byte[]buffer=pdfFile;8StreamiStream=newMemoryStream(buffer);9try10{11intlength;12longdataToRead;13stringfilename=DateTime.Now.ToString("yyyyMMddHHmmss")+".pdf";//保存的文件名称14dataToRead=iStream.Length;15HttpContext.Current.Response.Clear();16HttpContext.Current.Response.ClearHeaders();17HttpContext.Current.Response.ClearContent();18HttpContext.Current.Response.ContentType="application/pdf";//文件类型19HttpContext.Current.Response.AddHeader("Content-Length",dataToRead.ToString());//添加文件长度,进而显示进度20HttpContext.Current.Response.AddHeader("Content-Disposition","attachment;filename="+HttpUtility.UrlEncode(filename,Encoding.UTF8));21while(dataToRead>0)22{23if(HttpContext.Current.Response.IsClientConnected)24{25length=buffer.Length;26HttpContext.Current.Response.OutputStream.Write(buffer,0,length);27HttpContext.Current.Response.Flush();28buffer=newByte[length];29dataToRead=dataToRead-length;30}31else32{33dataToRead=-1;34}35}36}37catch(Exceptionex)38{39HttpContext.Current.Response.Write("文件下载时出现错误!");40}41finally42{43if(iStream!=null)44{45iStream.Close();46}47//结束响应,否则将导致网页内容被输出到文件,进而文件无法打开48HttpContext.Current.Response.Flush();49HttpContext.Current.Response.End();5051}52}

asp文件用什么打开(如何使asp自动生成html)(11)

  7、MVC控制器下调用Demo(步骤4、6方法封装至帮助类)

asp文件用什么打开(如何使asp自动生成html)(12)

1publicclassHomeController:Controller2{3//4//GET:/Home/56publicActionResultIndex()7{8//从网址下载Html字符串(方法一)9stringinpath=System.Web.HttpContext.Current.Server.MapPath("~/PDFTemplate/test.html");10stringhtmlText=HtmlToPdfHelper.GetWebContent(inpath);//此处调用步骤4方法1112//获取MVC视图Html字符串(方法二)13//stringhtmlText=GetViewHtml(ControllerContext,"Test");//此处调用步骤5方法1415//水印图片路径16stringpicPath=Server.MapPath("~/PDFTemplate/TemplateImg/authentication-iocn.png");17//html转pdf并加上水印18byte[]pdfFile=HtmlToPdfHelper.ConvertHtmlTextToPdf(htmlText,picPath,100,200,100,100);19//输出至客户端20HtmlToPdfHelper.PdfDownload(pdfFile);//此处调用步骤6方法2122returnView();23}2425publicActionResultTest()26{27returnView();28}2930///<summary>31///获取MVC视图Html32///</summary>33///<paramname="context"></param>34///<paramname="viewName">视图名称</param>35///<returns></returns>36publicstaticstringGetViewHtml(ControllerContextcontext,stringviewName)37{38if(string.IsNullOrEmpty(viewName))39viewName=context.RouteData.GetRequiredString("action");40using(varsw=newStringWriter())41{42ViewEngineResultviewResult=ViewEngines.Engines.FindPartialView(context,viewName);43varviewContext=newViewContext(context,viewResult.View,context.Controller.ViewData,44context.Controller.TempData,sw);45try46{47viewResult.View.Render(viewContext,sw);48}49catch(Exceptionex)50{51throw;52}5354returnsw.GetStringBuilder().ToString();55}56}57}

asp文件用什么打开(如何使asp自动生成html)(13)

  总结:我理解的解决思路是将html读取转换成字符串,之后再通过itextsharp转换成pdf比特币传输至客户端或直接保存至服务器生成链接供用户下载。(新手上路,不妥之处,欢迎各位大神指教)

  以上代码仅满足个人业务逻辑需求,谢谢浏览。

发表评论:

最近发表
网站分类
标签列表