wkhtmltopdf 遇到的坑以及填坑指南

? 最近公司有一個中的需求,是將html表單轉換成pdf 。

? 無非方式就只有兩種帚稠,前端的方式咱就不說了谣旁,您能看到這里,必然是采用了市場占有率最高的wkhtmltopdf滋早。

? 優(yōu)缺點都很明顯榄审,廢話不多說,直接說我踩過的坑和填過的坑杆麸。

? No1.? 有登陸權限驗證的頁面需要打印為pdf 瘟判。如果你要打印的頁面是基于權限認證的,那你打印出來角溃,必然是跳轉到認證頁面的pdf拷获。

? ? ? ? ? ?看到這里,不要懵逼减细。

? ? ? ? ? wkhtmltopdf 支持賬號密碼和驗證碼登陸匆瓜,同時也支持采用cookie 的方式進行登陸。大部分時候采用cookies 登陸即可未蝌。

? ? ? ? ? 具體的實現方式如下:

ProcessStartInfo psi =?new?ProcessStartInfo();

psi.FileName =?"wkhtmltopdf.exe";

string?cookieArgs =?"";

var?cookies = HttpContext.Current.Request.Cookies;


if?(cookies !=?null)

{

????var?sb =?new?System.Text.StringBuilder();

????// you probably only need the ".ASPXFORMSAUTH"

????// and "ASP.NET_SessionId" cookies

????// but I pass everything just in case

????foreach?(string?key?in?cookies.AllKeys)

????{

????????string?value = cookies[key].Value;

????????sb.AppendFormat("--cookie {0} {1} ", key, value);???????????????????

????}

????cookieArgs = sb.ToString();

}

psi.Arguments = urlToPrint +?" -q "?+ cookieArgs +?" -";

Process.Start(psi);

?No2.打印的內容不全驮吱。?

這時候要分析具體原因,在wkhtmltopdf 里有一個參數是--window-status ,這個參數可以支持ajax異步請求 的萧吠。

做法是: 在調用wkhtmltopdf 時左冬,傳入參數 ,比如 傳入 “? ?--window-status? completed”? ?,然后在ajax 完成回調時 纸型,也將document 的window.status = "completed",這樣的話拇砰,就會完全支持異步調用。有兩點需要注意:1.每個參數之間必須有空格狰腌,不然一定會出現你想到的問題除破。2.window.status 的值必須與傳入的參數值一樣,否則的話琼腔,就會一直處于等待狀態(tài)瑰枫。

No3. 空白頁面,網頁顯示完好無損丹莲,但打印出來的卻是空白頁面光坝。? ? ??

? ? ?這是最大的一個坑,我研究了一天才踩平了甥材。到現在還有一些疑問的地方盯另,等到時候我在去重新踩 。說一下坑在哪里哈.

? ? ? wkhtmltopdf 的工具是基于qt webkit 的擂达。所以基本上目前的流行玩法都是支持的土铺。但特么的也有例外胶滋,由于官網已經很久沒有更新,我去github上看到的更新也是很久之前的悲敷。

? ? ?如果是普通的mvc 和html 頁面是完全沒有問題的究恤。但單頁面應用程序的坑就大了。

? ? 我當時用的版本是angular js 后德,在頁面顯示完美部宿,但在pdf 打印出來確實空白的。

? ? ?起初我認為問題出現在wkhtmltopdf 瓢湃,它并不支持單頁面應用程序理张。但我用vue 測試的沒有問題。于是我重新測試angular js 绵患,我在github 看了每一個提問者的問題雾叭。發(fā)現一個提問者講到,他用的angular js? 1.4的版本出現了問題落蝙,回撤到1.3.5 則正常织狐。于是我發(fā)現新大陸一樣,將angular js?的版本也回車到了1.3.5 筏勒,發(fā)現打印出來的頁面不在是空白頁面移迫,是有內容的頁面。由于我頭一次接觸angluar js 管行,我問同事才得知厨埋,angluar js 1.4版本跨度比較大,改變了好多的內容捐顷,包括請求方式都發(fā)生了很大的變化荡陷。這也就解釋了,為啥使用angular js 打印的是空白頁套菜,因為angular js 1.4以上的版本亲善,你用wkhtmltopdf 根本就調用不到后臺的內容设易,壓根就不會發(fā)起請求逗柴。

? ? ? 別急,到這里顿肺,坑還沒結束戏溺,雖然能請求后端了,但是我發(fā)現屠尊,打印出來的內容卻缺少了很多東西旷祸,這時候就尷尬了,angular js 1.4 以上的 渲染的內容沒有問題讼昆,但不能向后臺發(fā)起請求托享,angular js 1.3.5能發(fā)起請求,但問題是打印的時候渲染不出內容。 經過我和同事的一步步調試闰围,發(fā)現問題竟然在css 赃绊,一個叫overflow 的標簽直接影響內容。 具體詳情請參考前輩的:http://www.reibang.com/p/57c897cfaa27

? ? 周六折騰了一天羡榴,總算是搞定了碧查。希望對大家能有所幫助,如果有什么問題校仑,大家及時留言忠售。我會盡快的幫助大家解決。

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末迄沫,一起剝皮案震驚了整個濱河市稻扬,隨后出現的幾起案子,更是在濱河造成了極大的恐慌羊瘩,老刑警劉巖腐螟,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異困后,居然都是意外死亡乐纸,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進店門摇予,熙熙樓的掌柜王于貴愁眉苦臉地迎上來汽绢,“玉大人,你說我怎么就攤上這事侧戴∧眩” “怎么了?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵酗宋,是天一觀的道長积仗。 經常有香客問我,道長蜕猫,這世上最難降的妖魔是什么寂曹? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮回右,結果婚禮上隆圆,老公的妹妹穿的比我還像新娘。我一直安慰自己翔烁,他們只是感情好渺氧,可當我...
    茶點故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蹬屹,像睡著了一般侣背。 火紅的嫁衣襯著肌膚如雪白华。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天贩耐,我揣著相機與錄音衬鱼,去河邊找鬼。 笑死憔杨,一個胖子當著我的面吹牛鸟赫,可吹牛的內容都是我干的。 我是一名探鬼主播消别,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼抛蚤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了寻狂?” 一聲冷哼從身側響起岁经,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蛇券,沒想到半個月后缀壤,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡纠亚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年塘慕,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蒂胞。...
    茶點故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡图呢,死狀恐怖,靈堂內的尸體忽然破棺而出骗随,到底是詐尸還是另有隱情蛤织,我是刑警寧澤,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布鸿染,位于F島的核電站指蚜,受9級特大地震影響,放射性物質發(fā)生泄漏涨椒。R本人自食惡果不足惜摊鸡,卻給世界環(huán)境...
    茶點故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望丢烘。 院中可真熱鬧柱宦,春花似錦、人聲如沸播瞳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赢乓。三九已至忧侧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間牌芋,已是汗流浹背蚓炬。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留躺屁,地道東北人肯夏。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像犀暑,于是被迫代替她去往敵國和親驯击。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,455評論 2 359

推薦閱讀更多精彩內容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5耐亏? 答:HTML5是最新的HTML標準徊都。 注意:講述HT...
    kismetajun閱讀 27,513評論 1 45
  • 前端開發(fā)面試題 面試題目: 根據你的等級和職位的變化,入門級到專家級广辰,廣度和深度都會有所增加暇矫。 題目類型: 理論知...
    怡寶丶閱讀 2,588評論 0 7
  • 一:什么是閉包?閉包的用處择吊? (1)閉包就是能夠讀取其他函數內部變量的函數李根。在本質上,閉包就 是將函數內部和函數外...
    xuguibin閱讀 9,633評論 1 52
  • iOS開發(fā)系列--網絡開發(fā) 概覽 大部分應用程序都或多或少會牽扯到網絡開發(fā)几睛,例如說新浪微博朱巨、微信等,這些應用本身可...
    lichengjin閱讀 3,671評論 2 7
  • 今天聽行動君的節(jié)日枉长,一句話打動我冀续,讓我懷念,讓我深思必峰,讓我回憶…… 行動君說:除了學生時代洪唐,再也沒有人陪你一起做同...
    愛暖心扉一悠悠閱讀 244評論 0 1