本篇作为一个备忘,记录一下html转pdf中遇到的问题。

没有具体做这个东西的时候不知道,网络上能将html转换成pdf的资源并不太多,使用上有很多都存在一些问题。能完美将一个站点中的页面(这里说一个站点中的页面是指非特意制作只包含简单html元素的网页)转换成pdf的很多都是收费的项目。

这里不讨论itextsharp,因为我们指明了源是html页面,itextsharp对html的支持比较鸡肋,他的灵活体现在手动绘制pdf上。

我们的系统中原本使用了Pechkin这款开源产品,这款产品使用简单,而且转换出来的pdf与原页面看不出来差别。但Pechkin依赖于很多32位dll,这样应用程序必须运行在32位进程中。

为了使程序运行在64位进程中,尝试了很多,最后发现这个项目:https://github.com/vilppu/OpenHtmlToPdf

OpenHtmlToPdf与Pechkin的内部原理一样,都是封装了wkHtmlToPdf来实现的转换。

wkHtmlToPdf内部包含了一个浏览器引擎:Webkit,所以它能对html页面的还原比较真实,官方上看wkHtmlToPdf还曾发布过使用其他浏览器引擎的分支项目,有兴趣的话也可以去尝试一下。

OpenHtmlToPdf内部包含了32位和64位wkHtmlToPdf两个应用程序,使用命令的方式去调用不同的exe,以此来实现在两种进程中兼容。

其还提供了丰富的调用参数可供使用:http://wkhtmltopdf.org/libwkhtmltox/pagesettings.html

当然,因为wkhtmltopdf本身就是比较老的项目了,这里面有些参数我尝试后并没有得到什么效果。

使用示例:

using (WebClient wc = new WebClient())
{
wc.Encoding = Encoding.UTF8;
string html = wc.DownloadString(url); var document = Pdf.From(html)
.OfSize(OpenHtmlToPdf.PaperSize.LetterRotated)
.WithGlobalSetting("margin.top", "0.4cm");
if (IntPtr.Size == )
{
document = document.WithObjectSetting("load.zoomFactor", "1.5");
}
var result = document.Content(); HttpContext.Current.Response.Clear();
HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=PDF" + DateTime.Now.ToString("yyyyMMddhhmmss") + ".pdf");
HttpContext.Current.Response.ContentType = "application/octet-stream";
HttpContext.Current.Response.BinaryWrite(result);
HttpContext.Current.Response.End();
}

这个东西使用中也遇到一些问题。

看代码可以发现在32位进程的时候,我对文档做了特殊处理,使用load.zoomFactor做了放大。

因为使用中发现其在32位中生成的pdf比64位中生成的pdf小了一些,我并没能找到和直接解决这个诡异的问题,最后找了这个放大的参数(这个应该是对浏览器引擎操作的参数),使其在两种环境中生成的pdf尺寸基本一致。。

当然,其实我们一般用不到一个web程序支持两种cpu进程,这只是为了在开发调试阶段使不同的开发者环境呈现的内容一致。

关于html转pdf的更多相关文章

  1. C#给PDF文档添加文本和图片页眉

    页眉常用于显示文档的附加信息,我们可以在页眉中插入文本或者图形,例如,页码.日期.公司徽标.文档标题.文件名或作者名等等.那么我们如何以编程的方式添加页眉呢?今天,这篇文章向大家分享如何使用了免费组件 ...

  2. 在线浏览PDF之PDF.JS (附demo)

    平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html#skill 下载地址:http://mozilla.gith ...

  3. .NET平台开源项目速览(16)C#写PDF文件类库PDF File Writer介绍

    1年前,我在文章:这些.NET开源项目你知道吗?.NET平台开源文档与报表处理组件集合(三)中(第9个项目),给大家推荐了一个开源免费的PDF读写组件 PDFSharp,PDFSharp我2年前就看过 ...

  4. C#如何在PDF文件添加图片印章

    文档中添加印章可以起一定的作用,比如,防止文件随意被使用,或者确保文档内容的安全性和权威性.C#添加图片印章其实也有很多实现方法,这里我使用的是免费的第三方软件Free Spire.PDF,向大家阐述 ...

  5. C#中如何创建PDF网格并插入图片

    这篇文章我将向大家演示如何以编程的方式在PDF文档中创建一个网格,并将图片插入特定的网格中. 网上有一些类似的解决方法,在这里我选择了一个免费版的PDF组件.安装控件后,创建新项目,添加安装目录下的d ...

  6. 在Asp.Net中操作PDF – iTextSharp - 使用表格

    使用Asp.Net生成PDF最常用的元素应该是表格,表格可以帮助比如订单或者发票类型的文档更加格式化和美观.本篇文章并不会深入探讨表格,仅仅是提供一个使用iTextSharp生成表格的方法介绍 使用i ...

  7. 开源免费且稳定实用的.NET PDF打印组件itextSharp(.NET组件介绍之八)

    在这个.NET组件的介绍系列中,受到了很多园友的支持,一些园友(如:数据之巅. [秦时明月]等等这些大神 )也给我提出了对应的建议,我正在努力去改正,有不足之处还望大家多多包涵.在传播一些简单的知识的 ...

  8. ASP.Net MVC——使用 ITextSharp 完美解决HTML转PDF(中文也可以)

    前言: 最近在做老师交代的一个在线写实验报告的小项目中,有这么个需求:把学生提交的实验报告(HTML形式)直接转成PDF,方便下载和打印. 以前都是直接用rdlc报表实现的,可这次牵扯到图片,并且更为 ...

  9. 在禅道中实现WORD等OFFICE文档转换为PDF进行在线浏览

    条件: 安装好禅道的服务器 能直接浏览PDF的浏览器(或通过 安装插件实现 ) 文档转换服务程序(建议部署在另一台服务器上)     实现 原理: 修改禅道的文件预览功能(OFFICE文档其使用的是下 ...

  10. 一年之计在于春,2015开篇:PDF.NET SOD Ver 5.1完全开源

    前言: 自从我2014年下半年到现在的某电商公司工作后,工作太忙,一直没有写过一篇博客,甚至连14年股票市场的牛市都错过了,现在马上要过年了,而今天又是立春节气,如果再不动手,那么明年这个无春的年,也 ...

随机推荐

  1. Programming pearls 编程珠玑的题目

    Programming pearls 编程珠玑的题目 这段时间有空都在看编程珠玑,很经典的一本书,一边看一边用 python 做上面的题目,我做的都放到 github 上了 https://githu ...

  2. Go并发控制之sync.WaitGroup

    WaitGroup 会将main goroutine阻塞直到所有的goroutine运行结束,从而达到并发控制的目的.使用方法非常简单,真心佩服创造Golang的大师们! type WaitGroup ...

  3. 也谈微信小程序

      小程序是一种不需要下载安装即可使用的应用,它实现了应用"触手可及"的梦想,用户扫一扫或者搜一下即可打开应用.也体现了"用完即走"的理念,用户不关心是否安装太 ...

  4. shell脚本一

    在一些复杂的Linux维护工作中,大量重复的输入和交互操作不但费时费力,容易出错.这时候就需要用到脚本. 编写脚本的好处:  批量的处理,自动化的完成维护,减轻管理员的负担. linux的shell脚 ...

  5. IOS在线安装App

    在越狱设备上可以安装,如果设备不越狱也想安装,就要企业发布权限了,可惜我没有,所以不能测试了! 1.创建ipa及plist文件: XCode菜单栏->Product->Archive-&g ...

  6. c语言的学习秘籍之链表

    刚翻出来的作品,有点低级,但希望能起到作用: #include<stdio.h>#include<stdlib.h>#include<time.h>#include ...

  7. Windows Phone 十二、设计器同步

    在设计阶段为页面添加数据源 Blend或者VS的可视化设计器会跑我们的代码,然后来显示出来,当我们Build之后,设计器会进入页面的构造函数,调用InitializeComponent();方法来将U ...

  8. spring cloud 学习研究- spring-cloud-microservice-example

    spring cloud + docker 微服务架构 http://www.open-open.com/lib/view/open1437363835818.html 实例项目 https://gi ...

  9. SSM——(二):easyUI的CRUD

    1.在WebContent下新建admin目录,添加index.html(用来显示user表的CRUD): 总结: 1.datagrid接收的必须是json数据: 2.使用分页插件会自动向后台传递St ...

  10. SVN在eclipse的整合应用

    目前很多的Java.Flex.Android开发人员是用eclipse作为开发工具的,本文主要介绍SVN在eclipse平台中的整合应用. 我的eclipse版本是Version: 3.4.2.本身没 ...