动态将ASPX生成HTML网页并将网页导出PDF

1.首先要找到wnvhtmlconvert.dll这个文件,并引入项目中。

2.Server.Execute("pos.aspx?id=" + ids); 执行相应的aspx网页

3.pos.aspx网页中有这样的一个方法,此方法用来生成html页面

protected override void Render(HtmlTextWriter writer)
{
string htmlname = "POSDemo";
string fileName = string.Empty;

string content = string.Empty;
System.IO.StringWriter stringWriter = new System.IO.StringWriter();
HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter);
System.IO.StreamWriter sw = null;
try
{
// 将当前页面的内容呈现到临时的 HtmlTextWriter 对象中
base.Render(htmlWriter);
htmlWriter.Close();
// 得到当前页面的全部内容
content = stringWriter.ToString();
fileName = htmlname + ".html";
//sw = new StreamWriter(Server.MapPath("htm/") + fileName, false, code);
//sw.Write(str);
//sw.Flush();
//System.IO.StringWriter creaObj = new System.IO.StringWriter(Server.MapPath("html/") + fileName, false, content);

string path = HttpContext.Current.Server.MapPath("../Upload/");

System.Text.Encoding code = System.Text.Encoding.GetEncoding("utf-8");
sw = new System.IO.StreamWriter(path + fileName, false, code);
//sw = new System.IO.StreamWriter(fileName, false, code);
sw.Write(content);
sw.Flush();
string website = "http://" + HttpContext.Current.Request.Url.Authority;

Response.Write(content);
}
catch { }
finally
{
sw.Dispose();
stringWriter.Dispose();
htmlWriter.Close();
htmlWriter.Dispose();
}

}

4.运用下面的类来生成pdf字节

public class MyPDFGenerator
{
public static byte[] Create(string sUrl)
{
try
{
PdfConverter pdfConverter = new PdfConverter();
// set the license key - required
//pdfConverter.LicenseKey = "P38cBx6AWW7b9c81TjEGxnrazP+J7rOjs+9omJ3TUycauK+cLWdrITM5T59hdW5r";//test key, add by tieli

pdfConverter.LicenseKey = "oYqQgZCBlpeBlY+RgZKQj5CTj5iYmJg=";
// set the converter options - optional
pdfConverter.PdfDocumentOptions.PdfPageSize = PdfPageSize.A4;
pdfConverter.PdfDocumentOptions.PdfCompressionLevel = PdfCompressionLevel.NoCompression;
pdfConverter.PdfDocumentOptions.PdfPageOrientation = PDFPageOrientation.Portrait;
pdfConverter.PdfDocumentOptions.ShowHeader = false;
pdfConverter.PdfDocumentOptions.ShowFooter = false;
pdfConverter.PdfDocumentOptions.AutoSizePdfPage = true;
// set to generate selectable pdf or a pdf with embedded image - optional
pdfConverter.PdfDocumentOptions.GenerateSelectablePdf = true;
// set the embedded fonts option - optional, by default is false
pdfConverter.PdfDocumentOptions.EmbedFonts = false;
// enable the live HTTP links option - optional, by default is true
pdfConverter.PdfDocumentOptions.LiveUrlsEnabled = true;
// enable the support for right to left languages , by default false
pdfConverter.RightToLeftEnabled = false;

pdfConverter.PdfDocumentInfo.AuthorName = "Telamon Global, Inc.";

// add HTML header
//if (cbAddHeader.Checked)
// AddHeader(pdfConverter);
//// add HTML footer
//if (cbAddFooter.Checked)
// AddFooter(pdfConverter);

// Performs the conversion and get the pdf document bytes that you can further
// save to a file or send as a browser response
byte[] pdfBytes = pdfConverter.GetPdfFromUrlBytes(sUrl);
//byte[] pdfBytes = pdfConverter.GetPdfBytesFromHtmlFile(@"D:\Peter\Projects\TGSAPSystem\Code\HKOMS\Web Site\Quotes\aaaa.html");
//byte[] pdfBytes = pdfConverter.GetPdfBytesFromHtmlString(html);

// get the html string for the report
//StringWriter htmlStringWriter = new StringWriter();
//Server.Execute("InvoiceTemplate.aspx", htmlStringWriter);
//string htmlCodeToConvert = htmlStringWriter.GetStringBuilder().ToString();
//htmlStringWriter.Close();

//string baseUrl = GetAbsoluteUrl(url);

//SplendidError.SystemError(new StackTrace(true).GetFrame(0), baseUrl);
// get the pdf bytes from html string
//byte[] pdfBytes = pdfConverter.GetPdfBytesFromHtmlString(url);

return pdfBytes;
}
catch
{

return null;
}
}
}

5.调用方法

byte[] bytes = MyPDFGenerator.Create(Server.MapPath("../Upload/POSDemo.html"));

6.最后导出pdf

System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
response.Clear();
response.AddHeader("Content-Type", "binary/octet-stream");
response.AddHeader("Content-Disposition",
"attachment; filename=" + fileName + ".pdf; size=" + bytes.Length.ToString());
response.Flush();
response.BinaryWrite(bytes);
response.Flush();
response.End();

时间: 2024-10-28 14:47:39

动态将ASPX生成HTML网页并将网页导出PDF的相关文章

动态网页和静态网页的特点

静态网页的基本概述静态网页的网址形式通常是以.htm..html..shtml..xml等为后后缀的.静态网页,一般来说是最简单的HTML网页,服务器端和客户端是一样的,而且没有脚本和小程序,所以它不能动.在HTML格式的网页上,也可以出现各种动态的效果,如.GIF格式的动画.FLASH.滚动字母等,这些"动态效果"只是视觉上的,与下面将要介绍的动态网页是不同的概念. 静态网页的特点(1)静态网页每个网页都有一个固定的URL,且网页URL以.htm..html..shtml等常见形式为

动态网页和静态网页的区别

一.从功能方面来说动态网站与静态网站的区别 1. 动态网站可以实现静态网站所实现不了的功能,比方说:聊天室.论坛.音乐播放.浏览器.搜索等:而静态的网站则实现不了.2. 静态网站,如用Frontpage或Dreamweaver开发出来的网站,其源代码是完全公开的,任何浏览者都可以非常轻松地得到其源代码,也就是说,自己设计出来的东西很容易被别人盗用.动态网站,如:ASP开发出来的网站,虽然浏览者也可以看到其源代码,但是那已经是转换过以后的代码,想盗用源代码那是不可能的,因为它的源代码已经放在服务器

Java中动态代理技术生成的类与原始类的区别 (转)

用动态代理的时候,对它新生成的类长什么样子感到好奇.有幸通过一些资料消除了心里的疑惑. 平时工作使用的Spring框架里面有一个AOP(面向切面)的机制,只知道它是把类重新生成了一遍,在切面上加上了后来定义的逻辑.这样就达到了动态的在原有类上增加一些功能.比如日志打印,拦截信息等. 这里只关心动态代理技术生成新的类,先不管虚拟机是如何去生成类,用了什么字节码生成技术,怎么产生字节码等这一系列动作.现在只关心最后生成的新类长什么样,它和老类有什么区别.为了获取到生成后的代理类的字节码并且反编译成我

Linux下动态库的生成和使用

一.动态库的基本概念 1. 动态链接库是程序运行时加载的库,当动态链接库正确安装后,所有的程序都可以使用动态库来运行程序.动态链接库是目标文件的集合,目标文件在动态链接库中的组织方式是按照特殊方式形成的.库中函数和变量的地址是相对地址,不是绝对地址,其真实地址在调用动态库的程序加载时形成. 2. 动态链接库的名称有别名(soname), 真名(realname)和链接名(linker name).别名由一个前缀lib,然后是库的名字,再加上一个后缀“.so”构成.真名是动态链接库真实名称,一般总

减少HTTP请求之将图片转成二进制并生成Base64编码,可以在网页中通过url查看图片(大型网站优化技术)

原文:减少HTTP请求之将图片转成二进制并生成Base64编码,可以在网页中通过url查看图片(大型网站优化技术) 在网站开发过程中,对于页面的加载效率一般都想尽办法求快.那么,怎么让才能更快呢?减少页面请求 是一个优化页面加载速度很好的方法.上一篇博文我们讲解了 “利用将小图标合成一张背景图来减少HTTP请求”,那么,这一篇博文将讲解  “ 将图片转成二进制并生成Base64编码,可以在网页中通过url查看图片”. 一.为何选择将图片转成二进制并生成Base64编码,可以在网页中通过url查看

Linux系统下动态库的生成

Linux系统下动态库的生成 一.简述 Linux下动态库文件的扩展名为 ".so"(Shared Object).按照约定,所有动态库文件名的形式是libname.so(可能在名字中加入版本号).这样,线程函数库被称作libthread.so.静态库的文件名形式是libname.a.共享archive的文件名形式是libname.sa.共享archive只是一种过渡形式,帮助人们从静态库转变到动态库.      小编综合自己学习体会以及网络上较好的内容,以简单的例子介绍动态库文件的生

以ASPX生成静态页

/// <summary> /// 以ASPX生成静态页 /// </summary> /// <param name="path"></param> /// <param name="outpath"></param> public static void CreateHtml(string path, string outpath) { Page page = new Page(); str

Angular动态表单生成(七)

动态表单生成之拖拽生成表单(上) 这个功能就比较吊炸天了,之前的六篇,都是ng-dynamic-forms自带的功能,可能很多的说明官方的文档都已经写了,我只是个搬运工,而在这篇文章中,我将化身一个工程师,来自己创造点东西,让我们一起来期待吧~ 导入相关类库 拖拽功能看似吊炸天,其实HTML5中已经有一套标准来定义它了,所以并没有那么难以实现,这篇关于拖拽的文章写得还可以,大家可以先看看:http://www.zhangxinxu.com/wordpress/2011/02/html5-drag

2017-2018-2 20155228 《信息安全系统设计原理》 动态库的生成和调用

2017-2018-2 20155228 <信息安全系统设计原理> 动态库的生成和调用 不得不说一下关于环境的问题 只要我打一个响指,一半的安装在win7上的VC6.0都会因为兼容性问题直接崩掉 懒得研究怎么解决兼容性的问题了,直接开一个winXP虚拟机完美运行vc6.0,省时省心,岂不美哉 研究大佬的博客的时候 Windows下静态库与动态库的创建与使用 尝试使用.def文件生成动态库并使用隐式链接到工程时,发现这个方法仅适用于动态库所在的工程和调用动态库的工程同时处于一个工作空间 如图所示