我是如何将博客转成PDF的

html2canvas、pdf-lib、file-saver将html页面导出成pdf 阅读详情

前言

只有光头才能变强

之前有读者问过我:“3y你的博客有没有电子版的呀?我想要份电子版的”。我说:“没有啊,我没有弄过电子版的,我这边有个文章导航页面,你可以去文章导航去找来看呀”…然后就没有然后了。

最近也有个读者提过这个问题,然后这两天也没什么事做,所以打算折腾折腾,看看怎么把博客转成PDF。

一、准备工作

要将博客转成PDF,我首先想到的是能不能将markdown文件转成PDF(因为平时我就是用markdown来写博客的)。

  • 想了一下,原生markdown显示的话,代码是没有高亮的,格式也不会太好看。
  • 所以就放弃了这个想法。

于是就去想一下,可不可以将HTML转成PDF呢。就去GitHub搜了有没有相关的轮子,也搜到了一些关于Python的爬虫啥的,感觉还是蛮复杂的。

后来,终于搜到了个不错的:

**介绍:**收集一系列html转文档的开源插件,做成html页面转文件的微服务集成Web应用,目前包含 html转PDF、html转图片、html转markdown等等。

功能:

  • 网页转PDF(参用wkhtml2pdf插件)
  • 网页转图片(参用wkhtml2pdf插件)
  • 网页转Markdown(参用jHTML2Md)
  • 网页转WORD(参用Apache POI)

这里我主要用到的网页转PDF这么一个功能,对应的插件是wkhtml2pdf。

1.1踩坑

发现了一个不错的轮子了,感觉可行,于是就去下载来跑一下看看怎么样。启动的时候倒没有出错,但在调接口的时候,老是抛出异常。

  • 于是就开始查一下路径,url有没有问题啦,查来查去发现都没问题啊。

后来才发现我的wkhtml2pdf.exe文件打不开,说我缺少几个dll文件。于是,我首先想到的是去wkhtml2pdf官网看看有没有相关的问题,想重新下载一个,但官网都进不去…(不是墙的问题)

好吧,于是就去找‘dll文件缺失怎么办’。后面发现,安装一下Visual C++ Redistributable for Visual Studio 2015就好了(没有网上说得那么复杂)

完了之后,发现可以将一个HTML转成PDF了,效果还不错:

  • 有目录
  • 可复制粘贴
  • 可跳转到链接
  • 清晰度好评

HTML转成PDF

缺点:

  • 页面加载速度慢的HTML,图片还没加载出来就已经生成PDF了
    • 所以我选用了博客园(速度快)
  • 在PDF的末尾有好几页不相关的(评论,广告啥的)

本来想着能不能只截取HTML博文的部分啊(评论,广告和其他不相关的不截取)。于是就去搜了一下,感觉是挺麻烦的,自己做了几次试验都没弄出来,最后放弃了。

后来又想了一下,我不是有一个没有广告的博客平台吗,刚好可以拿来用了。但是,我自己写完的markdown是没有全部保存在硬盘上的,后来发现简书可以下载已发布文章的所有markdown。

简书可以下载所有的文章

下载下来的文章,我想全部导入到之前那个无广告的博客平台上。但发现导出来的markdown没有高亮语法…

下载下来的markdown没有高亮语法

// 没有语法高亮咋看啊,所以到这里我就放弃了,将就用一下博客园生成的PDF吧

1.2爬虫学习

上面GitHub提供的接口是一个URL生成一个PDF文件,我是不可能一个一个将链接和标题放上去生成的(因为博客园上发的也将近200篇了)。

而我是一点也不会爬虫的,于是也去搜了一下Java的爬虫轮子,发现一个很出名(WebMagic)

于是就跟着文档学习,也遇到了坑…文档给出的版本是0.7.3,我使用的JDK版本是8,用它的例子跑的时候抛出了SSLException异常(然而网上的0.6.x版本是没有问题的)

折腾完折腾去,也找到了0.7.3版本在JDK8上如何解决SSLException异常的办法了:

修改HttpClientDownloader和HttpClientGenerator这两个类的部分代码就好了。

但是,我还是死活写不出能用的代码出来(真的菜!)…后来去问了一下同事(公众号:Rude3Knife)咋搞,他用Python几分钟就写好了。


def get_blog_yuan(blog_name, header):
    for i in range(1, 6):
        url = 'https://www.cnblogs.com/' + blog_name + '/default.html?page=' + str(i)
        r = requests.get(url, headers=header, timeout=6)
        selector = etree.HTML(r.text)
        names = selector.xpath("//*[@class='postTitle']/a/text()")
        links = selector.xpath("//*[@class='postTitle']/a/@href")
        for num in range(len(names)):
            print(names[num], links[num])
        time.sleep(5)

我也不纠结了…直接用他爬下来的数据吧(:

WebMagic中文文档:

最后

最后我就生成了好多PDF文件了:

PDF文件

// 这篇文章简单记录下我这个过程吧,还有很多要改善的[//假装TODO]。如果你遇到过这种需求,有更好的办法的话不妨在评论区下告诉我~~

WebMagic我的Demo还没写好!!!如果有兴趣或者用过WebMagic的同学,有空的话不妨也去爬爬我的博客园的文章,给我一份代码(hhhhh)

分析可能的原因:博客园反爬虫or爬取规则没写好

部门的前辈建议我去了解一下机器学习,我也想扩展一下眼界,所以这阵子会去学一下简单的机器学习知识。(当然啦,我后面也会补笔记的)

乐于分享和输出干货的Java技术公众号:Java3y。关注即可领取海量的视频资源!

帅的人都关注了

文章的目录导航:

python之简书文章保存至pdf 【代码】python之简书文章保存至pdf。 阅读详情

相关推荐

将优快云文章内容转成PDF文件

将优快云文章内容转成PDF文件 使用谷歌浏览器-更多工具-开发者工具-点击标签Console-粘贴源码-回车 里面有拷贝的SCDN网页源码

如何将优快云文章 导出为 PDF文件

【代码】如何将优快云文章 导出为 PDF文件。

2201_75316947的博客 1913

优快云文章转PDF.exe

可以获取不是vip的文章内容并保存下来,没有侧面的广告,适合保存下来后再ipad,手机中学习。方便了日常的学习生产,有BUG可以留言,到时候改进一下。

怎么从优快云上的博客下载为PDF文件?

四、如果控制台不允许粘贴代码时,先在控制台输入“允许粘贴”,不带双引号的四个字,回车,再粘贴以上代码,回车。就可以打印保存想要下载的博客了。三、在控制台输入以下代码,回车,显示打印博客的界面,将其保存就好。二、摁下键盘的F12,打开开发者工具,点击控制台。一、打开想要下载的优快云博客网页。

qq_64095888的博客 1424

ICM42670-P嵌入式开发实战:从寄存器配置到姿态解算全解析

本文全面解析ICM42670-P高性能6轴MEMS运动传感器的嵌入式开发实战,涵盖寄存器配置、数据采集滤波、低功耗优化及姿态解算算法。通过详细代码示例和应用案例,帮助开发者快速掌握从硬件对接到姿态跟踪系统的完整开发流程,适用于可穿戴设备和智能家居等低功耗应用场景。

gold的博客 1067

Mellanox CX7网卡搭配400G光模块实战:从选型到部署的完整指南

本文详细解析了Mellanox CX7网卡与400G光模块的选型策略与部署实践,涵盖硬件对比、兼容性验证及性能调优。重点介绍了OSFP光模块的选择要点和常见问题排查方法,帮助用户构建高性能网络基础设施,适用于AI训练、金融交易等场景。

efc1234567的博客 1291

将博客转成pdf

前些天无意间看到了“birdben”的博客,写的比较详细,但是最新的文章更新时间是“2017-05-07”,时间很是久远,本打算有时间认真学习一下博主所写的文章,但是担心网站会因为某些原因停止服务,于是想到将博主写的所有文章爬下来保存成pdf,说干就干! 你们可以点击这里,查看博主的网站。 一、使用到的模块   pdfkit:可以将文本、html、url转成pdf,但是需要安装wkht...

weixin_30814319的博客 424

【FDTD运行引擎错误解决方法】

我用的是2024R1版的FDTD,第一次安装好的时候点“RUN”可以正常运行,后来不知道什么问题就无法运行了。我从网上找相关的解决办法,并未找到,将软件卸载重装,重启等方法都没有解决,后来在官网按照提示解决了,我把官网提供的方式和我的情况相结合,提供一个解决方式。提示:以下是本篇文章正文内容,下面案例可供参考最后说一下两个MPI和Local computer(不使用MPI)的区别使用MPI进行仿真可以显著提高计算速度和效率,特别是对于大规模和复杂的仿真任务,但需要额外的设置和配置。(多线程并行计算)

m0_57410975的博客 8171

Python爬取喜欢的博客,并将博客转成PDF

点击上方“何俊林”,马上关注,每天早上8:50准时推送真爱,请置顶或星标本文转载自公号Python攻城狮,作者:Python攻城狮开篇之前,先说明一下,此次整理的博客主要...

欢迎关注公众号:【码农突围】,回复9999,可以获取一份LeetCode刷题笔记 373

实测有效!易灵思FPGA工程如何正确配置Efinity+Modelsim仿真环境

本文详细介绍了易灵思FPGA工程中如何高效配置Efinity与Modelsim联合仿真环境,包括软件版本匹配、系统环境变量设置、工程文件结构优化及仿真脚本深度优化等实战经验。通过实测数据验证,该方案可显著提升仿真效率,适用于不同规模的设计验证,帮助工程师快速搭建稳定高效的联仿环境。

m2n3b4v5c6的博客 405

概率整形 Peobabilistic Shaping PS 第一节

概率整形概述 概率整形(Peobabilistic Shaping, PS)是一种针对于调制格式的优化技术,它为光通信通信提供了非常高的灵活性,但不会增加系统复杂性。尤其是光通信中的非线性问题会限制功率,使得PS就像为光通信量身定做的一样。 PS技术能够在不增加发送功率的前提下,获得高频谱效率和传输容量。2016年在使用PS技术的实验中实现了6600km单模光纤的65Tbit/s数据的传输。 到目前位置PS技术的研究主要集中在具有相干检测的单载波光纤传输。 概率整形的基本原理 概率整形技术就是通过在编码前

Explore_OuO的博客 8126

将博客/网页转成PDF/图片

将博客转成PDF 优快云的博客使用印象笔记的剪藏功能会页面乱掉,实在是想保存页面的时候,可以使用 BlogSnapshot 这个网站,贴入博客地址点击生成快照,就能将博客正文内容转换为PDF文件下载下来. 目前包括的博客网站有:优快云,简书和博客园,后续更多的网站视情况支持. 网站地址:http://capture.zhixiang.fun:9977/pages/index.html ...

sinat_29131797的博客 443

计算机图形学入门30:动画与模拟介绍

计算机图形学入门,动画与模拟,物理模拟,质点弹簧系统,运动学,粒子系统,动作捕捉。

YanisWu的博客 1485

Pdf转成一张png或jpg图片

把Pdf文件转成一张png或jpg图片如下步骤: 1、下载第三方Pdf读取控件PDFFile. 2、如果想转成一张图片则用下面代码:using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.IO; namespace O2S.Co

liweidao的专栏 6513

地心地固坐标系与北天东坐标系的转换

经过这一步旋转,x3轴和y3轴就处在过O3点的经度线所在的平面了,而且z3轴指向了东。将图3的坐标系旋转成图2的样子。这里需要多次旋转,每次以某个轴为对称轴进行旋转,对应的坐标变换参考。的原点在地心,Z轴指向北极点,X轴指向本初子午线与赤道的交点,Y轴指向符合右手定则,如下图所示。下面实现地心地固坐标系到北天东坐标系的转换,问题描述为:设一点。以y1轴为对称轴,顺时针旋转90°,得到图4的样子。,X轴指向北,Y轴指向天,Z轴指向东,如下图所示。因此,北天东坐标下的坐标为。点在图3坐标系下的坐标。

csdnqixiaoxin的博客 3556

Pareto 优化 (Pareto Optimization) 算法详解及案例分析

Pareto 最优解是指在多目标优化问题中,无法通过改进一个目标而不损害其他目标的解。具体来说,对于一个解x∗x^*x∗,如果不存在另一个解xxx使得所有目标函数fixf_i(x)fi​x都不劣于fix∗f_i(x^*)fi​x∗,且至少有一个目标函数fjxf_j(x)fj​x优于fjx∗f_j(x^*)fj​x∗,则x∗x^*x∗是 Pareto 最优解。

闲人编程的博客 2761

使用Aspose.cells将Excel转成PDF

使用Aspose.cells将Excel转成PDF 源文档地址 https://blog.youkuaiyun.com/dxyzhbb/article/details/90408092 下载jar包 链接:https://pan.baidu.com/s/1QbhZ-6qmG1N-n6BoF3yZTQ 提取码:npdy 添加到自己的mvn仓库 mvn install:install-file -Dfile="jar包位置" -DgroupId="groupId" -DartifactId="artifactId"

Wsl_Cn的博客 2222

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

vue3+js将页面转成pdf学习记录

jspdf是一个用于在浏览器和 Node.js 环境中生成 PDF 文件的库。创建 PDF 文档对象jspdf允许你创建一个新的 PDF 文档对象,你可以指定文档的尺寸、方向等属性。添加内容到 PDF:通过一系列的 API 方法,你可以将文本、图像、形状等内容添加到 PDF 文档中。这些方法会根据你提供的参数在 PDF 页面上进行绘制。保存或下载 PDF:一旦你完成了 PDF 内容的添加,jspdf。

bjxlyy的博客 521

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Java将PDF输出为Excel

前段时间应需求写了一个将PDF输出为Excel的小程序,希望通过这篇博客给有同样需求的人一些思路。 首先用到的语言是Java,其中引入了一些对PDF和Excel进行操作的包,主要思路就是先将PDF输出为txt文件,然后再爬取txt中的关键字和数据,输出到Excel中。下载PDFBox包pdfbox-2.0.3.jar:http://apache.fayea.com/pdfbox/2.0.3/pdf

shaomingshan的博客 8547

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

纯前端导出pdf

纯前端导出pdf

记忆碎片 536

java将base64转成pdf

java将base64转成pdf

qq_38818858的博客 694

C# PDF 转成图片利用GhostScript

如何把pdf文件的每一页都转成一个图片呢?首先说一下GhostScript这个软件。 Ghostscript是一套建基于Adobe、PostScript及可移植文档格式(PDF)的页面描述语言等而编译成的免费软件。详情请参考 百度百科:“http://baike.baidu.com/link?url=S1cISfrHO3F3K19xOKSmB10Vt3K4h02yS9fJH8zm27A2vIq...

weixin_30888027的博客 727
上一篇: 一些常用的算法技巧总结
下一篇: 【面试现场】如何设计可自学习的五子棋AI?
Java3y
Java3y 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 1万+粉丝 509原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值