web-dev-qa-db-ja.com

コードなしでノートブックをPDFにエクスポート

たくさんの図とテキストを含む大きなノートブックがあります。 HTMLファイルに変換したいです。ただし、コードをエクスポートする必要はありません。私は次のコマンドを使用しています

ipython nbconvert --to html notebook.ipynb

ただし、このオプションはコードもエクスポートします。コードなしでノートブックをhtmlに変換する方法はありますか?

30
aloha

this 興味深い記事を見つけました。入力列を削除する方法を説明しています。

変換するノートブックと同じディレクトリに「hidecode.tplx」という名前のテンプレートファイルを作成し、その行を追加するだけです。

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

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

そして、このコマンドを実行した後、pdfLatexを使用して、ラテックス経由でPDFのノートブックを変換します。

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

または、編集する場合は、.texドキュメントに変換し、pdfLatexを使用してpdfに配置できます。

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

2018年9月編集:ipython nbconvertは非推奨です。 jupyter nbconvertに置き換えられます。したがって、コマンドipythonjupyterに置き換えます。

23

SOで同じ質問を探していましたが、最終的には非常に簡単な方法になりました。

Firefox(57)+ Win7を使用すると仮定

  1. Jupyterノートブックを実行し、ブラウザでノートブックをダウンロードします。ファイル->ダウンロードas-> HTMLを実行すると、コードと出力を含むhtmlページが表示されます。
  2. エクスポートされたHTMLをブラウザーで開き、キーF12
  3. コンソールで次のコマンドを実行します。

    document.querySelectorAll("div.input").forEach(function(a){a.remove()})
    
  4. このコードは、すべての入力div DOMを削除します。その後、right mouse buttonを選択し、[ページに名前を付けて保存]を選択し、[完全なページ](単一ページではない)を保存します。

  5. Windowsに関連付けられたフォルダーを含むページが表示されます。 htmlページをZip圧縮してから、関連するものをアンバインドするために抽出します。フォルダーは役に立たない。

  6. これで、コードのない単一のhtmlページになりました。再配布するか、PDFとして印刷できます。

FirefoxまたはWindowsを使用していない場合は、上記の3〜6の手順を調整してください。

11
Boying

このcssをページに追加して、ブラウザーからPDFに印刷できます。コードは非表示であり、削除されないことに注意してください。

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

コードを確実に削除するには、次のようなものを使用する必要があります

$(".input").remove()

私が知っている限りでは、ラテックスを介してコードを含まないPDFを生成する方法はありません。

5
teddy browns

方法は次のとおりです。ノートブックを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()

このスクリプトは、クラス 'Prompt'または 'input_area'のすべてのdivにCSS 'display:none'属性を基本的に追加します。

3
amagard

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テンプレートにも対応するブロックがあります。

さらに良いことに、あなたが望むものを正確に実行する独自のテンプレートを作成してください:)

3
Neal Fultz

この回答 の一般化として、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.tplxまたはhidecode.tplという名前のテンプレートファイルを作成します。

        ((*- extends 'article.tplx' -*))
    
    ((* block input_group *))
        ((*- if cell.metadata.get('nbconvert', {}).get('show_code', False) -*))
                ((( super() )))
        ((*- endif -*))
    ((* endblock input_group *))
    
  5. 次に、次のコードが生成されますPDF without .ipynb files 'code(Change file_name your your name):

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