在 mediawiki 实现导出 中文pdf

时间:2021-01-23 06:44:41

问题描述

mediawiki 中导出pdf的插件很多,可支持中文文字的插件就不少了。本文作者根据网上资料,亲测如下方式,可实现中文文字和图片pdf导出功能。

主要参照这篇文章实现: 使用Mediawiki构建个人知识库

这篇文章方法正确,可文章提到了要修改文件,却没有给出修改方法。后来作者通过痛苦地加打印语句调试后,才解决了问题。
这也是写这篇博客的原因,分享经验,节约时间。

下载文件

mpdf: 下载对应的版本
https://www.mediawiki.org/wiki/Extension:Mpdf

pdfexport
https://www.mediawiki.org/wiki/Extension:Pdf_Export

配置

将 pdfexport 及 mpdf 解压到 mediawiki/extension 目录下

在 mediawiki/LocalSetting.php 中新增如下配置:

require_once("$IP/extensions/PdfExport/PdfExport.php");

#使用Mpdf作为PdfExport的后端,但必须配置支持ckj字体
$wgPdfExportMPdf = $IP . '/extensions/Mpdf/mpdf/mpdf.php';

文件修改


1. mediawiki/Mpdf/mpdf/config_font.php:

   1) windosw 的字体配置路径 
define("_MPDF_SYSTEM_TTFONTS", 'C:/Windows/Fonts/');

   2) 查找如下代码段,取消注释。
  "sun-exta" => array(
'R' => "Sun-ExtA.ttf",
'sip-ext' => 'sun-extb',
),
"sun-extb" => array(
'R' => "Sun-ExtB.ttf",
),


如果想使用“微软雅黑”字体,将 "Sun-ExtA.ttf" 改成“msyh.ttf”,  "Sun-ExtB.ttf" 改成“msyhbd.ttf”即可

        "sun-exta" => array(
'R' => "msyh.ttf",
'sip-ext' => 'sun-extb',
),
"sun-extb" => array(
'R' => "msyhbd.ttf",
),




2. mediawiki/Mpdf/mpdf/config_cp.php:

修改如下代码段
        CASE "zh":
$unifonts = "sun-exta,sun-extb";
break;

3. mediawiki/Mpdf/mpdf/config.php

修改成
        $this->useAdobeCJK = true;

4. mediawiki/PdfExport/converters/MPdfConverter.php

查找“new mPDF", 修改成如下格式
        $mpdf = new mPDF('zh');
$mpdf->SetAutoFont(AUTOFONT_ALL);
$mpdf->WriteHTML($html);

经验总结

1. mpdf 路径设置。参考的文中的内容,就少些了 Mpdf 这个路径。可能是因为版本发生变化了吧。第二句的关键就是要定义 MPdf 这个类。如果找不到这个文件,那么将提示“找不到pdf转换程序”

2. 字体路径: windows 下,需要更改 config_fonts.php 中的默认加载路径。

3. php 语句后都需要加分号。否则会提示语句未结束。

4. 如果发现有php文件配置出错了。依然可以采用程序的调试办法:“不断缩小错误范围的方式”,中间可加入各种打印语句 echo "123" 这样的。

解决这个问题的过程很辛苦,中间几乎放弃,可最终结果还是很满意的。越来越明白,不放弃,按照思路不断尝试,总是可以解决的。更何况这还是前人就解决过的问题呢。