里講一種實現起來比較簡單的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小時內與您取得聯系。