一、Pechkin:html->pdf

1.WinForm中转换为PDF

  a.在项目添加引用,引用 -> 管理NuGet程序包

b.在导出PDF按钮中添加方法

 

 1 SynchronizedPechkin sc = new SynchronizedPechkin(new GlobalConfig()2                 .SetMargins(new Margins() { Left = 10, Right = 10, Top = 0, Bottom = 0 }) //设置边距3                 .SetPaperOrientation(false) //设置纸张方向为横向4                 .SetPaperSize(ConvertToHundredthsInch(210), ConvertToHundredthsInch(297))); //设置纸张为A4纸大小5 6             byte[] buf = sc.Convert(new ObjectConfig(), getWebContent());7 8             if (buf == null)9             {
10                 MessageBox.Show("Error converting!");
11                 return;
12             }
13
14             File.WriteAllBytes(@"d:\google-news123.pdf", buf);
15
16             try
17             {
18                 string fn = Path.GetTempFileName() + ".pdf";
19                 FileStream fs = new FileStream(fn, FileMode.Create);
20                 fs.Write(buf, 0, buf.Length);
21                 fs.Close();
22
23                 //MessageBox.Show("操作成功,文件已保存至F盘下", "提示");
24
25                 Process myProcess = new Process();
26                 myProcess.StartInfo.FileName = fn;
27                 myProcess.Start();
28
29                 //SaveFileDialog();
30             }
31             catch { }

View Code

相关方法

 

 1 private int ConvertToHundredthsInch(int millimeter)2         {3             return (int)((millimeter * 10.0) / 2.54);4         }5 6         /// <summary>7         /// 获取网站内容,包含了 HTML+CSS+JS8         /// </summary>9         /// <returns>String返回网页信息</returns>
10         public string getWebContent()
11         {
12             try
13             {
14                 WebClient MyWebClient = new WebClient();
15                 MyWebClient.Credentials = CredentialCache.DefaultCredentials;
16                 //获取或设置用于向Internet资源的请求进行身份验证的网络凭据
17                 Byte[] pageData = MyWebClient.DownloadData("http://a4.keyue.com.cn/out/fwd/2fenhd/yuludan_new.asp?nstr=jwmlYCBYPDcHJlX2VudHJ5X2lkPTIyMjkyMDE1MDc5MTk1MjcyOSZ0b2lwPTExNA==");
18                 //从指定网站下载数据
19                 string pageHtml = Encoding.UTF8.GetString(pageData);
20                 //如果获取网站页面采用的是GB2312,则使用这句
21                 bool isBool = isMessyCode(pageHtml);//判断使用哪种编码 读取网页信息
22                 if (!isBool)
23                 {
24                     string pageHtml1 = Encoding.UTF8.GetString(pageData);
25                     pageHtml = pageHtml1;
26                 }
27                 else
28                 {
29                     string pageHtml2 = Encoding.Default.GetString(pageData);
30                     pageHtml = pageHtml2;
31                 }
32                 return pageHtml;
33             }
34
35             catch (WebException webEx)
36             {
37                 Console.WriteLine(webEx.Message.ToString());
38                 return webEx.Message;
39             }
40         }
41
42         /// <summary>
43         /// 判断是否有乱码
44         /// </summary>
45         /// <param name="txt"></param>
46         /// <returns></returns>
47         public bool isMessyCode(string txt)
48         {
49             var bytes = Encoding.UTF8.GetBytes(txt);            //239 191 189
50             for (var i = 0; i < bytes.Length; i++)
51             {
52                 if (i < bytes.Length - 3)
53                     if (bytes[i] == 239 && bytes[i + 1] == 191 && bytes[i + 2] == 189)
54                     {
55                         return true;
56                     }
57             }
58             return false;
59         }

相关方法

优缺点

  1.只能保存到制定的目录中,并且直接打开文件

  2.网页中的图片导不出来

  3.可能会出现乱码

  4.生成项目的时候需要把相应的DLL拷贝进去,不然不能生成

这是另外一种方法:http://www.cnblogs.com/lsgsanxiao/p/4878077.html

2.WEB网站中转换为PDF

  项目Demo http://pan.baidu.com/s/1gfhRR8n

  a.项目相关引用与上面相同

  b.网站中采用JS调用一般处理程序的方式

 

1 function createPdf() {
2             window.open("CreatePdf.ashx?html=222222222222233324243");
3         }

View Code

 

  1 using System;2 using System.Drawing.Printing;3 using System.IO;4 using System.Net;5 using System.Text;6 using System.Web;7 using Pechkin;8 using Pechkin.Synchronized;9 10 namespace WebApplication311 {12     /// <summary>13     /// CreatePdf 的摘要说明14     /// </summary>15     public class CreatePdf : IHttpHandler16     {17 18         public void ProcessRequest(HttpContext context)19         {20             string htmlFile = context.Request["html"];21 22             string html = getWebContent();23             SynchronizedPechkin sc = new SynchronizedPechkin(new GlobalConfig()24                                     .SetMargins(new Margins() { Left = 0, Right = 0, Top = 0, Bottom = 0 }) //设置边距25                                     .SetPaperOrientation(false) //设置纸张方向为横向26                                     .SetPaperSize(ConvertToHundredthsInch(210), ConvertToHundredthsInch(297))); //设置纸张大小50mm * 100mm27 28             byte[] buf = sc.Convert(new ObjectConfig(), html);29 30             if (buf == null)31             {32                 context.Response.ContentType = "text/plain";33                 context.Response.Write("Error converting!");34             }35 36             try37             {38                 context.Response.Clear();39 40 41                 //方式1:提示浏览器下载pdf   42                 context.Response.AddHeader("content-disposition", "attachment;filename=" + htmlFile + ".pdf");43                 context.Response.ContentType = "application/octet-stream";44                 context.Response.BinaryWrite(buf);45 46                 //方式2:直接在浏览器打开pdf47                 //context.Response.ContentType = "application/pdf";48                 //context.Response.OutputStream.Write(buf, 0, buf.Length);49 50                 context.Response.End();51 52             }53             catch (Exception e)54             {55                 context.Response.ContentType = "text/plain";56                 context.Response.Write(e.Message);57             }58         }59 60         public bool IsReusable61         {62             get63             {64                 return false;65             }66         }67 68         private int ConvertToHundredthsInch(int millimeter)69         {70             return (int)((millimeter * 10.0) / 2.54);71         }72 73         /// <summary>74         /// 获取网站内容,包含了 HTML+CSS+JS75         /// </summary>76         /// <returns>String返回网页信息</returns>77         public string getWebContent()78         {79             try80             {81                 WebClient MyWebClient = new WebClient();82                 MyWebClient.Credentials = CredentialCache.DefaultCredentials;83                 //获取或设置用于向Internet资源的请求进行身份验证的网络凭据84                 Byte[] pageData = MyWebClient.DownloadData("http://a4.keyue.com.cn/out/fwd/2fenhd/yuludan.asp?nstr=AAfFJb_SVvcHJlX2VudHJ5X2lkPTIyMzEyMDE1MDgxMTY0NDUzOSZ0b2lwPTExNA==");85                 //从指定网站下载数据86                 string pageHtml = Encoding.UTF8.GetString(pageData);87                 //如果获取网站页面采用的是GB2312,则使用这句       88                 bool isBool = isMessyCode(pageHtml);//判断使用哪种编码 读取网页信息89                 if (!isBool)90                 {91                     string pageHtml1 = Encoding.UTF8.GetString(pageData);92                     pageHtml = pageHtml1;93                 }94                 else95                 {96                     string pageHtml2 = Encoding.Default.GetString(pageData);97                     pageHtml = pageHtml2;98                 }99                 return pageHtml;
100             }
101
102             catch (WebException webEx)
103             {
104                 Console.WriteLine(webEx.Message.ToString());
105                 return webEx.Message;
106             }
107         }
108
109         /// <summary>
110         /// 判断是否有乱码
111         /// </summary>
112         /// <param name="txt"></param>
113         /// <returns></returns>
114         public bool isMessyCode(string txt)
115         {
116             var bytes = Encoding.UTF8.GetBytes(txt);            //239 191 189
117             for (var i = 0; i < bytes.Length; i++)
118             {
119                 if (i < bytes.Length - 3)
120                     if (bytes[i] == 239 && bytes[i + 1] == 191 && bytes[i + 2] == 189)
121                     {
122                         return true;
123                     }
124             }
125             return false;
126         }
127     }
128 }

//***************************

Pechkin开源组件使用wkhtmlbox,可以解析CSS样式,将网页转换为PDF文件,支持URL,或者HTML字符串。

在 Nuget 管理器中搜索“Pechkin”,请选择 CPechkin For .Net20+,这个组件是作者在 Pechkin 基础上修改的,剔除了 Common.Loging 依赖,描述中说项目必须是x86编译,但我发现,设置成 Any CPU也可以,但是如果是Web项目,部署到IIS后,应用程序池高级设置中必须选择启用32位应用程序,否则运行会报错。

包加载完毕后,会在项目根目录下放置几个DLL,这些是 Pechkin 依赖的,如果想删除,请先将这几个DLL拷贝到bin下

编译后,BIN下面有7个相关的DLL,这就是 Pechkin 的全部

调用代码很简单

SynchronizedPechkin sc = new SynchronizedPechkin(new GlobalConfig()
    .SetMargins(new Margins() { Left = 50, Right = 50, Top = 50, Bottom = 50 }) //设置边距
    .SetPaperOrientation(false) //设置纸张方向为横向
    .SetPaperSize(ConvertToHundredthsInch(210), ConvertToHundredthsInch(297)) //设置纸张大小210mm * 297mm
);
 
byte[] buf = sc.Convert(new ObjectConfig(), html);
 
if (buf == null)
{
    MessageBox.Show("Error converting!");
}
 
try
{
    string fn = "D:\XXX.pdf";
    FileStream fs = new FileStream(fn, FileMode.Create);
    fs.Write(buf, 0, buf.Length);
    fs.Close();
 
    Process myProcess = new Process();
    myProcess.StartInfo.FileName = fn;
    myProcess.Start();
}
catch (Exception ex)
{
    MessageBox.Show($"PDF {ex.Message}");
}
生成PDF

c#中将HTML文件转换成PDF文件相关推荐

  1. 怎么把图片文件转换成PDF文件

    除了office文件外,我们最常用的就是PDF文件了.因为PDF文件格式可以将文字.字型.格式.颜色及独立于 设备和分辨率的图形图像等封装在一个文件中.该格式文件还可以包含超文本链接.声音和动态影像等 ...

  2. 如何将Ai文件转换成PDF文件

    要将Ai文件转换成PDF文件,请按照以下步骤操作: 1. 打开客汇宝网站软件并打开要转换的文件. 2. 点击"文件"菜单并选择"另存为". 3. 在" ...

  3. java编程将HTML文件转换成PDF文件

    网上有好几种方法可以将将HTML文件转换成PDF文件但是有些对HTML文件格式要求比较严格,稍微错了一些就不能生成我们所要的PDF文件,这里我推荐一个 PD4ML,它可以解决HTML文件格式不正确的问 ...

  4. CAJ文件转换成PDF文件:教你如何实现文件格式转换

    CAJ文件是中国知网常用的一种文献格式,但有时候我们需要将其转换成PDF格式,以方便阅读.打印.分享等用途.本文将教你如何实现CAJ文件转换成PDF文件. 方法一.使用CAJViewer软件 步骤1: ...

  5. 把jpg文件转换成pdf文件

    把jpg文件转换成pdf文件 生涯中,人人常常会拍摄一些照片用来忖量,可是岁月长了,时时会由于照片多而杂乱而懒于翻看,那末你是否思虑做一个电子相册,或制造一本PDF花样的书本来翻看呢?业余的这款JPG ...

  6. 怎么把jpg文件转换成pdf文件

    怎么把jpg文件转换成pdf文件 PDF转换成Word文档对我们来讲并不生僻,假设文字是由一张张图片构成的,碰着这种状况怎么办,怎么将JPG转换成PDF?菜鸟损耗了不少工夫和肉体才找到一款好用的JPG ...

  7. 怎么将知网下载的CAJ文件转换成PDF文件

    我们熟知的CAJ文件必须使用中国知网的CAJ Viewer才能打开,但是如果想以PDF的格式查看论文那就需要将CAJ文件转换为pdf格式,那么怎么CAJ文件转换成PDF文件呢? 转换方法其实很简单,这 ...

  8. 怎么把caj文件转换成pdf文件

    我们在网上下载素材的时候,就有很大一部分是caj格式的文件,我们又想将caj文件整理成pdf文件,那么怎么把caj文件转换成pdf文件呢? 其实转换很简单,只需要一个CAJ转换器就能实现,下面介绍ca ...

  9. Java使用aspse实现Excel文件转换成PDF文件

    使用Java代码把Excel文件转换成PDF文件 需要引用aspose包,引入操作我写了一个博客,地址如下 https://blog.csdn.net/weixin_46713508/article/ ...

  10. 如何将CAJ文件转换成PDF文件?教你一招搞定

    CAJ文件是中国知网的专用格式,主要用于存储学术文献等信息.由于这种格式并非常见格式,很多用户不知道如何打开或转换.如果您需要将CAJ文件转换成PDF文件,不必担心,您可以使用记灵在线工具来解决这个问 ...

最新文章

  1. python英语翻译-python制作英语翻译小工具
  2. 实践自定义UI—RLF...(RelativeLayout LinearLayout FrameLayout....)
  3. JavaScript 项目构建工具 Grunt 实践:安装和创建项目框架
  4. Android笔记之自定义Editext
  5. linux下jdk源码安装,Linux JDK 源码安装
  6. XML编程-DOM4J
  7. 重磅!GitHub发布年度机器学习榜:TensorFlow最火,PyTorch消失!
  8. mac os android连接wifi密码,Mac使用小技巧:找回WiFi密码
  9. 每当再右侧的选择框中选中一个人的名字时,便在左侧的文本区中显示出此人的情况介绍,按close按钮时结束程序的运行
  10. 20162302 第七周作业
  11. [转载] Python3 字典 values() 方法
  12. Django 【第一篇】基础
  13. Python pycurl使用
  14. 云南省工信厅洪正华一行莅临红谷滩区·高通中国·影创联合创新中心考察调研
  15. 中国 vs 卡塔尔 一场幸运的比赛
  16. 使用 Sprinkles 构建您自己的类型安全版本的 Tailwind CSS
  17. npm run serve stage1@0.1.0 serve vue-cli-service serve node:internal/modules/cjs/loader:936
  18. 什么是运动模糊(Motion Blur)
  19. php夜间,php实现自动开启/关闭夜间模式
  20. win10系统怎么创建虚拟网卡?

热门文章

  1. 每个tabpage中都有一个dategridview_其实每个人都是一个孩子,仅此而已
  2. 虚拟机vcenter如何增加磁盘_如何在家搭建一套自己的实验平台(10)iSCSI 共享存储...
  3. mysql 表 地图_报表中的地图怎么做?
  4. python dlib caffe人脸相似度_基于深度学习的人脸识别系统(Caffe+OpenCV+Dlib)【一】如何配置caffe属性表...
  5. chrome 69 免安装_ElasticSearch安装elasticsearch-head插件
  6. Keil升级了,Keil Studio 来了!
  7. 专科生,还有未来吗?
  8. 基于FPGA多通道数据采集系统verilog设计
  9. php yield mysql_PHP 5.5 新特性关键字 yield
  10. Java中加减乘除怎样写代码,【求助】怎样实现加减乘除 代码如下