里讲一种实现起来比较简单的html转pdf下载的实现。
html2canvas jspdf
通过html2canvas,我们可以将指定的一个dom元素,渲染到canvas中,然后从canva中获得该图片,并将图片通过jspdf来生成。
function createPdf (selector,pagesize,direction,title){
var key = pagesize +''+direction;
var settings = {
'00' : {
pdf : {orientation : 'portrait',format : 'a4',unit : 'px'},
width : 448,
height : 632.5
},
'01' : {
pdf : {orientation : 'landscape',format : 'a4',unit : 'px'},
width : 632.5,
height : 448
},
'10' : {
pdf : {orientation : 'portrait',format : 'a3',unit : 'px'},
width : 632.5,
height : 894.2
},
'11' : {
pdf : {orientation : 'landscape',format : 'a3',unit : 'px'},
width : 894.2,
height : 632.5
}
};
var set = settings[key];
var doc = new jsPDF(set.pdf);
var arr = [];//根据顺序保存
var $arr = $(selector);
function tempCreate(){
if($arr.length == 0){//没有啦
//执行生成
tempPdf();
}else{
var $dom = $arr.splice(0,1);
html2canvas($dom[0]).then(canvas => {
var dataurl = canvas.toDataURL('image/png');
arr.push(dataurl);
tempCreate();
});
}
}
function tempPdf(){
arr.forEach((item,i)=>{
if(i !== 0){
doc.addPage();
}
doc.addImage(item,'png',-1,-1,set.width,set.height);//根据不同的宽高写入
})
//根据当前的作业名称
doc.save(title+'.pdf');
}
tempCreate();
}
需要指定容器(依赖jquery),然后指定纸张A4或 A3,以及横纵向。
//调用
createPdf('.single-page',0,0,'test')
当然,如果是数据量很大的话,就不建议在前台生成了,最好还是放在后端去做。个人测试过,做A4的图片生成PDF,当数量大约在100左右的时候,浏览器就崩溃了,如果只是几页的数据的话,这个方式还是很方便的。
Ps:浏览器要是现代浏览器哈。
html2canvas : http://html2canvas.hertzen.com/ jspdf :https://github.com/MrRio/jsPDF
载PDF或excel有很多方法,Excel很简单,但是PDF通常在CSS和其他很多方面有问题。我对此做了更多的研究,发现使用CutyCapt.exe将网页捕获为PDF或图像更方便。
CutyCapt是一个小型的跨平台命令行工具,用于捕获WebKit将web页面呈现为各种矢量和位图格式的方法,包括SVG、PDF、PS、PNG、JPEG、TIFF、GIF和BMP。请参阅IECapt以获取基于Internet Explorer的类似工具。
要求
实现
string filename = Guid.NewGuid() + ".pdf"; //unique file name
// url of the pdf file name
string url = “http://example.org” +"/CutyCapt/" + filename;
//location of Executable
string cutycaptLocation = "D:\\CutyCapt";
a. CreateNoWindow
b. WorkingDirectory
c. FileName
d. Arguments
- 需要转换成PDF格式的网页链接
- 目标文件夹
e. UseShellExecute
// Command for execution
System.Diagnostics.ProcessStartInfo pi = new System.Diagnostics.ProcessStartInfo();
pi.CreateNoWindow = false;
pi.WorkingDirectory = cutycaptLocation;
pi.FileName = cutycaptLocation + "\\CutyCapt.exe";
pi.Arguments = "--url=" + link + " --out-format=pdf -out=" + System.IO.Path.GetFullPath(Server.MapPath("~/CutyCapt")) + "\\" + filename;
pi.UseShellExecute = false;
try {
// Start the process with the info we specified.
// Call WaitForExit and then the using statement will close.
using(System.Diagnostics.Process exeProcess = System.Diagnostics.Process.Start(pi)) {
exeProcess.WaitForExit();
}
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
Response.Redirect(url);
何下载网页图片
用过天猫,图虫的人都知道,网页中的图片是无法下载的。即使你打开网页,进入图片,长按是没法显示“保存图片”一类的提示。
图虫网页也一样,长按图片没有任何显示
为什么会出现这种情况,我搜索相关资料得知,原来是网站为了防止盗图或者保护版权就在网页中嵌入了一个名为“ javascript”的脚本。这种脚本能禁止读者在平板电脑、pc、手机端预览图片的时候禁止保存,无法下载到本地。
怎么解决这个问题?搜索了很多资料,像审核元素、qq截图、 DownloadbyNetAnts、 WebCatcher。基本都是pc端用的,有的软件这是针对电脑开发。现在这个时代,手机能用的就不需要电脑,对于普通用户来说根本没有用,或者说不好用难以上手。
方法还是有的,电脑上都是使用360浏览器和谷歌chrome浏览器可以解决网页不能下载图片的问题。但是360和chrome占用内存太大,不推荐使用。这里推荐比较实在的浏览器…………qq浏览器国际版,手机乐园和酷安都有。
依次下载qq浏览器play版和uc浏览器,之所以推荐这两个浏览器是因为uc最好用、最顺手。qq浏览器国际版运行速度快,网速最快。两者配合基本上用不着其他第三方浏览器了。
安装完毕后,先打开uc浏览器,这里先以阿里巴巴旗下的天猫为主。因为天猫的有图评论就没法保存图片,先去天猫找到你要下载的图片地址,按住地址栏把图片地址复制下来。
需要注意的是,先把uc浏览器的ua改成chrome或者电脑模式,刷新后,再进入天猫复制那张要保存的图片地址。
进入qq浏览器同样先把ua改成电脑版,我说的是电脑模式而不是iPad。因为iPad模式和电脑模式的排版不一样,有的功能用不上,所以用电脑模式保险。
在qq浏览器国际版的地址栏,把刚才复制下来的图片地址粘贴上去刷新网页。找到你要下载的图片,点击展示原图,长按图片有没有看到出现了“查看图片”和“保存图片”两个选项。
图虫网页能正常显示也能下载图片了
接下来,去快图浏览或者系统自带图库找到“图片收藏”的文件,这个就是qq浏览器国际版保存在本地图片的目录。
此方法亲自测试有用。看图:
*请认真填写需求信息,我们会在24小时内与您取得联系。