标题: 中文支持不错的pdf工具rst2pdf

时间: 2015-07-18 01:50:56

正文:

今天 Emacs 微信群 里聊起 org 格式转换 pdf , 走 LaTex 等各种 Tex 转换的中文以及高亮等问题. 从早年 DocBook 起我一直也在不断折腾, 各种方案大概都试过, 个人尝试的还是这个 pandoc + rst2pdf 最顺手轻便:

rst2pdf 是基于 reportlab 库的,不需要去 官网 下载,为支持中文 pdf , 大概安装过程如下:

处理优化

另外,由于生成的 rst 文件比较单薄,没有索引等,简单封装了 .py 脚本来处理 , 没做进一步修改,仅限转换当前目录下的 doc.md 文件。

        转载请注明出处 http://blog.hickwu.com/posts/340 by Hick

import os
import time
import re

start_time = time.time()
rst_file = 'doc.rst'

"""
- md 转换 rst 文件
- 删除之前可能已经生成的文件
- 修改生成的 rst 文件: 第三行插入索引等基本 rst 指令
"""
os.path.isfile(rst_file) and os.remove(rst_file)
ret = os.system("pandoc -f markdown -t rst -o " + rst_file + "  doc.md")

rst_str = """

.. contents:: 目 录
.. sectnum::

.. raw:: pdf

    PageBreak


.. header::

    ###Title###(Hick) . . . . . . . . . . . . . . . . . . . . .    ###Page###


"""
if not os.path.isfile(rst_file):
    print(u"error: rst 文件没生成")
flist=open(rst_file,'r+').readlines()
flist[2]= rst_str
open(rst_file,'w+').writelines(flist)

ret = os.system("rst2pdf  doc.rst -s chinese -o doc.pdf  -c -e dotted_toc")
print u"pdf 文件生成成功", time.time() - start_time

生成的 pdf 的图片可能处理不太好, markdown 不支持定义图片高宽等, rst 支持,可以指定一个百分比显示。

话说回来, 各种语言的 pdf 工具都越来越成熟了. 在公司是项目里, 已经在用 php 圈里的 tcpdf 生成灵活控制的 pdf 文件. 虽然有遇到过比较奇怪的某些不明就里的字符组合就乱码的现象(不大好描述, 大体是原本生成某些阅读器乱码的 pdf , 去掉一个中文比如"兰"就不乱码了, 但是整个那一段文字放到另外一个 pdf 里又好好的), 整体来说还不错. 乱码问题也有小伙伴用另外一个 php pdf 库 mpdf 基本解决了.

参考资料:

查看更多文章
分享到:


分享到: