【问题标题】:How can I get Jupyter / IPython Notebook nbconvert to output PDFs that don't overflow off the page?如何让 Jupyter / IPython Notebook nbconvert 输出不会溢出页面的 PDF?
【发布时间】:2015-12-27 23:21:05
【问题描述】:

当我通过ipython nbconvert my-notebook.ipynb --to PDF 将 Jupyter / IPython Notebook 转换为 PDF 时,它看起来不错,除了一些长行和所有输出只是超出了页面边缘,没有换行。我怎样才能让它停止溢出并换行?

【问题讨论】:

    标签: pdf ipython-notebook jupyter


    【解决方案1】:

    我建议使用稍微不同的方法,而不是直接使用终端,而是使用这个带有 GUI 的 Python 小脚本从 Jupyter Notebooks 获取真正高质量的 pdf。它支持语法高亮,不会弄乱 Latex 或图形。

    # Script adapted from CloudCray
    # Original Source: https://gist.github.com/CloudCray/994dd361dece0463f64a
    # 2016--06-29
    # Run this script in the same folder as the notebook(s) you wish to convert
    # This will create both an HTML and a PDF file
    #
    # You'll need wkhtmltopdf (this will keep syntax highlighting, etc)
    #   http://wkhtmltopdf.org/downloads.html
    
    import subprocess
    import os
    from Tkinter import Tk
    from tkFileDialog import askopenfilename
    
    WKHTMLTOPDF_PATH = "C:/Program Files/wkhtmltopdf/bin/wkhtmltopdf"  # or wherever you keep it
    
    def export_to_html(filename):
        cmd = 'ipython nbconvert --to html "{0}"'
        subprocess.call(cmd.format(filename), shell=True)
        return filename.replace(".ipynb", ".html")
    
    
    def convert_to_pdf(filename):
        cmd = '"{0}" "{1}" "{2}"'.format(WKHTMLTOPDF_PATH, filename, filename.replace(".html", ".pdf"))
        subprocess.call(cmd, shell=True)
        return filename.replace(".html", ".pdf")
    
    
    def export_to_pdf(filename):
        fn = export_to_html(filename)
        return convert_to_pdf(fn)
    
    def main():
        print("Export IPython notebook to PDF")
        print("    Please select a notebook:")
    
        Tk().withdraw() # Starts in folder from which it is started, keep the root window from appearing 
        x = askopenfilename() # show an "Open" dialog box and return the path to the selected file
        x = str(x.split("/")[-1])
    
        print(x)
    
        if not x:
            print("No notebook selected.")
            return 0
        else:
            fn = export_to_pdf(x)
            print("File exported as:\n\t{0}".format(fn))
            return 1
    
    main()
    

    【讨论】:

    • 实际答案(包装在这个漂亮的脚本中)很简单:首先转换为html,然后使用wkhtmltopdf
    • 我使用wkhtmltopdf --page-height 110.0 --page-width 85.0 doc.html doc.pdf 来获得非常接近正常页面大小。 -s A4 似乎没有解决我的溢出问题,页面仍然非常宽。
    猜你喜欢
    • 2017-09-23
    • 2019-08-27
    • 1970-01-01
    • 2018-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-01
    • 1970-01-01
    相关资源
    最近更新 更多