c#中将HTML文件转换成PDF文件
一、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文件相关推荐
- 怎么把图片文件转换成PDF文件
除了office文件外,我们最常用的就是PDF文件了.因为PDF文件格式可以将文字.字型.格式.颜色及独立于 设备和分辨率的图形图像等封装在一个文件中.该格式文件还可以包含超文本链接.声音和动态影像等 ...
- 如何将Ai文件转换成PDF文件
要将Ai文件转换成PDF文件,请按照以下步骤操作: 1. 打开客汇宝网站软件并打开要转换的文件. 2. 点击"文件"菜单并选择"另存为". 3. 在" ...
- java编程将HTML文件转换成PDF文件
网上有好几种方法可以将将HTML文件转换成PDF文件但是有些对HTML文件格式要求比较严格,稍微错了一些就不能生成我们所要的PDF文件,这里我推荐一个 PD4ML,它可以解决HTML文件格式不正确的问 ...
- CAJ文件转换成PDF文件:教你如何实现文件格式转换
CAJ文件是中国知网常用的一种文献格式,但有时候我们需要将其转换成PDF格式,以方便阅读.打印.分享等用途.本文将教你如何实现CAJ文件转换成PDF文件. 方法一.使用CAJViewer软件 步骤1: ...
- 把jpg文件转换成pdf文件
把jpg文件转换成pdf文件 生涯中,人人常常会拍摄一些照片用来忖量,可是岁月长了,时时会由于照片多而杂乱而懒于翻看,那末你是否思虑做一个电子相册,或制造一本PDF花样的书本来翻看呢?业余的这款JPG ...
- 怎么把jpg文件转换成pdf文件
怎么把jpg文件转换成pdf文件 PDF转换成Word文档对我们来讲并不生僻,假设文字是由一张张图片构成的,碰着这种状况怎么办,怎么将JPG转换成PDF?菜鸟损耗了不少工夫和肉体才找到一款好用的JPG ...
- 怎么将知网下载的CAJ文件转换成PDF文件
我们熟知的CAJ文件必须使用中国知网的CAJ Viewer才能打开,但是如果想以PDF的格式查看论文那就需要将CAJ文件转换为pdf格式,那么怎么CAJ文件转换成PDF文件呢? 转换方法其实很简单,这 ...
- 怎么把caj文件转换成pdf文件
我们在网上下载素材的时候,就有很大一部分是caj格式的文件,我们又想将caj文件整理成pdf文件,那么怎么把caj文件转换成pdf文件呢? 其实转换很简单,只需要一个CAJ转换器就能实现,下面介绍ca ...
- Java使用aspse实现Excel文件转换成PDF文件
使用Java代码把Excel文件转换成PDF文件 需要引用aspose包,引入操作我写了一个博客,地址如下 https://blog.csdn.net/weixin_46713508/article/ ...
- 如何将CAJ文件转换成PDF文件?教你一招搞定
CAJ文件是中国知网的专用格式,主要用于存储学术文献等信息.由于这种格式并非常见格式,很多用户不知道如何打开或转换.如果您需要将CAJ文件转换成PDF文件,不必担心,您可以使用记灵在线工具来解决这个问 ...
最新文章
- python英语翻译-python制作英语翻译小工具
- 实践自定义UI—RLF...(RelativeLayout LinearLayout FrameLayout....)
- JavaScript 项目构建工具 Grunt 实践:安装和创建项目框架
- Android笔记之自定义Editext
- linux下jdk源码安装,Linux JDK 源码安装
- XML编程-DOM4J
- 重磅!GitHub发布年度机器学习榜:TensorFlow最火,PyTorch消失!
- mac os android连接wifi密码,Mac使用小技巧:找回WiFi密码
- 每当再右侧的选择框中选中一个人的名字时,便在左侧的文本区中显示出此人的情况介绍,按close按钮时结束程序的运行
- 20162302 第七周作业
- [转载] Python3 字典 values() 方法
- Django 【第一篇】基础
- Python pycurl使用
- 云南省工信厅洪正华一行莅临红谷滩区·高通中国·影创联合创新中心考察调研
- 中国 vs 卡塔尔 一场幸运的比赛
- 使用 Sprinkles 构建您自己的类型安全版本的 Tailwind CSS
- npm run serve stage1@0.1.0 serve vue-cli-service serve node:internal/modules/cjs/loader:936
- 什么是运动模糊(Motion Blur)
- php夜间,php实现自动开启/关闭夜间模式
- win10系统怎么创建虚拟网卡?
热门文章
- 每个tabpage中都有一个dategridview_其实每个人都是一个孩子,仅此而已
- 虚拟机vcenter如何增加磁盘_如何在家搭建一套自己的实验平台(10)iSCSI 共享存储...
- mysql 表 地图_报表中的地图怎么做?
- python dlib caffe人脸相似度_基于深度学习的人脸识别系统(Caffe+OpenCV+Dlib)【一】如何配置caffe属性表...
- chrome 69 免安装_ElasticSearch安装elasticsearch-head插件
- Keil升级了,Keil Studio 来了!
- 专科生,还有未来吗?
- 基于FPGA多通道数据采集系统verilog设计
- php yield mysql_PHP 5.5 新特性关键字 yield
- Java中加减乘除怎样写代码,【求助】怎样实现加减乘除 代码如下