如何导出特定 Jupyter 单元的所有输出(例如使用 %%capture magic),并将输出保存到 PDF 文件?

问题描述 投票:0回答:1

我想保存/导出所有输出,以使用 Jupyter 笔记本的 %% capture magic 捕获的方式格式化 - 到 PDF 文件。

类似于这个问题试图回答的问题 - 但是,我不需要使用光标与文件中的输出进行交互,甚至不需要使用 html - 只需静态输出到 PDF 文件,该文件准确捕获单元格输出的格式- 仅转储为 PDF 文件:

将包含 Plotly 绘图的 Jupyter Notebook 单元格输出导出到 html 文件

还有其他类似但未解答的问题:没有任何形式或方式有直接的方法论答案:

如何在jupyter笔记本中仅导出pdf格式的输出?

这似乎是一个简单的功能,适用于单元格的长/大输出,导致大量的运算和可视化,但是,我在任何地方都找不到它的答案。我需要这样做,因为单元格输出的内容会非常大,因此最好在磁盘上保存为类似 PDF 格式的文件。如果无法使用 PDF,它可以是任何其他文件格式,但是,(1) 与 Jupyterlab 输出相同或非常相似的格式很重要 - 为了保持清晰度 (2) 生成的保存文件必须可以在可以处理大输出文件大小的查看器(PDF 压缩并且 PDF 查看器可以很好地处理)。

%%capture magic 显然效果很好 - 但我似乎找不到一种方法可以轻松地从“%%capture Output”转到然后将“Output”保存为 PDF 文件,而不是在中发出“Output.show”以下单元格显示到笔记本中的另一个单元格/标准输出。

有人可以帮忙吗?

python-3.x file pdf jupyter-notebook jupyter
1个回答
0
投票

我制作了一个演示笔记本来展示使用 nbformat 从之前运行的笔记本中提取一个单元格的分步过程。提取的单元格将包含输出。然后,可以使用

jupyter nbconvert
命令中的
--no-input
标志来删除带有输入的单元格。
您可以在
此处
查看演示笔记本。 关键代码是以下Python,它使用nbformat通过设置

jupyter nbconvert

从您指向的笔记本创建一个新笔记本:

original_ntbk

然后,您可以在运行上述代码的同一笔记本的下一个单元格中运行以下命令:

number_cell_to_keep = 11 #keep in mind that Python uses zero indexing so lower by 1 # the following based on https://stackoverflow.com/a/78123424/8508004 and https://stackoverflow.com/a/79151141/8508004 and section '# Drop specified cell numbers from a notebook and name the produced one per settings' at https://github.com/fomightez/humap2-binder/blob/3e06708d4cab559d3711a101a963eec247603374/additional_nbs/standardizing_initial_data/Standardizing_identifier_order_in_humap2-provided_csv.ipynb#L2199 original_ntbk = "example_nb.ipynb" from pathlib import Path new_ntbk_name = f"{Path(original_ntbk).stem}_JUST_SELECTED_CELL{Path(original_ntbk).suffix}" import nbformat as nbf ntbk = nbf.read(original_ntbk, nbf.NO_CONVERT) new_ntbk = ntbk new_ntbk.cells = [cell for cell_index,cell in enumerate(ntbk.cells) if cell_index == number_cell_to_keep] nbf.write(new_ntbk, new_ntbk_name, version=nbf.NO_CONVERT)

命令行上的等效内容如下:

!jupyter nbconvert --no-input --to pdf {new_ntbk_name}

	
© www.soinside.com 2019 - 2024. All rights reserved.