作业在 Jupyter 里写完了,提交系统却只收 PDF。你点了“下载为 PDF”,或者运行 jupyter nbconvert --to pdf,结果报错:找不到 xelatex,或者缺少 pandoc。nbconvert 是通过 LaTeX 生成 PDF 的,所以得先装好一整套 TeX 发行版,它才能导出任何东西。
Look Scanned 现在可以直接打开 .ipynb 文件了。在 Jupyter Notebook 转扫描版 PDF 页面选好你的 Notebook,它会直接在浏览器里排版:Markdown 单元格、代码,以及随文件保存的输出。在预览里检查一遍页面,就能下载 PDF。不用安装任何东西,Notebook 也不会上传。
先说清楚一点:Look Scanned 做的是让文档看起来像扫描件,所以生成的 PDF 也是扫描件的样子。如果你的 Notebook 需要以“打印后扫描”的形式提交,或者就是想让它看起来像纸质材料,这正合适。你可以把旋转、模糊和噪点都调到零,让页面更干净,但每一页仍然是图片,所以 PDF 里的文字不能选中,也不能搜索。
怎么把 .ipynb 文件转成扫描版 PDF?
- 在 Jupyter、JupyterLab、VS Code 或 Google Colab 里运行 Notebook 并保存,让输出存进文件里。在 Colab 里,用“文件 → 下载 → 下载 .ipynb”。
- 打开 Jupyter Notebook 转扫描版 PDF,选择
.ipynb文件。 - 逐页看一下预览,检查代码、表格和图表,再设置纸张大小和页边距。
- 调整扫描效果。把模糊和噪点调低一些,小字号的代码才看得清。页面默认是灰度的,想保留图表的颜色就选“彩色”。
- 生成扫描版 PDF 并下载。
如果需要图片,也可以把每一页导出成 JPG 或 PNG。具体怎么选,可以看看扫描件的 PDF、JPG 和 PNG 格式区别。开通专业版后,用批量扫描可以一次处理好几个 .ipynb 文件。
页面上会出现什么?
- Markdown 单元格:标题、列表、表格、链接和图片,包括直接粘贴进单元格的图片。
- 代码单元格:按 Notebook 的编程语言做语法高亮,并标上
In [1]:提示符。过长的代码行会自动换行,不会超出页面。 - 已保存的输出,标在
Out[1]:提示符下:打印的文字、返回值、pandas DataFrame 这类 HTML 表格,还有图片,所以 matplotlib 或 seaborn 画的图都能显示。 - 报错信息,连同完整的 traceback。
- 终端输出按终端里看到的样子显示。颜色控制码会被去掉,tqdm 这类进度条只保留最后的状态,不会把每次刷新都列出来。
开始之前,先了解这几点
- 单元格不会被运行。Look Scanned 只读取文件里保存的内容,没有内核。没运行过的单元格,或者清空了输出再保存的 Notebook,只会显示代码,下面什么都没有。请先运行全部单元格并保存,再选择文件。
- 公式保持 TeX 源码。Markdown 单元格里用
$…$或$$…$$写的公式会原样显示,比如$\alpha + \beta$,不会排成数学公式。 - 交互式输出不会显示。Plotly、Bokeh 和 ipywidgets 都靠 JavaScript 绘制,而 JavaScript 不会运行。你看到的是 Notebook 一并保存的静态版本,往往只有一行简短的文字,甚至什么都没有。像 matplotlib 那样保存成图片的图表则没有问题。
- Notebook 必须是 nbformat 4。现在的 Jupyter、JupyterLab、VS Code 和 Colab 保存的都是这个版本。很老的 nbformat 3 Notebook 会被拒绝,用新版 Jupyter 打开再保存一次就能升级。
- 宽表格会被压窄。表格会缩放到页面宽度,所以列很多的 DataFrame 每一列都会变窄、自动换行。
- 请保留原来的 Notebook。和真正的扫描件一样,PDF 由页面图片组成。要运行或修改代码,还得用
.ipynb文件。
Notebook 的读取和排版都在你自己的设备上完成,不会上传到服务器。唯一的例外是 Markdown 单元格里用网址引用的图片:你的浏览器会从存放它的网站下载这张图片,在 Jupyter 里打开时也是这样。
什么时候更适合用 nbconvert?
如果你需要能选中的文字、排好版的公式,或者和 Jupyter 自带导出一模一样的 PDF,nbconvert 仍然是正确的选择。装好 TeX 发行版后运行 jupyter nbconvert --to pdf,或者改用 --to webpdf,它通过无头 Chromium 浏览器打印,完全绕开 LaTeX。无论哪种方式,之后都可以把这个 PDF 放进 Look Scanned 添加扫描效果。
你的报告是 Markdown 或 LaTeX 文件,而不是 Notebook?这些也能打开:请看 Markdown 和 HTML 转扫描版 PDF 和 LaTeX 转扫描版 PDF。
手上有需要交 PDF 的 Notebook?现在就试试。