庇护祝福的分享

Be worthy

Markdown转换为pdf的解决方案

解决方案一:Kitabu

简介

Kitabu是使用ruby生成电子书的方案,它本身支持markdown转换为epub和html格式,不过通过调用其他指定的依赖 来转换为mobi、pdf、txt等其他格式。
依赖prince进行html向pdf的转换。
依赖html2text进行html向txt的转换。
依赖KindleGen进行epub向mobi的转换。
Kitabu支持代码高亮,默认使用codeRay,也可以安装 pygments.rb进行代替 。
Github地址:https://github.com/fnando/kitabu

安装方法

第一步 安装 Kitabu

$ gem install kitabu            

安装完毕后就可以使用kitabu系列命令了。

第二步 检查需要的依赖是否安装

$ kitabu check    

命令行中会给出哪些已经安装,哪些未安装。例如:

 Prince XML: Converts HTML files into PDF files.
 Installed.
 KindleGen: Converts ePub e-books into .mobi files.
 Installed.
 html2text: Converts HTML documents into plain text.
 Not installed.
 pygments.rb: A generic syntax highlight. If installed, replaces CodeRay.
 Not installed.

第三步 生成电子书制作目录

$ kitabu new mybook          

在当前文件夹下生成一个名为mybook的文件夹,进入文件夹后可以看到如下文件结构:

mybook
    ├── code
    ├── config
    │   ├── helper.rb
    │   └── kitabu.yml
    ├── images
    ├── output
    ├── templates
    │   ├── epub
    │   │   ├── cover.erb
    │   │   ├── cover.png
    │   │   ├── page.erb
    │   │   └── user.css
    │   └── html
    │       ├── layout.css
    │       ├── layout.erb
    │       ├── syntax.css
    │       └── user.css
    └── text
        └── 01_Welcome.md

第四步 生成各种格式的电子书

$ kitabu export

生成的文件会放在output文件夹中。

使用中遇到的问题

转换PDF时中文无法解析

解决方法:
1.需要在本地安装中文字体。
2.在模板中添加中文字体。

PDF中的代码出现没有对齐的情况。

Prince XML: Converts HTML files into PDF files.
Installed.
KindleGen: Converts ePub e-books into .mobi files.
Installed.
html2text: Converts HTML documents into plain text.
Not installed.
pygments.rb: A generic syntax highlight. If installed, replaces CodeRay.
Not installed.

目前最常用的解决方案:pandoc

pandoc简介

如果你需要文件格式的转换,pandoc 可以成为你的瑞士军刀,它可以将下列格式: markdown, reStructuredText, textile, HTML , DocBook, LaTeX, MediaWiki markup, OPML, Haddock 转换为:

     HTML formats: XHTML, HTML5, and HTML slide shows using Slidy, reveal.js, Slideous, S5, or DZSlides.         
     Word processor formats: Microsoft Word docx, OpenOffice/LibreOffice ODT, OpenDocument XML
     Ebooks: EPUB version 2 or 3, FictionBook2
     Documentation formats: DocBook, GNU TexInfo, Groff man pages, Haddock markup
     Outline formats: OPML
     TeX formats: LaTeX, ConTeXt, LaTeX Beamer slides
     PDF via LaTeX
     Lightweight markup formats: Markdown, reStructuredText, AsciiDoc, MediaWiki markup, Emacs Org-Mode, Textile
     Custom formats: custom writers can be written in lua.

pandoc支持多种格式的转换,可以直接用命令行由markdown转换为pdf。

    $ pandoc demo.md -o demo.pdf

虽然这个命令表面上是直接转换,但实际还是通过先转换为LaTeX格式,再转为pdf的。
这个命令对我们没有实际意义。因为无法加载样式,也无法解析中文。实用情况下还是 需要将文档转换为html或者LaTeX文件格式,通过html模板或者LaTeX的tex模板进行样式定制。

LaTeX(Donald E. Knuth(高德纳)发明的)是一个科技出版界常用的格式。

pandoc安装

第一步,安装pandoc

    $ sudo apt-get install pandoc        

第二步,安装texlive

    $ sudo apt-get install texlive-xetex texlive-latex-recommended texlive-latex-extra      

TexLive是LaTeX的工具集,由于转换pdf必须先转换成LaTeX。

第三步,安装中文字体

    $ sudo apt-get install ttf-arphic-gbsn00lp ttf-arphic-ukai ttf-wqy-microhei ttf-wqy-zenhei        

本机必须安装有中文字体,否则无法正确的转换中文。

第四步,安装multimarkdown

    git clone git://github.com/fletcher/peg-multimarkdown.git

下载后是一个文件夹,cd进去后执行make命令即可。
用于将多个md文件一起进行转化为一个pdf文件。

怎么使用?

示例

官方网站

    pandoc -N --template=mytemplate.tex --variable version=1.9 SLIDES.md --latex-engine=xelatex --toc -o example14.pdf

示例页里还有很多别的例子,其中将markdown文件转换成网页的sldes非常吸引人

    pandoc -s –mathml -i -t dzslides SLIDES -o example14a.html
    pandoc -s –webtex -i -t slidy SLIDES -o example14b.html
    pandoc -s –webtex -t -t s5 SLIDES -o example14c.html