![如何将网页转换为 PDF 并保留其外观(与网络浏览器上完全一样)和文本/链接?](https://linux22.com/image/1489845/%E5%A6%82%E4%BD%95%E5%B0%86%E7%BD%91%E9%A1%B5%E8%BD%AC%E6%8D%A2%E4%B8%BA%20PDF%20%E5%B9%B6%E4%BF%9D%E7%95%99%E5%85%B6%E5%A4%96%E8%A7%82%EF%BC%88%E4%B8%8E%E7%BD%91%E7%BB%9C%E6%B5%8F%E8%A7%88%E5%99%A8%E4%B8%8A%E5%AE%8C%E5%85%A8%E4%B8%80%E6%A0%B7%EF%BC%89%E5%92%8C%E6%96%87%E6%9C%AC%2F%E9%93%BE%E6%8E%A5%EF%BC%9F.png)
我正在寻找一种将网页转换为 PDF 的方法,但保留网页的外观。同时保留网页的文本(可选择)、可搜索 [为网页生成图像截图会使文本既不可选择也不可搜索]。
我希望将网页按原样打印为 PDF(如在网络浏览器上一样),而无需对样式或对齐进行任何处理,也不会丢失任何网页的静态组件。
这将有助于保存易于阅读、注释和搜索的网页离线副本。
您不需要阅读下面的任何内容(问题只是上面的部分)以便得到我的问题。以下部分只是以嵌套的方式列出了我通过研究或其他人答案得到的信息,以便找到问题的答案。
研究成果(未解决我的问题的建议)
到目前为止尝试寻找解决方案的结果(仍然无法解决这个问题)
我尝试过这些 PDF 网络打印引擎,但所有引擎都会篡改页面的外观,甚至造成损坏,使一些页面难以阅读:(示例页面屏幕截图包含在方括号中)
- 铬合金 [原来的、打印样式(已禁用|未禁用)]
- 火狐浏览器 [原来的、打印样式(已禁用p1,p2| 未禁用p1,p2)]
- 可读性
- 它简化了网页(这对于专注阅读来说是一件好事——然而,这不是我想要的)。我希望保留所有网页的位置/样式属性,就像在 Web 浏览器上看到的一样,以 PDF 格式显示,无需任何操作。
- 福昕阅读器
- NovaPDF
- 可爱队长[原来的,缩放系数:0.4:截图,输出PDF]
- 我将在解决程序在 Windows 上的运行问题后添加链接”
- 转PDF[原来的,缩放系数:0.4:截图,输出的 PDF]
- 它不支持CSS3。
所有网页截图插件(例如绑架,很棒的截图,火射,Firefox 截图开发者工具,全页屏幕截图,第2张图片,网络捕获,...)不要回答我的问题,因为他们没有保留文本和链接。
可书写非常适合保存网页以供进一步注释和研究,但不幸的是仍然在线且无法转换为 PDF 格式。
社区中还有另外两个问题与我的问题类似,但是,这个问题略有不同,但具有以下重要区别:
- 如何在网络浏览器中实现所见即所得 (WYSIWYP)?
- 这个问题询问如何捕获网页(如屏幕上所示),即使它是图像,文本也不会被保留。而我正在寻找捕获文本和链接的方法(重要的是保留文本和链接)。
更多类似问题保留文本和链接不是必需的(页面被捕获为图片截图大多):
- 使用屏幕 CSS 从浏览器打印?
- 它询问是否禁用打印样式,但从上面的截图来看似乎没有帮助。
笔记
操作系统:Windows 10
答案1
我们在一个大学项目中遇到了同样的问题,并使用以下方法解决了它
我们非常喜欢这个工具在命令行上的功能。我们还使用 Python 代码来调用它,以呈现网页的当前状态。它有将网页作为 PDF 格式传送的选项,由于页面格式(例如 A4),通常无法完美保留网站视图,或者作为 png 格式传送(保留页面视图但不保留链接)
我们使用的 readability(适用于 Python:pypi.python.org/pypi/readability-lxml)项目可以很好地完成广告删除和内容检测(例如报纸文章等)。如果您只是想要浏览器的插件或扩展,以下 readability 实现可能会满足您的需求:
現在下線:https://www.readability.com/addons/
WaybackMachine 链接:https://web.archive.org/web/20160308192045/https://readability.com/addons
答案2
为可能的用户提供另一个答案。在 Firefox 中,曾经有一个插件“将页面打印为 PDF”。您可以搜索其最新版本 0.1.9.3(仅适用于 Quantum 之前的版本)。
目前,Chrome 和 Firefox 都有一个运行良好的插件: PDFMage
- 保存页面所有图片
- 生成文本为文本,而不是图像,您可以在生成的 PDF 中搜索文本。
- 保护者超链接
- 可以选择将长网页保存为单页 PDF(这样图像就不会分割到各个页面)
答案3
我真的很纠结这个问题,尝试了目前提到的大多数工具。我得到的最佳结果是使用 Chrome 的无头模式。MacOS 上的命令如下所示:
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --headless --print-to-pdf=test.pdf http://127.0.0.1:8080
我发现的最佳命令行选项列表是这里。
但是这样做也存在一些问题。具体来说,我的页面包含大量的 JavaScript,我无法让打印函数等待它们执行完毕。所以我的输出中没有图像。
我找到的解决方案是一个 nodeJS 包:chrome-headless-render-pdf
。它的文档很少这里。它可以工作,并且易于编写脚本。
答案4
如果你使用 Linux,可以尝试这个小型命令行工具可爱队长,它仅依赖于 Qt 和 QtWebkit,并导出为 PDF。