Latex格式html文件转换pdf和docx文档

最近有需求将包含latex格式的html文档转换成pdf和docx文档的需求,由于之前完全没接触过,最近几天调研和实验了一番后将格式转换的关键点都实验成功,总结记录一下。

转换原理

各种转换工具对比之后选择了号称“格式转换瑞士军刀”的pandoc,pandoc功能强大且开源,从官方说明文档就知道多厉害了。

由于历史原因,需要转换的html格式文件比较复杂,直接用pandoc转换到docx,有极少数格式会出问题,导致转换后的docx文件打开会提示格式错误。最后研究发现mathjax对各种格式的兼容处理比较强大,采用mathjax将原始latex文件转换成mml格式后,再给到pandoc转换docx就可以了。

mathjax转换部分找同事搭建了一个node.js服务提供转换接口和css控制,只需要调用接口将原始latex数据转换成mml格式,再讲转换后的格式替换掉原始html文件中的latex部分,最终生成包含mml格式的html文件。

环境搭建

转换环境包括:

  • mathjax node.js服务
  • pandoc
  • TeX Live
  • stack工具(Haskell Platform)

mathjax服务是用来将原始html文件转换成mml格式(如果你面对的latex格式并不复杂且很标准,那么不需要这部分,直接用pandoc处理问题也不大),我们这里需要mathjax处理是因为我们有遇到各种奇怪的latex格式,且pandoc对latex格式判断比较严格,通过兼容性较好的mathjax处理一遍后有明显效果。
pandoc是最终用来做格式转换的工具,为了安装pandoc,需要用到Haskell环境,因此需要安装stack来部署和管理整个Haskell。
pandoc不提供docx到pdf的直接转换,只能采用mml到pdf的转换方式,但是需要额外的latex转换引擎支持才能做到,pandoc官方推荐使用TexLive。

TexLive安装
首先下载安装包
解压后执行install-tl按照提示输入I进行安装,经过漫长下载等待后完成。安装成功后xelatex可执行程序目录在/usr/local/texlive/2016/bin/x86_64-linux/ ,需要记得将这个目录加入到PATH环境变量中。

pandoc安装
我是选择源码安装方式,自己下载了pandoc-1.19.2
先安装Stack工具:

curl -sSL https://get.haskellstack.org/ | sh

按照pandoc安装说明文档,切换到pandoc解压目录,执行:

stack setup
stack install --test

安装成功后,需要注意pandoc可执行文件默认放到了/root/.local/bin,需要修改PATH环境变量才能找到。

转换命令

转换到docx的命令如下:

pandoc -s --mathml filename.mml -o output.docx 

转换到pdf的命令如下:

pandoc --latex-engine=xelatex filename.html -o output.pdf

还有很多其他pandoc转换命令和兼容格式,具体参考官方文档。

转换结果示例:


转换pdf中文编码处理

pandoc默认转换到pdf的时候,中文处理会有问题,显示不出来,需要添加字体支持。

pandoc -s old.html.html --latex-engine=xelatex -V mainfont=SimHei -o 20.pdf 

上述命令指定用黑体转换中文,通过mainfont参数指定中文字体,但是前提是你的系统里面已经安装了相关的中文字体支持,我在centos安装中文,采用了这个链接的方法。查看系统支持的字体命令是 fc-list。

从word中提取latex公式

同样可以通过pandoc将word中的latex提取出来,具体做法就是将pandoc转换为markdown格式之后就可以写程序匹配出latex公式数据($$之间的部分)

pandoc -s aaa.docx -t markdown -o aaa.md
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Pandoc 使用 前段时间换了电脑,直接拷过来的MarkDownPad出了点问题,再加上VSCode的MarkD...
    haop阅读 36,576评论 2 17
  • 使用Markdown写东西很简单,但是一直以来在写东西时使用数学公式是一件很麻烦的事情。这也限制了许多内容在网上的...
    luke_bei_阅读 14,422评论 0 9
  • 文件格式(或文件类型)是指电脑为了存储信息而使用的对信息的特殊编码方式,是用于识别内部储存的资料。比如有的储...
    一只不靠谱的猿_阅读 3,917评论 0 10
  • 今天听了一个电台的节目,节目的名字的叫你的付出,时光都会懂。人呢,总会抱怨,这时候肯定会有人说自己的付出总会得不到...
    Jange阅读 2,018评论 0 5
  • 经常在新闻里看到“高校男生10000朵玫瑰求爱被拒”、“大学生当众向同性示爱”、“某男子当街求婚,结局出人意外”等...
    甘棠gt阅读 710评论 6 10