代码篇

浏览了很多实例,总找不到既能把HTML保存为PDF,同时实现流抛出的,所以自己琢磨了许久,终于实现了这样两个需求的结合体,下面来贡献一下吧~~

下面我们来选择一个网页打印下,保存为PDF,而且实现流抛出保存,假设我们选择“http://www.cnblogs.com/ITGirl00/

页面截图如:

目标:我们需要做出上面这个效果的PDF。

1.步骤

  • 首先新建一个项目HTMLtoPDFOutPutStream
  • 新建目录output;作为临时输出目录
  • 新建resoure目录,用于保存wkhtmltopdf.exe等各个组件
  • 接着添加一个WebForm1.aspx,在页面上添加一个按钮
  • 最后在按钮的点击事件上写代码

2.按钮的点击处理代码:

  string fileName = Guid.NewGuid().ToString();
            string outputPath = Server.MapPath("output");
            string savepath = string.Format(outputPath + "\\" + fileName + ".pdf");//最终保存
 
            string url = "http://www.cnblogs.com/ITGirl00/";
 
            try
            {
                if (!string.IsNullOrEmpty(url) || !string.IsNullOrEmpty(savepath))
                {
                    Process p = new Process();
                    string resource = HttpContext.Current.Server.MapPath("resoure");
                    string dllstr = string.Format(resource + "\\wkhtmltopdf.exe");
 
                    if (System.IO.File.Exists(dllstr))
                    {
 
 
                        p.StartInfo.FileName = dllstr;
                        p.StartInfo.Arguments = " \"" + url + "\"  \"" + savepath + "\"";
                        p.StartInfo.UseShellExecute = false;
                        p.StartInfo.RedirectStandardInput = true;
                        p.StartInfo.RedirectStandardOutput = true;
                        p.StartInfo.RedirectStandardError = true;
                        p.StartInfo.CreateNoWindow = true;
                        p.Start();
                        p.WaitForExit();
 
                        try
                        {
                            FileStream fs = new FileStream(savepath, FileMode.Open);
                            byte[] file = new byte[fs.Length];
                            fs.Read(file, 0, file.Length);
                            fs.Close();
                            Response.Clear();
                            Response.AddHeader("content-disposition", "attachment; filename=" + fileName + ".pdf");//強制下載
                            Response.ContentType = "application/octet-stream";
                            Response.BinaryWrite(file);
                        }
                        catch (Exception ee)
                        {
 
                            throw new Exception(ee.ToString());
                        }
 
 
                    }
                }
 
 
            }
            catch (Exception ex)
            {
                throw new Exception(ex.ToString());
            }
 
 
3.效果图
 
===小小提示===

(1)使用wkhtmltopdf时,PDF保存的文件夹不能有非Ansi字符,如中文、日文等,且转换gb2312、韩文charset、日文charset等非utf-8\ansi等网页时,会出现乱码

(2)网页上图片无法正确显示是由于图片有链接

最新文章

  1. VS2012 Unit Test —— 我对IdleTest库动的大手术以及对Xml相关操作进行测试的方式
  2. Linux虚拟机中配置JDK环境变量
  3. 项目总结[2]_svg+ajax+webservice+pSpace sdk实现实时数据的web展示
  4. JAVA异常初步
  5. Java Debug调试简单方法--static使用
  6. iOS 杂记
  7. Javascript 基础--JS函数(三)
  8. MySQL中REGEXP正则表达式使用大全
  9. Java设计模式12:常用设计模式之外观模式(结构型模式)
  10. JDK1.5新特性(六)……Generics
  11. 《JavaScript高级程序设计》读书笔记 ---操作符一
  12. 一步步学习EF Core(2.事务与日志)
  13. Ubuntu 18.04 LTS搭建GO语言开发环境
  14. linux一些工具的安装(二)
  15. switch-case和if-else可互换时
  16. pagehelper 使用
  17. Python *Mix_w4
  18. mysql错误集合
  19. 默认的Sublime 3中没有Package Control
  20. CSS3 常用选择器

热门文章

  1. Hash表(hash table ,又名散列表)
  2. C语言编程基础学习字符型数据的ASCII码值为何是负数?
  3. vuejs开发环境搭建
  4. AndroidWear开发之下载SDK[Android W/Android L]
  5. 开源的PaaS方案:在OpenStack上部署CloudFoundry (一)简介
  6. cookie带来的致命危险
  7. Mysql explain执行计划
  8. Webpack基础入门学习笔记
  9. pta 习题集5-6 堆栈操作合法性
  10. Linux系统stat指令用法