pandoc 是一个神奇的转换工具(详见官网),它支持各种文档格式之间的转换。如果使用它进行 pdf 转换需要依赖外部引擎(LaTeX)。
安装 pandoc
以 CentOS 为例,其他操作系统详见官网安装说明。
1、进入页面 https://github.com/jgm/pandoc/releases
2、下载 pandoc-2.17.1.1-linux-amd64.tar.gz
3、解压缩后bin目录中的 pandoc 即为可以直接使用的二进制文件。
如果你不需要转换 pdf,只需要对 markdown 和 word 之间进行转换,则到此已经结束了,pandoc 可以完成你的转换需求,关于 pandoc 支持的各种文件的转换类型,详见官网链接。
华丽的分割线
安装 LaTeX 引擎
如果需要使用 pandoc 转换文档为 pdf,需要安装在操作系统上安装 latex(默认使用 LaTeX 引擎),否则会出现错误 pdflatex not found. Please select a different --pdf-engine or install pdflatex
。
XeLaTeX 是使用 LaTeX 的排版引擎。对于中文文档,pdflatex 转换会出现字符集不支持的问题,可以使用参数指定 xelatex 引擎来转换中文文档。
1、下载 ISO 镜像文件
2、挂载 iso 文件进行安装
先 mount,再执行 ./install-tl
命令。
[root@server01 data]# mount -o loop texlive2021-20210325.iso /data/texlive
mount: /dev/loop0 is write-protected, mounting read-only
[root@server01 texlive]# ./install-tl
# 中途出现提示 Enter command: 时输入 I 然后继续
如果安装 latex 出现错误 Can't locate Digest/MD5.pm in @INC (@INC contains
,说明缺少依赖 perl-Digest-MD5
,可以执行 yum -y install perl-Digest-MD5
来安装(安装成功后继续 ./install-tl
)。
3、配置环境变量
在安装包 iso 中有指导手册 ./texlive-doc/texlive-zh-cn/texlive-zh-cn.pdf
查看 pdf 文档的 3.4.1 节,添加如下环境变量到用户环境下.bash_profile
(或全局的 /etc/profile
)
PATH=/usr/local/texlive/2021/bin/x86_64-linux:$PATH
export PATH
MANPATH=/usr/local/texlive/2021/texmf-dist/doc/man:$MANPATH
export MANPATH
INFOPATH=/usr/local/texlive/2021/texmf-dist/doc/info:$INFOPATH
export INFOPATH
执行 source ~/.bash_profile
使配置立即生效。
4、查看3.4.4节添加 tex 系统自带的字体文件
将 texlive-fontconfig.conf 文件复制到 /etc/fonts/conf.d/09-texlive.conf 后,再运行 fc-cache -fsv
命令。
[root@server01 texlive]# cp /usr/local/texlive/2021/texmf-var/fonts/conf/texlive-fontconfig.conf /etc/fonts/conf.d/09-texlive.conf
[root@server01 texlive]# fc-cache -fsv
5、使用测试
编辑如下内容为 test.tex 文件
%% coding:utf8
%% coding:utf8
\documentclass{article}
\usepackage{xeCJK}
\setCJKmainfont{SimSun}
\begin{document}
你好, TeX Live 2013!
\end{document}
执行转换命令
./pandoc --variable papersize=A4 --variable "geometry=margin=1.2in" --variable mainfont="SimSun" --variable sansfont="SimSun" --variable monofont="SimSun" --pdf-engine=xelatex -s test.md -o test.pdf
其中
--variable "geometry=margin=1.2in"
为四周统一边距的设置,或者使用margin-left
、margin-right
、margin-top
、margin-bottom
逐个设置。
变量--variable
可以使用大写的-V
来替代,例如-V monofont="SimSun"
。
最后验证生成的 pdf 文件是否正确,如果出现 pdf 段落右侧被截取的情况,可以通过追加参数 --template=pm-template.latex
指定自定义模板解决,例如:./pandoc --template=pm-template.latex --pdf-engine=xelatex saas.docx -o saas.pdf
。
如果你是纯粹
word 转 pdf
的需求,使用这个工具的转换效果偏差度较大,建议使用基于LibreOffice/OpenOffice
的jodconverter
库来转换。
更多关于 latex 的内容详见官网资料,如下:
latex 官网:https://www.latex-project.org/
通过网络在线安装 TeX Live:https://www.tug.org/texlive/acquire-netinstall.html
TeX Live 用于 Unix 的快速安装:https://www.tug.org/texlive/quickinstall.html
Pandoc一些入门Demo:https://pandoc.org/demos.html
Pandoc详细使用手册(包含控制pdf纸张、边距、页头页尾等参数):https://pandoc.org/MANUAL.html
基于docker的使用方法
以上内容我们还需要在服务器上安装环境,如果使用 pandoc 的 docker 镜像 将会使这一切都变的更简单。
示例:
# 设置运行命令的别名
alias pandock='docker run --rm -v "$(pwd):/data" -u $(id -u):$(id -g) pandoc/latex'
# 转换一个 markdown 文档为 word 文件
pandock -s test.md -o test.docx
中文乱码字体文件详见:https://blog.csdn.net/catoop/article/details/123837977
(END)