这几天为我的开源项目御用文档系统YurunDoc(截止发稿前未开源)开发了下载PDF的功能,方便有些奇怪的用户喜欢下到本地看。
刚开始研究时候没想到竟然没有一个成熟的方案,百度一下找到的方案都是一些对中文兼容不好的。
中间省去无数研究尝试过程……
终于在Gayhub(Github)找到了好用的类库。
Composer的require组合如下:
"brainsware/php-markdown-extra-extended" : "dev-master", "mpdf/mpdf" : "dev-master"
brainsware/php-markdown-extra-extended是markdown转html的库。
mpdf/mpdf是html转markdown的库。
其实markdown转html倒是有很多,随便拿一个用就可以了。主要问题都是出在pdf类库对中文不兼容的问题上,折腾各种字体也难以解决,或者会导致pdf文件巨大。
mpdf是我找到的一个文档全,兼容中文的php pdf类库,而且使用大字体的情况下也不会增大很多体积。
github:https://github.com/mpdf/mpdf
mpdf需要支持中文还是需要做一些设置的,不过超简单,字体直接用ttf就可以。
// 固定写法 $defaultConfig = (new Mpdf\Config\ConfigVariables())->getDefaults(); $fontDirs = $defaultConfig['fontDir']; $defaultFontConfig = (new Mpdf\Config\FontVariables())->getDefaults(); $fontData = $defaultFontConfig['fontdata']; $mpdf = new \Mpdf\Mpdf([ 'fontDir' => array_merge($fontDirs, [ APP_PATH . 'PDFFonts', // 设置你自定义的字体目录 ]), 'fontdata' => $fontData + [ // 自己加个字体,名字叫yaheimono,后面是文件名 'yaheimono' => [ 'R' => 'MSYHMONO.ttf', 'I' => 'MSYHMONO.ttf', 'B' => 'MSYHMONO.ttf', 'BI' => 'MSYHMONO.ttf', ], ], 'default_font' => 'yaheimono' // 设置默认字体 ]); // 下面两句好像是把字体编译到pdf里来着,不加就有问题 $mpdf->useSubstitutions = true; $mpdf->backupSubsFont = array('yaheimono');
php导出pdf体验:http://doc.yurunsoft.com/YurunHttp(右上角)