爬虫html转换成pdf,爬取html生成pdf
首先看了这篇文章前端使用puppeteer 爬虫生成《React.js 小书》PDF并合并,发现最后的pdf没有书签,很难受,所以主要在此基础上加了加书签的功能。
爬去的示例网站为React.js 小书,仅做学习交流
针对网页生成pdf
使用puppeteer爬取网页并生成pdf
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://news.ycombinator.com', {waitUntil: 'networkidle2'});
await page.pdf({path: 'hn.pdf', format: 'A4'});
await browser.close();
})();
合成pdf
依赖于pdftk
如何给pdf加上书签
pdftk:一个处理pdf的工具
安装后将bin目录添加到环境变量
利用update_info_utf8给pdf增加书签:
pdftk 'd:\OpenSource\My\genpfdforrsb\React 小书(无书签).pdf' update_info_utf8 'd:\OpenSource\My\genpfdforrsb\bookmarks.txt' output 'd:\OpenSource\My\genpfdforrsb\React 小书.pdf'
书签是什么
也就是bookmarks.txt
书签格式:
BookmarkBegin
BookmarkTitle: PDF Reference (Version 1.5)
BookmarkLevel: 1
BookmarkPageNumber: 1
BookmarkBegin
BookmarkTitle: Contents
BookmarkLevel: 2
BookmarkPageNumber: 3
确定书签页码
pdfjs-dist:获取单个pdf页数,用于bookmarks.txt中指定页码
生成书签
const pageArr = result.map(c => c.numPages);
let txt = ''
for (let index = 0; index < pageArr.length; index++) {
let temp = `BookmarkBegin\r\nBookmarkTitle: ${titleArr[index]}\r\nBookmarkLevel: 1\r\nBookmarkPageNumber: ${pageIndex}\r\n`
txt += temp
pageIndex += pageArr[index]
}
fs.writeFileSync('bookmarks.txt', txt);
加上书签
参考pdf-merge源码,增加runshell.js用于在node中执行pdftk的命令
runshell.js如下:
'use strict';
const child = require('child_process');
const Promise = require('bluebird');
const exec = Promise.promisify(child.exec);
module.exports = (scripts) => new Promise((resolve, reject) => {
exec(scripts)
.then(resolve)
.catch(reject);
});
执行pdftk update_info_utf8
const nobkname = 'React 小书(无书签).pdf'
const hasbkname = 'React 小书.pdf'
mergepdf(nobkname).then(buffer => {
console.log('starting add bookmarks!')
runshell(`pdftk "${__dirname}/${nobkname}" update_info_utf8 "${__dirname}/bookmarks.txt" output "${__dirname}/${hasbkname}"`).then(() => {
console.log('completed add bookmarks!')
fs.unlinkSync(`${__dirname}/${nobkname}`);
fs.unlinkSync(`${__dirname}/bookmarks.txt`);
console.log('all completed!')
})
})
文件路径需要用双引号
问题
合并后的pdf页码不是连续的,还是单个pdf的页码
爬虫html转换成pdf,爬取html生成pdf相关推荐
- python爬虫爬取pdf_Python 爬虫:爬取教程生成 PDF
作为一名程序员,经常要搜一些教程,有的教程是在线的,不提供离线版本,这就有些局限了.那么同样作为一名程序员,遇到问题就应该解决它,今天就来将在线教程保存为PDF以供查阅. 1.网站介绍 之前再搜资料的 ...
- 使用python爬取教程生成PDF
2019独角兽企业重金招聘Python工程师标准>>> 工具准备 安装 wkhtmltopdf 在 https://wkhtmltopdf.org/downloads.html下载稳 ...
- PHP生成PDF并转换成图片爬过的坑
需求描述:根据订单通过模板合同生成新的PDF合同通过e签宝签约后转为图片给用户下载. 需求整理: 1.如何生成PDF文件:使用TCPDF扩展生成.思考: ⑴为了方便将模板中的固定占位符替换为订单中的内 ...
- node 没有界面的浏览器_node.js爬虫入门(二)爬取动态页面(puppeteer)
之前第一篇爬虫教程node.js爬虫入门(一)爬取静态页面讲解了静态网页的爬取,十分简单,但是遇到一些动态网页(ajax)的话,直接用之前的方法发送请求就无法获得我们想要的数据.这时就需要通过爬取动态 ...
- Java爬虫历险记 -- (1)爬取百度首页的logo
Java爬虫历险记 – (1)爬取百度首页的logo 在这篇文章里,介绍两种方式来获取百度网页的logo: (1)Httpclient (2) jsoup + Httpclient ,详细的运行结果可 ...
- Python 爬虫实战,模拟登陆爬取数据
Python 爬虫实战,模拟登陆爬取数据 从0记录爬取某网站上的资源连接: 模拟登陆 爬取数据 保存到本地 结果演示: 源网站展示: 爬到的本地文件展示: 环境准备: python环境安装 略 安装r ...
- 爬虫项目3 - 股票数据爬取
爬虫项目3 - 股票数据爬取 步骤 步骤 爬取股票名和股票列表,使用gucheng网进行爬取,网址: https://hq.gucheng.com/gpdmylb.html import reques ...
- Python爬虫开源项目代码(爬取微信、淘宝、豆瓣、知乎、新浪微博、QQ、去哪网 等等)...
文章目录 1.简介 2.开源项目Github 2.1.WechatSogou [1]– 微信公众号爬虫 2.2.DouBanSpider [2]– 豆瓣读书爬虫 2.3.zhihu_spider [3 ...
- python爬取大众点评数据_python爬虫实例详细介绍之爬取大众点评的数据
python 爬虫实例详细介绍之爬取大众点评的数据 一. Python作为一种语法简洁.面向对象的解释性语言,其便捷性.容易上手性受到众多程序员的青睐,基于python的包也越来越多,使得python ...
最新文章
- 转载:什么才是程序员的核心竞争力
- 引号快捷键_干货收藏|excel2016常用快捷键
- C++11 POD类型
- 松下电视机服务器未响应,松下电视遥控器失灵是什么原因?要怎么办?
- linux mysql general_利用mysql general log 写shell 可行性简要分析
- 3d激光雷达开发(平面分割)
- ABP框架 配置权限、本地语言文件、左侧菜单项
- pytorch模型初始化
- 微博中微服务缓存_新浪微博温情:基于微服务的微博直播互动架构设计经验分享...
- mp c2011sp文件服务器,理光Ricoh MP C2011SP驱动
- Android中通过USB连接来控制硬件设备
- Waiting alone
- (云服务器学习)部署python程序到云服务器
- 指纹识别综述(7): 指纹合成
- poi设置word表格单元格宽度_java poi如何设置word的页面的大小和水平方向?
- E1/CE1/T1/PRI/BRI知识介绍和配置
- 热带雨林的昆虫繁殖题解
- 2023年全国最新会计专业技术资格精选真题及答案16
- 案例研究分析:巴基斯坦 ISP 如何通过黑洞路由关闭 YouTube
- 当业余演员的体验故事
热门文章
- TED上的优质视频(很受益)
- java毕业设计旅游景点酒店预订网站mybatis+源码+调试部署+系统+数据库+lw
- 【硬刚大数据之学习路线篇】2021年从零到大数据专家的学习指南(全面升级版)
- Android常用的五种布局
- Brain:一个新AI时代的践行者
- 20个令人惊叹的深度学习应用(Demo+Paper+Code)
- 关于vue单页面应用总是先出现主页一闪而过的现象
- 【爬虫】四、基础爬虫方法实战
- djfpfp高温计算机电缆,ZR-DJFPFPR DJFPFPR高温计算机电缆
- 称闪送途中出事故 闪送员诉同城必应公司索赔