Q: 如何把jupyter notebook 转为 pdf 文档?

A: 尝试了几种python包, 结果都没有成功. 包括: xhtml2pdf,

查看官方的介绍说用pandoc也是一种方法, 但是觉得安装一个可怕的Latex和pandoc太麻烦了.

还好, 找到了一个开源方法: 用wkhtmltopdf 程序.

用python写一个脚本, 调用wkhtmltopdf, 运行命令行指令, 得以实现. 非常符合我的预期. 简明, 优雅.

wkhtml2pdf 简介

wkhtmltopdf,一个集成好了的exe文件(C++编写),

基本的调用方法是:

"c:\Program Files\bin\wkhtmltopdf.exe" https://github.com/mementum/backtrader/blob/master/docs2/signal_strategy/signal_strategy.rst signal_strategy.pdf

Loading pages (1/6)
Counting pages (2/6)
Resolving links (4/6)
Loading headers and footers (5/6)
Printing pages (6/6)
Done

C:\Documents and Settings\Administrator\duanqs\strategy_study>dir *.pdf

 驱动器 C 中的卷是 160GB_XP
卷的序列号是 EC5F-C44B C:\Documents and Settings\Administrator\duanqs\strategy_study 的目录 2017-04-17 14:47 120,295 signal_strategy.pdf
2017-04-17 13:32 597,111 backtest.pdf
2 个文件 717,406 字节
0 个目录 19,999,031,296 可用字节

可以先在命令行测试一下,有其他的需要, 可以在命令行通过wkhtmltopdf --help查询,

如果是超长页的话,可以用命令:

wkhtmltopdf.exe http://passport.yupsky.com/ac/register e:\yupskyreg.pdf -H --outline

Here:

-H 是显示扩展帮助

--outline 是添加pdf的左侧概要!(缺省设置)

而且可以批量生成哦,中间用空格隔开

python 脚本: (封装了运行wkhtml2pdf.exe 命令行的py脚本)


# code:utf-8 '''
IPython/Jupyter Problems saving notebook as PDF - Stack Overflow
http://stackoverflow.com/questions/29156653/ipython-jupyter-problems-saving-notebook-as-pdf This Python script has GUI to select with explorer a Ipython Notebook you want to convert to pdf.
The approach with wkhtmltopdf is the only approach I found works well and provides high quality pdfs.
Other approaches described here are problematic, syntax highlighting does not work or graphs are messed up. You'll need to install wkhtmltopdf: http://wkhtmltopdf.org/downloads.html
and Nbconvert pip install nbconvert
# OR
conda install nbconvert '''
# Script adapted from CloudCray
# Original Source: https://gist.github.com/CloudCray/994dd361dece0463f64a
# 2016--06-29
# This will create both an HTML and a PDF file 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()

这里也记录一下尝试xhtml2pdf的经过.

安装完了以后, 编写脚本, 运行时主要是: 卡在了html5lib这个包里:

异常是:

inputstream

CSS parser

等等.

搞定不了, 所以放弃之.

install xhtml2pdf and update html5lib from old vertion to new version (1.0b8)

Here is the logging:

C:\Documents and Settings\Administrator>pip install xhtml2pdf
Collecting xhtml2pdf
Downloading xhtml2pdf-0.0.6.zip (120kB)
100% |████████████████████████████████| 122kB 467kB/s
Collecting html5lib (from xhtml2pdf)
Using cached html5lib-0.999999999-py2.py3-none-any.whl
Collecting pyPdf2 (from xhtml2pdf)
Downloading PyPDF2-1.26.0.tar.gz (77kB)
100% |████████████████████████████████| 81kB 10kB/s
Requirement already satisfied: Pillow in d:\anaconda2\lib\site-packages (from xhtml2pdf)
Collecting reportlab>=2.2 (from xhtml2pdf)
Downloading reportlab-3.4.0-cp27-cp27m-win32.whl (2.1MB)
100% |████████████████████████████████| 2.1MB 261kB/s
Collecting webencodings (from html5lib->xhtml2pdf)
Downloading webencodings-0.5.1-py2.py3-none-any.whl
Requirement already satisfied: setuptools>=18.5 in d:\anaconda2\lib\site-packages (from html5lib->xhtml2pdf)
Requirement already satisfied: six in d:\anaconda2\lib\site-packages (from html5lib->xhtml2pdf)
Requirement already satisfied: pip>=1.4.1 in d:\anaconda2\lib\site-packages (from reportlab>=2.2->xhtml2pdf)
Requirement already satisfied: packaging>=16.8 in d:\anaconda2\lib\site-packages (from setuptools>=18.5->html5lib->xhtml
2pdf)
Requirement already satisfied: appdirs>=1.4.0 in d:\anaconda2\lib\site-packages (from setuptools>=18.5->html5lib->xhtml2
pdf)
Requirement already satisfied: pyparsing in d:\anaconda2\lib\site-packages (from packaging>=16.8->setuptools>=18.5->html
5lib->xhtml2pdf)
Building wheels for collected packages: xhtml2pdf, pyPdf2
Running setup.py bdist_wheel for xhtml2pdf ... done
Stored in directory: C:\Documents and Settings\Administrator\Local Settings\Application Data\pip\Cache\wheels\ec\eb\db
\13a2be9c15f492c65086709a69042924ebfb7aa4c4cc7284f1
Running setup.py bdist_wheel for pyPdf2 ... done
Stored in directory: C:\Documents and Settings\Administrator\Local Settings\Application Data\pip\Cache\wheels\86\6a\6a
\1ce004a5996894d33d93e1fb1b67c30973dc945cc5875a1dd0
Successfully built xhtml2pdf pyPdf2
Installing collected packages: webencodings, html5lib, pyPdf2, reportlab, xhtml2pdf
Successfully installed html5lib-0.999999999 pyPdf2-1.26.0 reportlab-3.4.0 webencodings-0.5.1 xhtml2pdf-0.0.6 C:\Documents and Settings\Administrator>pip install html5lib==1.0b8
Collecting html5lib==1.0b8
Downloading html5lib-1.0b8.tar.gz (889kB)
100% |████████████████████████████████| 890kB 311kB/s
Requirement already satisfied: six in d:\anaconda2\lib\site-packages (from html5lib==1.0b8)
Building wheels for collected packages: html5lib
Running setup.py bdist_wheel for html5lib ... done
Stored in directory: C:\Documents and Settings\Administrator\Local Settings\Application Data\pip\Cache\wheels\d4\d1\0b
\a6b6f9f204af55c9bb8c97eae2a78b690b7150a7b850bb9403
Successfully built html5lib
Installing collected packages: html5lib
Found existing installation: html5lib 0.999999999
Uninstalling html5lib-0.999999999:
Successfully uninstalled html5lib-0.999999999
Successfully installed html5lib-1.0b8 C:\Documents and Settings\Administrator>

ipynb to pdf的更多相关文章

  1. Windows7下Jupyter Notebook使用入门

    目录 一.Jupyter简介 二.Jupyter安装 2.1 python 3安装 2.2 Jupyter 安装 三.Jupyter使用示例 四.Jupyter常用命令 五.其他说明 一.Jupyte ...

  2. 简单python脚本,将jupter notebook的ipynb文件转为pdf(包含中文)

    直接执行的python代码ipynb2pdf.py 主要思路.将ipynb文件转成tex文件,然后使用latex编译成pdf.由于latex默认转换不显示中文,需要向tex文件中添加相关中文包. 依赖 ...

  3. windows jupyter lab中.ipynb转中文PDF

    在jupyter lab中,File-Export Notebook as-Export Notebook to PDF,可以导出成PDF格式的文档,但在操作前需要安装些程序.1. 安装pandocA ...

  4. Jupyter Notebook PDF输出的中文支持

    Jupyter Notebook是什么 Jupyter Notebook是ipython Notebook 的升级.Jupyter能够将实时代码,公式,可视化图表以Cell的方式组织在一起,形成一个对 ...

  5. Jupyter Notebook通过latex输出pdf

    主要步骤 1.将ipynb编译成tex ipython nbconvert --to latex Example.ipynb 2. 修改tex,增加中文支持 在\documentclass{artic ...

  6. 是程序员,就用python导出pdf

    这两天一直在做课件,我个人一直不太喜欢PPT这个东西--能不用就不用,我个人特别崇尚极简风. 谁让我们是程序员呢,所以就爱上了Jupyter写课件,讲道理markdown也是个非常不错的写书格式啊. ...

  7. Python学习笔记——jupyter notebook 入门和中文pdf输出方案

    简单粗暴的安装 对于懒人而言,我还是喜欢直接安装python的集成开发环境 anaconda 多个内核控制 jupyter官网 1). 同时支持python2 和python 3 conda crea ...

  8. 【原创】JavaFx程序解决Jupyter Notebook导出PDF不显示中文

    0.ATTENTION!!! JavaFx里是通过Java调用控制台执行的的jupyter和xelatex指令, 这些个指令需要在本地安装Jupyter和MikTeX之后才能正常在电脑上运行 1.[问 ...

  9. C#给PDF文档添加文本和图片页眉

    页眉常用于显示文档的附加信息,我们可以在页眉中插入文本或者图形,例如,页码.日期.公司徽标.文档标题.文件名或作者名等等.那么我们如何以编程的方式添加页眉呢?今天,这篇文章向大家分享如何使用了免费组件 ...

随机推荐

  1. Eclipse安卓开发环境

    首先,安卓开发就要搭建安卓开发环境,现在可能流行用AS,但是由于个对eclipse恐惧感比较小一点就选择了Eclipse: 大致流程: 1.安装java开发工具包(JDK): 2.Eclipse集成开 ...

  2. HTML常用标签及约束

    注释 <!--这是一段注释--> 样式表 外部样式(CSS) <head> <link rel="stylesheet" type="tex ...

  3. 用户数以及psp

    小组名称:好好学习 小组成员:林莉  王东涵   胡丽娜   宫丽君 项目名称: 记账本 alpha发布48小时以后用户数如何,是否达到预期目标,为什么,是否需要改进,如何改进(或理性估算). 首先我 ...

  4. android自动化之appium的环境搭建

    简介appium     appium是C/S架构,appium的核心是一个web服务器,它提供了一套REST的接口,他会接收客户端的连接,监听到命令.执行会再将结果通过HTTP响应返还给客户端.ap ...

  5. SCRIPT7002: XMLHttpRequest: 网络错误 0x2efe, 由于出现错误 00002efe 而导致此项操作无法完成

    google中带中文参数可能查询,但是在IE带中文参数不能查询:报如下错误 SCRIPT7002: XMLHttpRequest: 网络错误 0x2efe, 由于出现错误 00002efe 而导致此项 ...

  6. Java VM 环境配置过程要点( win10,64位)

    好些教程写的都不一样.留个脚印免得以后再安装的时候找不到完全合适的教程. 注:JDk中就有java虚拟机,即JRE.除此之外,还有许多的命令包,供java程序员使用. 安装要点: (1)安装jre(j ...

  7. 微信小程序组件 模块化错和叹号

    wxml 页面 <import src="/pages/lianxi/lianxi.wxml" />  //引入文件 <view style='position: ...

  8. 【Java】提取JSON数值时遇到数组集合时使用的K-V方式转换

    1.实体类转换方法 参照文章:http://www.cnblogs.com/dflmg/p/6933811.html 2.K-V方法(此方法比较笨,但是没有办法,我现在不知道有没有相关的简单API,只 ...

  9. BZOJ3481 DZY Loves Math III(数论+Pollard_Rho)

    考虑对于每一个x有多少个合法解.得到ax+by=c形式的方程.如果gcd(x,y)|c,则a在0~y-1范围内的解的个数为gcd(x,y).也就是说现在所要求的是Σ[gcd(x,P)|Q]*gcd(x ...

  10. BeautifulSoup的find()和findAll()

    BeautifulSoup的提供了两个超级好用的方法(可能是你用bs方法中最常用的).借助这两个函数,你可以通过表现的不同属性轻松过滤HTML(XML)文件,查找需要的标签组或单个标签. 首先find ...