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

时间:2016-01-15 19:47:31

标签: python ipython-notebook jupyter-notebook nbconvert

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

ipython nbconvert --to html notebook.ipynb

但是此选项也会导出代码。有没有办法在没有代码的情况下将笔记本转换为HTML?

6 个答案:

答案 0 :(得分:19)

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

你只需要创建一个名为" hidecode.tplx"的模板文件。在与要转换的笔记本相同的目录中,并在其中添加这些行:

void foo(char * ID)
{
  int i = struct_<ID>_name.field2;
  printf("%d",i);    
}

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

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

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

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

jupyter nbconvert --to pdf --template hidecode Example.ipynb

2018年9月编辑: 不推荐使用jupyter nbconvert --to latex --template hidecode Example.ipynb 。它将替换为ipython nbconvert:因此我们将命令jupyter nbconvert替换为ipython

答案 1 :(得分:7)

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

假设使用Firefox(57)+ Win7

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

    document.querySelectorAll("div.input").forEach(function(a){a.remove()})
    
  5. 代码删除所有输入div DOM。然后right mouse button并选择&#34;将页面另存为&#34;并保存&#34;完成页面&#34; (不是单页)。

  6. 您将在Windows中获得包含相关文件夹的页面。使用拉链html页面的技巧,然后解压缩解除关联。该文件夹没用。

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

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

答案 2 :(得分:5)

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

div.output_prompt { visibility: hidden; }
*{ font-family: "Palatino Linotype", "Book Antiqua", Palatino, serif !important }
.input,#header { display: none; }

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

的内容
$(".input").remove()

据我所知,没有办法通过乳胶生成不包含代码的PDF。有一个jupyter笔记本扩展程序可以做到这一点很棒......

答案 3 :(得分:3)

nbconvert使用模板将笔记本的JSON转换为文档;例如,在nbconvert附带的降价模板中,markdown.tpl

{% block input %}
{% if nb.metadata.language_info %}{{ nb.metadata.language_info.name }}{% endif %}
{{ cell.source}}
{% endblock input %}

在输出中打印每个单元格的源。如果删除{{ cell.source}},则不会打印出单元格源。 HTML和Latex模板中也有相应的块。

更好的是,制作一个完全符合你想要的模板:)

答案 4 :(得分:2)

作为this answer的概括,以便可以从多个位置访问 hidecode 模板:

  1. 进入以下目录(将user_name更改为您的用户名):

    cd /home/<user_name>/.jupyter
    
  2. 在此目录下创建jupyter_nbconvert_config.py

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

    c = get_config()
    c.TemplateExporter.template_path = ['.', "/home/<user_name>/.jupyter" ]
    c.LatexExporter.template_path = ['.', "/home/<user_name>/.jupyter"]
    
  4. 在此目录下创建名为hidecode.tplxhidecode.tpl的模板文件:

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

    jupyter nbconvert --to pdf '<file_name>.ipynb' --template=hidecode.tpl
    

答案 5 :(得分:2)

我是这样做的: 我只是将我的笔记本下载为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()

该脚本基本上添加了CSS&#39; display:none&#39;所有div类的属性&#39;提示&#39;或者&#39; input_area&#39;。

相关问题