摘要:首先看了這篇文章前端使用爬蟲生成小書并合并,發(fā)現(xiàn)最后的沒有書簽,很難受,所以主要在此基礎(chǔ)上加了加書簽的功能。
首先看了這篇文章前端使用puppeteer 爬蟲生成《React.js 小書》PDF并合并,發(fā)現(xiàn)最后的pdf沒有書簽,很難受,所以主要在此基礎(chǔ)上加了加書簽的功能。
爬去的示例網(wǎng)站為React.js 小書,僅做學(xué)習(xí)交流
針對網(wǎng)頁生成pdf使用puppeteer爬取網(wǎng)頁并生成pdf
puppeteer中文文檔
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
pdf-merge:合并pdf
依賴于pdftk
如何給pdf加上書簽pdftk:一個處理pdf的工具
安裝后將bin目錄添加到環(huán)境變量
利用update_info_utf8給pdf增加書簽:
pdftk "d:OpenSourceMygenpfdforrsbReact 小書(無書簽).pdf" update_info_utf8 "d:OpenSourceMygenpfdforrsbookmarks.txt" output "d:OpenSourceMygenpfdforrsbReact 小書.pdf"
書簽是什么也就是bookmarks.txt
書簽格式:
BookmarkBegin BookmarkTitle: PDF Reference (Version 1.5) BookmarkLevel: 1 BookmarkPageNumber: 1 BookmarkBegin BookmarkTitle: Contents BookmarkLevel: 2 BookmarkPageNumber: 3確定書簽頁碼
pdfjs-dist:獲取單個pdf頁數(shù),用于bookmarks.txt中指定頁碼
生成書簽const pageArr = result.map(c => c.numPages); let txt = "" for (let index = 0; index < pageArr.length; index++) { let temp = `BookmarkBegin BookmarkTitle: ${titleArr[index]} BookmarkLevel: 1 BookmarkPageNumber: ${pageIndex} ` txt += temp pageIndex += pageArr[index] } fs.writeFileSync("bookmarks.txt", txt);加上書簽
參考pdf-merge源碼,增加runshell.js用于在node中執(zhí)行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); });
執(zhí)行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!") }) })
文件路徑需要用雙引號
源碼:genpfdforrsb
問題合并后的pdf頁碼不是連續(xù)的,還是單個pdf的頁碼
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/100781.html
摘要:首先介紹是一個庫,他提供了一組用來操縱的默認(rèn)也就是無的,也可以配置為有有點類似于,但是官方團(tuán)隊進(jìn)行維護(hù)的,前景更好。使用,相當(dāng)于同時具有和的能力,應(yīng)用場景會非常多。 首先介紹Puppeteer Puppeteer是一個node庫,他提供了一組用來操縱Chrome的API(默認(rèn)headless也就是無UI的chrome,也可以配置為有UI) 有點類似于PhantomJS,但Puppet...
摘要:上面只爬取了京東首頁的圖片內(nèi)容,假設(shè)我的需求進(jìn)一步擴大,需要爬取京東首頁中的所有標(biāo)簽對應(yīng)的跳轉(zhuǎn)網(wǎng)頁中的所有的文字內(nèi)容,最后放到一個數(shù)組中。 showImg(https://segmentfault.com/img/bVbtVeV?w=3840&h=2160); 本文適合無論是否有爬蟲以及Node.js基礎(chǔ)的朋友觀看~ 需求: 使用Node.js爬取網(wǎng)頁資源,開箱即用的配置 將爬取到的...
摘要:上面只爬取了京東首頁的圖片內(nèi)容,假設(shè)我的需求進(jìn)一步擴大,需要爬取京東首頁中的所有標(biāo)簽對應(yīng)的跳轉(zhuǎn)網(wǎng)頁中的所有的文字內(nèi)容,最后放到一個數(shù)組中。 showImg(https://segmentfault.com/img/bVbtVeV?w=3840&h=2160); 本文適合無論是否有爬蟲以及Node.js基礎(chǔ)的朋友觀看~ 需求: 使用Node.js爬取網(wǎng)頁資源,開箱即用的配置 將爬取到的...
摘要:上面只爬取了京東首頁的圖片內(nèi)容,假設(shè)我的需求進(jìn)一步擴大,需要爬取京東首頁中的所有標(biāo)簽對應(yīng)的跳轉(zhuǎn)網(wǎng)頁中的所有的文字內(nèi)容,最后放到一個數(shù)組中。 showImg(https://segmentfault.com/img/bVbtVeV?w=3840&h=2160); 本文適合無論是否有爬蟲以及Node.js基礎(chǔ)的朋友觀看~ 需求: 使用Node.js爬取網(wǎng)頁資源,開箱即用的配置 將爬取到的...
閱讀 1299·2021-11-17 09:33
閱讀 1786·2021-09-09 11:53
閱讀 3277·2021-09-04 16:45
閱讀 1453·2021-08-17 10:12
閱讀 2442·2019-08-30 15:55
閱讀 1800·2019-08-30 15:53
閱讀 2436·2019-08-30 15:52
閱讀 2592·2019-08-29 18:41