如何将Jupyter Notebook转为保留样式的单页自定义格式PDF?
Jupyter Notebook 转PDF:需求与可行方案探索
现有工具的局限与偏好方案
Jupyter生态提供多种PDF生成方式,但均无法满足需求:要么流程存在bug,要么功能支持不全,要么排版杂乱。
本人偏好pdfviahtml的输出效果,命令如下:
jupyter nbconvert --to pdfviahtml notebook.ipynb
其优势包括:
- 数学公式排版精准
- 整体排版美观协调
- 支持矢量图形(SVG)
- 代码块样式美观
- 生成近乎单页的自定义格式PDF,长代码段作为单个块展示,大幅提升可读性
但该方案存在两个问题:
- Markdown单元格中的外部图片丢失
- 文档内部链接无法跳转
次优方案是先转为HTML再通过浏览器打印存为PDF:
jupyter nbconvert --to html notebook.ipynb # + 在浏览器中将HTML另存为PDF
但生成的多页PDF可读性差。
已测试的转换方法
本人已测试以下Jupyter与nbconvert的转换方法:
# 1: --to pdf: # 优点:基于LaTeX生成 # 缺点:生成多页PDF,排版杂乱 jupyter nbconvert --to pdf 01-signals-solutions.ipynb # 2: --to pdfviahtml: # 优点:代码块美观、公式及整体排版出色,单页自定义格式PDF # 缺点:Markdown单元格中的外部图片丢失 # jupyter nbconvert --to pdfviahtml 01-signals-solutions.ipynb # 3: --to latex + 单独调用pdflatex或xelatex # 优点:呈现LaTeX文档样式 # 缺点:效果与方案1类似 jupyter nbconvert --to latex 01-signals-solutions.ipynb # 4: --to html + 另存为PDF # 优点:HTML效果出色 # 缺点:存为PDF后特性无法保留 # 5: --to webpdf # 与方案2类似:--to pdfviahtml # 优点:输出效果与--to pdfviahtml相近,文档内部链接可跳转 # 缺点:代码生成的图表常被裁剪,Markdown单元格中的外部图片丢失 jupyter nbconvert --to webpdf 01-signals-solutions.ipynb # 6: --to PDFviaHTML # 与方案2基本一致 jupyter nbconvert --to PDFviaHTML 01-signals-solutions.ipynb
测试环境:Jupyter 1.0.0、nbconvert 7.16.2,Python 3.10及3.11。
需求与求助
现寻求解决方案:如何将HTML页面转为保留链接、样式的单页自定义格式PDF?优先选择Jupyter直接实现的方案,也可接受浏览器扩展或其他技巧。
内容的提问来源于stack exchange,提问作者normanius
相关产品推荐
相关产品推荐

