将笔记本导出为pdf,无需代码

alo*_*oha 31 python ipython-notebook jupyter-notebook nbconvert

我有一个带有大量数字和文字的大笔记本.我想将其转换为html文件.但是,我不想导出代码.我使用以下命令

ipython nbconvert --to html notebook.ipynb
Run Code Online (Sandbox Code Playgroud)

但是这个选项也会导出代码.有没有办法将笔记本转换为没有代码的HTML?

Esp*_*azi 27

我发现这篇文章很有趣,它解释了如何删除输入列:

您只需要在与要转换的笔记本相同的目录中创建名为"hidecode.tplx"的模板文件,并在其中添加以下行:

    ((*- extends 'article.tplx' -*))

((* block input_group *))
    ((*- if cell.metadata.get('nbconvert', {}).get('show_code', False) -*))
        ((( super() )))
    ((*- endif -*))
((* endblock input_group *))
Run Code Online (Sandbox Code Playgroud)

运行此命令后,它将使用pdfLatex通过latex转换为PDF格式的笔记本:

jupyter nbconvert --to pdf --template hidecode Example.ipynb
Run Code Online (Sandbox Code Playgroud)

或者如果要编辑,可以将其转换为.tex文档,并使用pdfLatex将其放入pdf中:

jupyter nbconvert --to latex --template hidecode Example.ipynb
Run Code Online (Sandbox Code Playgroud)

编辑2018年9月: ipython nbconvert已弃用.它将被替换为jupyter nbconvert:所以我们更换命令ipythonjupyter

  • 我尝试了这个 - (jupyter nbconvert --to html --no-input Example.ipynb )并且它有效。谢谢 (4认同)
  • 借调;可以确认,截至 2020 年 10 月 12 日,在 jupyter nbconvert 版本 6.0.7 上这没有任何作用。 (2认同)
  • 看起来 nbconvert 6.07 只是忽略该模板中设置的任何内容。但!现在有一个更好的选择:将 --no-input 作为标志传递给 jupyter nbconvert。 (2认同)

Boy*_*ing 13

我在SO中寻找同样的问题,最后以一种非常直接的方式:

假设使用Firefox(57)+ Win7

  1. 运行Jupyter笔记本并在浏览器中下载笔记本:文件 - >下载as-> HTML,您将获得一个包含代码和输出的html页面.
  2. 使用浏览器打开导出的HTML并使用密钥激活浏览器控制台 F12
  3. 在控制台中运行以下命令:

    document.querySelectorAll("div.input").forEach(function(a){a.remove()})
    
    Run Code Online (Sandbox Code Playgroud)
  4. 代码删除所有输入div DOM,然后单击right mouse button并选择"将页面另存为"并保存"完整页面"(不是单页)

  5. 您将在Windows中获得一个包含相关文件夹的页面.使用zip技巧通过压缩html页面,然后提取解除绑定关联.(该文件夹无用)

  6. 现在它是一个没有代码的单个html页面.您可以重新分发它或以PDF格式打印它

如果您不使用Firefox或Windows,请调整以上3-6步骤.

  • 也适用于 Chrome! (3认同)
  • 可能看起来很疯狂,但这是一行简单的,而且效果很好。感谢您挖掘这个! (2认同)

ama*_*ard 9

我是这样做的:我只是将我的笔记本下载为 html。

然后运行这个 python 脚本来转换那个 html 文件,这样提示和代码单元格就消失了:

FILE = "/somewhere/myHTMLFile.html"

with open(FILE, 'r') as html_file:
    content = html_file.read()

# Get rid off prompts and source code
content = content.replace("div.input_area {","div.input_area {\n\tdisplay: none;")    
content = content.replace(".prompt {",".prompt {\n\tdisplay: none;")

f = open(FILE, 'w')
f.write(content)
f.close()
Run Code Online (Sandbox Code Playgroud)

该脚本基本上为“prompt”或“input_area”类的所有div添加了CSS“display:none”属性。


Her*_*eer 8

作为一个概括这个答案,让hidecode模板可以从多个位置访问:

  1. 进入你的主目录:

    cd ~/.jupyter
    
    Run Code Online (Sandbox Code Playgroud)
  2. jupyter_nbconvert_config.py在这个目录下创建。

  3. 将以下内容写入.py文件(更改user_name为您的用户名):

    c = get_config()
    c.TemplateExporter.template_path = ['.', "~/.jupyter" ]
    c.LatexExporter.template_path = ['.', "~/.jupyter"]
    
    Run Code Online (Sandbox Code Playgroud)
  4. 在这个目录下创建一个模板文件,命名为hidecode.tplxor hidecode.tpl

        ((*- extends 'article.tplx' -*))
    
    ((* block input_group *))
        ((*- if cell.metadata.get('nbconvert', {}).get('show_code', False) -*))
                ((( super() )))
        ((*- endif -*))
    ((* endblock input_group *))
    
    Run Code Online (Sandbox Code Playgroud)
  5. 然后,以下内容应生成没有.ipynb文件代码的 PDF (更改file_name为您的文件名):

    jupyter nbconvert --to pdf '<file_name>.ipynb' --template=hidecode.tpl
    
    Run Code Online (Sandbox Code Playgroud)


ted*_*wns 5

您可以将此css添加到页面,然后从浏览器打印到PDF.请注意,代码只是隐藏,而不是删除.

div.output_prompt { visibility: hidden; }
*{ font-family: "Palatino Linotype", "Book Antiqua", Palatino, serif !important }
.input,#header { display: none; }
Run Code Online (Sandbox Code Playgroud)

要确保删除代码,您应该使用类似的东西

$(".input").remove()
Run Code Online (Sandbox Code Playgroud)

据我所知,没有办法通过乳胶生成不包含代码的PDF.虽然有一个jupyter笔记本扩展程序,但它会很棒...