利用Qt将网页保存为PDF
灵社区文章链接http://www.ituring.com.cn/article/128717
起因是在群里和大家讨论自己做一个图灵社区的客户端,说没有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/
http://www.godebug.org/index.php/archives/129/
利用Qt将网页保存为PDF的更多相关文章
- 如何将网页保存为PDF文件
怎样将网页保存为PDF文件... 问题: 很多时候我们需要将网页上的内容,在排版不变的情况下完整的保存下来,那么用pdf格式是最好的效果了,还图文并茂,效果与真实的网页很相似,如果另存为网页的话,会下 ...
- 火狐浏览器将网页保存为pdf
目录 火狐打印功能 火狐插件 save as pdf 深夜更博仙女镇 @ 有时候查一些技术博客之类的,当时收藏了,过一阵子再想查看的时候发现404了,所以稳妥的办法还是将把网页保存为pdf. 火狐打印 ...
- 怎么把网页保存为pdf文件
不就是用chrome浏览器打印功能,然后保存为pdf就可以了吗? 对于一些结构简单的比如,RFC文档这样操作一般没什么问题,对于一些有浮动元素的网页就不好说了,必须先用chrome的审查元素把一些不必 ...
- 使用JavaScript将当前页面保存成PDF,支持图片和文字的保存
前端开发的朋友们可能会遇到这个需求:将您负责开发的网页的全部内容,包括文字和图片,一起保存成一个PDF文件.如果采用屏幕截图的话,默认Windows操作系统的截图按钮无法完整截取超过一屏幕的屏幕内容. ...
- 将HTML页面自动保存为PDF文件并上传的两种方式(一)-前端(react)方式
一.业务场景 公司的样本检测报告以React页面的形式生成,已调整为A4大小的样式并已实现分页,业务上需要将这个网页生成PDF文件,并上传到服务器,后续会将这个文件发送给客户(这里不考虑). 二.原来 ...
- 利用canvas将网页元素生成图片并保存在本地
利用canvas将网页元素生成图片并保存在本地 首先引入三个文件: 1.<script type="text/javascript" src="js/html2ca ...
- 网络采集软件核心技术剖析系列(4)---使用C#语言如何将html网页转换成pdf(html2pdf)
一 本系列随笔概览及产生的背景 本系列开篇受到大家的热烈欢迎,这对博主是莫大的鼓励,此为本系列第四篇,希望大家继续支持,为我继续写作提供动力. 自己开发的豆约翰博客备份专家软件工具问世3年多以来,深受 ...
- .Net 把网页Html转PDF文件
.Net 把网页Html转PDF文件 此篇主要利用 wkhtmltopdf 进行转换. 一.控制台直接转换 首先到官网http://wkhtmltopdf.org/下载wkhtmltopdf ,下 ...
- 利用PhantomJS进行网页截屏
利用PhantomJS进行网页截屏 关于PhantomJS PhantomJS 是一个基于WebKit的服务器端 JavaScript API.它全面支持web而不需浏览器支持,其快速,原生支持各种W ...
随机推荐
- 记一次pending请求问题查找过程
情景再现 近期发现网站访问变慢,经常会出现请求无法响应的问题,一个请求长时间没有返回,导致页面出现504(Gateway Timeout),我们使用的nodejs+ngnix(反向代理). 猜测原因 ...
- iOS - 排序的队列中插入数值
http://stackoverflow.com/questions/8180115/nsmutablearray-add-object-with-order 用Selector http://sta ...
- Unity Inspector 给组件自动关联引用
项目进入上线阶段了, 有一些地方需要总结和优化. 我发现UI一改变,我就要拖很久的UI. UI结构发生改变我还必须给一些变量设置好引用,后来我去看别人预设的时候组件拖放的变量至少10个以上, 它们一 ...
- Jmeter命令行运行实例讲解
1. 简介 使用非 GUI 模式,即命令行模式运行 JMeter 测试脚本能够大大缩减所需要的系统资 本文介绍windows下以命令行模式运行的方法. 1.1. 命令介绍 jmeter -n -t & ...
- Android下如何理解onMeasure,onLayout的过程
在Android中view如何完成绘制这个过程介绍了很多,但是很多理论化的东西,最近重新整理一下,通俗的讲解一下. View绘制过程就好比你向银行贷款, 在执行onMeasure的时候,好比银行告诉你 ...
- hdu 4848 搜索+剪枝 2014西安邀请赛
http://acm.hdu.edu.cn/showproblem.php?pid=4848 比赛的时候我甚至没看这道题,事实上不难.... 可是说实话,如今对题意还是理解不太好...... 犯的错误 ...
- LeetCode::Remove Duplicates from Sorted List II [具体分析]
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numb ...
- [SVG] Simple introduce for SVG
Just like create html page, you can create a svg tag by: <?xml version="1.0" encoding=& ...
- Boost库安装与使用
Boost 库非常不错,所以我今天就安了它一下下. Boost 库不是 C++ 标准库的一部分(据说在下一版本号的 C++ 标准会採纳它),但它有一些标准库所没有的非常实用的一些功能,比方我非常须要的 ...
- [编辑中] 免费的Internet流量发生器 | Free Internet Traffic Generators
流量发生器 (Traffic Generator) 是用来检测网络性能,进行网络相关研究的一个很重要的工具.大家可能用过Iperf或者IxChariot,前者是类UNIX环境下的一个免费.开源的网络性 ...