动态将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 ...
随机推荐
- Windows -- 从注册表删除IE浏览器加载项
Windows -- 从注册表删除IE浏览器加载项 1. 一部分加载项从注册表以下位置直接删除 2. 一部分扩展项从注册表以下位置直接删除
- ubuntu tree 查看目录结构
首先需要安装tree这个软件 sudo apt install tree tree -L target_dir/ 2代表列举的目录结构深度
- [十二省联考2019]D2T2春节十二响
嘟嘟嘟 这题真没想到这么简单-- 首先有60分大礼:\(O(n ^ 2logn)\)贪心.(我也不知道为啥就是对的) 然后又送15分链:维护两个堆,每次去堆顶的最大值. 这时候得到75分已经很开心了, ...
- 数据结构学习之栈求解n皇后问题
数据结构学习之栈求解n皇后问题 0x1 目的 深入掌握栈应用的算法和设计 0x2 内容 编写一个程序exp3-8.cpp求解n皇后问题. 0x3 问题描述 即在n×n的方格棋盘上,放置n个皇后 ...
- 了解基本的bash shell命令
本节内容主要介绍如何使用bash shell提供的基本命令处理Linux文件和目录: 1.启动shell shell是一个可以交互访问的Linux系统程序,它的运行与普通程序相同,系统启动的shell ...
- 清除 x-code 缓存
https://www.jianshu.com/p/5673d8333544 之前由于经费不足,购置的128的mac,现在发现一不注意盘就满了,悔之晚矣...a).清除 x-code CoreSimu ...
- linux查看目录下各个文件大小的命令
linux查看目录下各个文件大小的命令 由于需要经常查看各个文件的具体大小 ,所以这里记一下. 命令如下: du -h --max-depth=1
- AppiumDesktop录制脚本
AppiumDesktop启动页面: 启动AppiumDesktop以后点击该页面右上角的Start New Session按钮,就会启动一个新的会话窗口(如下图),在这个窗口我们需要配置一些Desi ...
- vue.js实战——.native修饰符
https://blog.csdn.net/qq_29468573/article/details/80771625 除了用v-on在组件上监听自定义事件外,也可以监听DOM事件,这时可以用.nati ...
- 洛谷P3380 二逼平衡树
线段树+平衡树 我!又!被!卡!常!了! 以前的splay偷懒的删除找前驱后继的办法被卡了QAQ 放一个在洛谷开O2才能过的代码..我太菜了.. #include <bits/stdc++.h& ...