项目简介
- 因为之前在做数据分析的时候,用 colab 比较多,有些时候给同事或者老板看,用 PDF 格式会比较方便,所以就想自己做一个转化网站出来。
- 转化的方式是先把 ipynb 格式的内容解析出来,然后使用 html 格式渲染,最后导出为 PDF ,我原以为这个过程很简单,但实际工作量还蛮大的,当然,也探索出一些很好用的工具。
- 网上有一些成熟的产品,比如 nbconvert 也可以转化,但是这些都需要在电脑上安装,且需要一定编程基础,或者渲染效果不是很好,比如 colab ,所以我选择手搓一个网站,转化会简单一些。
- 支持转化的格式:ipynb 转 PDF 、HTML 、Python ,其中,PDF 为了更好的效果,我使用服务器端转化,具体原因我后面会说,所以速度稍微慢一点,其余两种格式在浏览器端运行,速度很快。
- 一些方便我自己使用的功能:代码高亮、单元格输出、数学公式渲染(基于 Katex )、图表渲染、批量转化、常见 Markdown 格式的支持等,同时,在转化为 Python 的时候,可以选择是否显示单元格内容。
项目难点
-
我碰到的第一个问题是 CSS 样式,我花了很长时间来调整。我在网上没有找到特别满意的 IPYNB CSS 样式,所以基本上内容都是我和 AI 一起手搓出来的,样式参考了 Colab ,然后做了一些改进,整体看起来会更简洁一些。为了考虑到更多情况,我看到 Github 上面有一个 ipynb 的样板仓库,我把里面的内容下载下来做了测试,基本都能准确转化。
-
第二个问题是 html 转 pdf ,我原本以为这个需求会比较简单,因为我看到 html2pdf 这个包的使用量很大。但实际测试一下,导出的效果和 html 原本的样式差异很大。我尝试了主流的 html 转 pdf 、图像的浏览器端库,发现实现办法基本上都是把 html 转化成图片,然后再转化成 pdf ,这类库的效果都不是很好。如果 html 比较复杂,其实用 Puppeteer 的效果非常不错,基本上一比一还原 html 的效果,在转化为 pdf 或者图片的过程中。它的一个问题就是依赖 nodejs 环境,所以无法在浏览器端直接渲染,需要使用到服务器。如果你像我一样被 html 转 pdf 或者图片折磨过,我觉得可以试试这个库,效果很棒!
-
看到第二个问题,可能有人会问为什么不直接调用浏览器的打印功能。我这里测试后发现,浏览器的打印功能无法实现批量转化,且样式会有一点差异,没有 Puppeteer 的效果好。
网站
https://ipynbtopdf.net/
感谢观看,感谢使用!
|
|