首先看了这篇文章前端使用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相关推荐

  1. python爬虫爬取pdf_Python 爬虫:爬取教程生成 PDF

    作为一名程序员,经常要搜一些教程,有的教程是在线的,不提供离线版本,这就有些局限了.那么同样作为一名程序员,遇到问题就应该解决它,今天就来将在线教程保存为PDF以供查阅. 1.网站介绍 之前再搜资料的 ...

  2. 使用python爬取教程生成PDF

    2019独角兽企业重金招聘Python工程师标准>>> 工具准备 安装 wkhtmltopdf 在 https://wkhtmltopdf.org/downloads.html下载稳 ...

  3. PHP生成PDF并转换成图片爬过的坑

    需求描述:根据订单通过模板合同生成新的PDF合同通过e签宝签约后转为图片给用户下载. 需求整理: 1.如何生成PDF文件:使用TCPDF扩展生成.思考: ⑴为了方便将模板中的固定占位符替换为订单中的内 ...

  4. node 没有界面的浏览器_node.js爬虫入门(二)爬取动态页面(puppeteer)

    之前第一篇爬虫教程node.js爬虫入门(一)爬取静态页面讲解了静态网页的爬取,十分简单,但是遇到一些动态网页(ajax)的话,直接用之前的方法发送请求就无法获得我们想要的数据.这时就需要通过爬取动态 ...

  5. Java爬虫历险记 -- (1)爬取百度首页的logo

    Java爬虫历险记 – (1)爬取百度首页的logo 在这篇文章里,介绍两种方式来获取百度网页的logo: (1)Httpclient (2) jsoup + Httpclient ,详细的运行结果可 ...

  6. Python 爬虫实战,模拟登陆爬取数据

    Python 爬虫实战,模拟登陆爬取数据 从0记录爬取某网站上的资源连接: 模拟登陆 爬取数据 保存到本地 结果演示: 源网站展示: 爬到的本地文件展示: 环境准备: python环境安装 略 安装r ...

  7. 爬虫项目3 - 股票数据爬取

    爬虫项目3 - 股票数据爬取 步骤 步骤 爬取股票名和股票列表,使用gucheng网进行爬取,网址: https://hq.gucheng.com/gpdmylb.html import reques ...

  8. Python爬虫开源项目代码(爬取微信、淘宝、豆瓣、知乎、新浪微博、QQ、去哪网 等等)...

    文章目录 1.简介 2.开源项目Github 2.1.WechatSogou [1]– 微信公众号爬虫 2.2.DouBanSpider [2]– 豆瓣读书爬虫 2.3.zhihu_spider [3 ...

  9. python爬取大众点评数据_python爬虫实例详细介绍之爬取大众点评的数据

    python 爬虫实例详细介绍之爬取大众点评的数据 一. Python作为一种语法简洁.面向对象的解释性语言,其便捷性.容易上手性受到众多程序员的青睐,基于python的包也越来越多,使得python ...

最新文章

  1. 转载:什么才是程序员的核心竞争力
  2. 引号快捷键_干货收藏|excel2016常用快捷键
  3. C++11 POD类型
  4. 松下电视机服务器未响应,松下电视遥控器失灵是什么原因?要怎么办?
  5. linux mysql general_利用mysql general log 写shell 可行性简要分析
  6. 3d激光雷达开发(平面分割)
  7. ABP框架 配置权限、本地语言文件、左侧菜单项
  8. pytorch模型初始化
  9. 微博中微服务缓存_新浪微博温情:基于微服务的微博直播互动架构设计经验分享...
  10. mp c2011sp文件服务器,理光Ricoh MP C2011SP驱动
  11. Android中通过USB连接来控制硬件设备
  12. Waiting alone
  13. (云服务器学习)部署python程序到云服务器
  14. 指纹识别综述(7): 指纹合成
  15. poi设置word表格单元格宽度_java poi如何设置word的页面的大小和水平方向?
  16. E1/CE1/T1/PRI/BRI知识介绍和配置
  17. 热带雨林的昆虫繁殖题解
  18. 2023年全国最新会计专业技术资格精选真题及答案16
  19. 案例研究分析:巴基斯坦 ISP 如何通过黑洞路由关闭 YouTube
  20. 当业余演员的体验故事

热门文章

  1. TED上的优质视频(很受益)
  2. java毕业设计旅游景点酒店预订网站mybatis+源码+调试部署+系统+数据库+lw
  3. 【硬刚大数据之学习路线篇】2021年从零到大数据专家的学习指南(全面升级版)
  4. Android常用的五种布局
  5. Brain:一个新AI时代的践行者
  6. 20个令人惊叹的深度学习应用(Demo+Paper+Code)
  7. 关于vue单页面应用总是先出现主页一闪而过的现象
  8. 【爬虫】四、基础爬虫方法实战
  9. djfpfp高温计算机电缆,ZR-DJFPFPR DJFPFPR高温计算机电缆
  10. 称闪送途中出事故 闪送员诉同城必应公司索赔