在之前一篇笔记里面讲到了安装pandoc来生成pdf文件,其实我在使用pandoc之前,来想过用php的第三方库来将md转成html,然后把html转换成pdf。
将md转成html
我用的php库是"erusev/parsedown": "^1.7"
,官方链接在这里
使用Parsedown::instance->text($mdStr)
就能够将md转成html,如下方代码所示。md到html的转换耗时很短
$html = Parsedown::instance()->text($mdStr);
将html转成pdf
我用的是库是"dompdf/dompdf": "^0.8.2"
, 官方链接在这里。
为了使生成的html指定字体,我还给html指定了font-family
,注意下面直接使用$dompdf->stream()
可以实现在浏览器里面下载。但是如果文件太大的时候,php分配的内存会不够
$html = '<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>' . '<style>body{font-family:firefly, DejaVu Sans, sans-serif;}</style></head><body>' . $html . '</body></html>';
$dompdf = new \Dompdf\Dompdf();
$dompdf->loadHtml($html);
$dompdf->render();
$dompdf->stream();
注意:
上方在font-family里面指定的首选字体是firefly
,这是我从网上找的中文字体。在使用dompdf
将html转成pdf的时候,还需要几个步骤来加载字体:
-
从
dompdf/utils
的Git库下载load_font.php
脚本 -
手动添加到vender/dompdf/dompdf/下,与lib和src同级
-
从网上找到中文字库,例如叫fireflysung.ttf
-
将该中文字符导入到dompdf中,命令为
php load_font.php firefly fireflysung.ttf
-
在php代码里面,使用dompdf时,需要注明font-family
整个html到pdf的耗时还是很长的。
我对比了一下pandoc和php的耗时,同样一个md文件,pandoc只花了4秒,但是php花了约2分钟。所以我最后还是选择的pandoc。