利用Qt將網頁儲存為PDF

網事已瘋發表於2014-11-14

blog文章地址http://www.godebug.org/index.php/archives/129/ 起因是在群裡和大家討論自己做一個圖靈社群的客戶端,說沒有API不好搞,後來fairjm童鞋發了個java版的豆瓣日誌轉pdf的文章,我忽然想用C++來做這個不知道難度如何,於是就趁昨天和今天中午午休的時候開始了折騰。 最開始是想找個http庫下載網頁,然後找個xml庫來解析網頁,然後找到要獲取的部分,似乎應該不難,http庫有curl和avhttp,xml解析可以用boost的ptree、slimxml或者tinyxml之類的應該都可以。但是轉念一想,這樣只是能夠獲取到文字,如果有圖片,還需要自己下載,更操蛋的是字型、排版、CSS什麼的怎麼辦?js指令碼DOM操作怎麼辦?這些都搞定了我就可以自己寫瀏覽器了,摔! 那就只能找現成的瀏覽器核心來搞了,這個一般就是webkit、cef或者通過COM呼叫IE的核心了,然後我就想到了qt自帶的webkit,使用比較方便,而且正好可以解決下一個問題——怎樣生成PDF,Qt的QPdfWriter或者QPrinter都可以直接生成pdf。 思路有了,馬上開工!

先上程式碼!https://github.com/avdbg/save_pdf

不要吐槽為啥一下就commit了一個完整的工程,我是故意的哈哈哈哈

對照註釋很容易就能看懂 就是建立了個印表機輸出到一個PDF檔案,然後用QWebElement.render()函式渲染到這個PDF 至於只列印文章,就是靠查詢element找到對應的QWebElement,然後用同樣的方法列印到PDF 列印出來的還算可以,文字也都可以複製,不過超連結和按鈕什麼的都沒法點,將就一下用吧,如果看官老爺要求更高的話可以看看這個開源專案http://wkhtmltopdf.org/

相關文章