作业在 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?

  1. 在 Jupyter、JupyterLab、VS Code 或 Google Colab 里运行 Notebook 并保存,让输出存进文件里。在 Colab 里,用“文件 → 下载 → 下载 .ipynb”。
  2. 打开 Jupyter Notebook 转扫描版 PDF,选择 .ipynb 文件。
  3. 逐页看一下预览,检查代码、表格和图表,再设置纸张大小和页边距。
  4. 调整扫描效果。把模糊和噪点调低一些,小字号的代码才看得清。页面默认是灰度的,想保留图表的颜色就选“彩色”。
  5. 生成扫描版 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?现在就试试。