动态将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();
动态将ASPX生成HTML网页并将网页导出PDF的更多相关文章
- [转]把动态页面.aspx 生成静态页面.html
本文转自:http://blog.csdn.net/csb5201314/article/details/5391688 如果要把主页Index.aspx 生成静态页面 Index.html后输出会提 ...
- 减少HTTP请求之将图片转成二进制并生成Base64编码,可以在网页中通过url查看图片(大型网站优化技术)
在网站开发过程中,对于页面的加载效率一般都想尽办法求快.那么,怎么让才能更快呢?减少页面请求 是一个优化页面加载速度很好的方法.上一篇博文我们讲解了 “利用将小图标合成一张背景图来减少HTTP请求”, ...
- Java中动态代理技术生成的类与原始类的区别 (转)
用动态代理的时候,对它新生成的类长什么样子感到好奇.有幸通过一些资料消除了心里的疑惑. 平时工作使用的Spring框架里面有一个AOP(面向切面)的机制,只知道它是把类重新生成了一遍,在切面上加上了后 ...
- Java中动态代理技术生成的类与原始类的区别
用动态代理的时候,对它新生成的类长什么样子感到好奇.有幸通过一些资料消除了心里的疑惑. 平时工作使用的Spring框架里面有一个AOP(面向切面)的机制,只知道它是把类重新生成了一遍,在切面上加上了后 ...
- Angular动态表单生成(八)
动态表单生成之拖拽生成表单(下) 我们的动态表单,最终要实现的效果与Form.io的在线生成表单的效果类似,可以参考它的demo地址:https://codepen.io/travist/full/x ...
- Angular动态表单生成(七)
动态表单生成之拖拽生成表单(上) 这个功能就比较吊炸天了,之前的六篇,都是ng-dynamic-forms自带的功能,可能很多的说明官方的文档都已经写了,我只是个搬运工,而在这篇文章中,我将化身一个工 ...
- Angular动态表单生成(五)
动态表单生成之布局 到上面的篇章为止,我们已经把表单比较完整的生成出来了,也实现了一些验证功能,可以说,我们截止这里,就已经可以满足我们的大部分表单生成需求了~ 但是: 目前来说,我们对于表单的布局只 ...
- 自动化测试尝试 动态Linq表达式生成 ftp上传
自动化测试尝试 1. Selenium IDE Selenium IDE is a Chrome and Firefox plugin which records and plays back u ...
- Angular动态表单生成(一)
好久不写博客了,手都生了,趁着最近老大让我研究动态表单生成的时机,撸一发博客~~ 开源项目比较 老大丢给我了两个比较不错的开源的动态表单生成工具,这两个项目在github上的star数量基本持平: h ...
随机推荐
- WIN10REALTEL高清音频管理器如何调音?调音无效怎么办?
从win7升级到win10,发现realtel高清音频管理器不能调节高级音响效果了,即使设置也没用. 经过研究后发现是驱动 问题,不是驱动 没有安装,而是可能 没有安装完整,于是下载了驱动精灵,重新安 ...
- ubuntu18.04从零开始配置环境(jdk+tomcat+idea)到使用idea开发web应用和servlet
昨天吃了亏,搞了一下午才把环境配置好,故此将整个过程记录一下以防日后需要. 注意:因为我的博客模块的原因,所以我把图片压缩了一些,如果有看不清的, 可以 右键图片->在新标签页打开图片 目录: ...
- Elastic Stack-Elasticsearch使用介绍(四)
一.前言 上一篇说了一下查询和存储机制,接下来我们主要来说一下排序.聚合.分页: 写完文章以后发现之前文章没有介绍Coordinating Node,这个地方补充说明下Coordinating ...
- Kubernetes 网络排错指南
本文介绍各种常见的网络问题以及排错方法,包括 Pod 访问异常.Service 访问异常以及网络安全策略异常等. 说到 Kubernetes 的网络,其实无非就是以下三种情况之一 Pod 访问容器外部 ...
- FLOAT 和 DOUBLE区别
以下是 FLOAT 和 DOUBLE 的区别: float : 单精度浮点数 double : 双精度浮点数 ·浮点数以 8 位精度存储在 FLOAT 中,并且有四个字节. ·浮点数存储在 DOUBL ...
- 菜鸟学IT之四则运算升级版
菜鸟学IT之四则运算升级版 本次作业要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2213 团队代码github远程仓库的 ...
- JVN的理解
写的很不错,通俗易懂:http://www.cnblogs.com/leefreeman/p/7344460.html
- Python百题计划
一.基础篇 想要像类似执行shell脚本一样执行Python脚本,需要在py文件开头加上什么?KEY:#!/usr/bin/env python Python解释器在加载 .py 文件中的代码时,会对 ...
- Acdream1201 SuSu's Power
题目:SuSu's Power 链接:http://acdream.info/problem?pid=1201 题意:一个人站在x轴原点上,初始方向向x轴正方向,由一个字符串来控制其运动,字符串由A. ...
- spring 方法验证参数
1:实体使用 @Valid 使用 validation 类注解 2:String 使用 controller 添加 @Validated @NotBlank(message = "i ...