如何使用中文版 mPDF
How to use mPDF for Chinese Language
我正在使用 mPDF 将表单输入数据保存为 PDF。对于英语,它工作正常。任何人都可以使用此代码将 HTML 表单数据保存为 PDF。
问题:为了满足我的项目要求,我需要使用中文。我当前的代码不适用于此。
Form.html
<form action='processPDF.php' method='post'>
<label for="name">Name</label>
<input name="name" type="text" id="name">
<input type='submit' name='submit' value='Download PDF'>
</form>
processPDF.php
<?php
header('Content-Type: text/html; charset=UTF-8');
if (isset($_POST['submit'])) {
if (isset($_POST['name'])) {
$name = $_POST['name'];
} else {
$Larmtid = '';
}
if (!isset($error)) {
ob_start();
?>
<div style="padding:20px;">
<p>Name: <?php
echo $name;
?></p>
</div>
<?php
$body = ob_get_clean();
$body = iconv('UTF-8', 'UTF-8//IGNORE', $body);
$body = iconv('UTF-8', 'UTF-8//TRANSLIT', $body);
include("mpdf/mpdf.php");
$mpdf = new \mPDF('c', 'A4', '', '', 0, 0, 0, 0, 0, 0);
$mpdf->SetAutoFont();
$mpdf->autoScriptToLang = true;
$mpdf->autoLangToFont = true;
$mpdf->WriteHTML($body);
$mpdf->Output('SavePDF.pdf', 'D');
}
}
?>
我遇到的问题是:在输入栏中,我输入了怎么用中文对话,它打印出��������。
If you want to download the source code here is the link to the code
不要使用'c'
作为$mode
参数,这意味着只有PDF核心字体,它们不支持汉字。
试试 '+aCJK'
或 '-aCJK'
。
我的代码如下[mpdf v7.0 from composer]
<?php
require_once './vendor/autoload.php';
//report errors
error_reporting(E_ALL);
ini_set("display_errors", 1);
$config = [
'mode' => '+aCJK',
// "allowCJKoverflow" => true,
"autoScriptToLang" => true,
// "allow_charset_conversion" => false,
"autoLangToFont" => true,
];
$mpdf=new \Mpdf\Mpdf($config);
$mpdf->WriteHTML('Hello World 中文');
$mpdf->Output();
这段代码没问题,你可以试试
要正确显示汉字,我们需要下载一个完全支持中文的字体并将其放置在一个目录中,例如:/app/fonts/yahei.ttf
我们可以使用 ConfigVariables 和 FontVariables 实例化它:
use Mpdf\Config\ConfigVariables;
use Mpdf\Config\FontVariables;
// Get the default font dirs and append the custom path to it
$defaultConfig = (new ConfigVariables())->getDefaults();
$fontDirs = $defaultConfig['fontDir'];
$fontDirs[] = '/app/fonts/';
// Get the default font data and add the yahei font
$defaultFontConfig = (new FontVariables())->getDefaults();
$fontData = $defaultFontConfig['fontdata'];
$fontData['yahei'] = [
'R' => 'yahei.ttf'
];
$mpdf = new \Mpdf\Mpdf([
'mode' => '+aCJK',
'setAutoTopMargin' => 'stretch',
'setAutoBottomMargin' => 'stretch',
'default_font' => 'yahei',
"autoScriptToLang" => true,
"autoLangToFont" => true,
'fontDir' => $fontDirs,
'fontdata' => $fontData,
]);
现在可以显示汉字了
我正在使用 mPDF 将表单输入数据保存为 PDF。对于英语,它工作正常。任何人都可以使用此代码将 HTML 表单数据保存为 PDF。
问题:为了满足我的项目要求,我需要使用中文。我当前的代码不适用于此。
Form.html
<form action='processPDF.php' method='post'>
<label for="name">Name</label>
<input name="name" type="text" id="name">
<input type='submit' name='submit' value='Download PDF'>
</form>
processPDF.php
<?php
header('Content-Type: text/html; charset=UTF-8');
if (isset($_POST['submit'])) {
if (isset($_POST['name'])) {
$name = $_POST['name'];
} else {
$Larmtid = '';
}
if (!isset($error)) {
ob_start();
?>
<div style="padding:20px;">
<p>Name: <?php
echo $name;
?></p>
</div>
<?php
$body = ob_get_clean();
$body = iconv('UTF-8', 'UTF-8//IGNORE', $body);
$body = iconv('UTF-8', 'UTF-8//TRANSLIT', $body);
include("mpdf/mpdf.php");
$mpdf = new \mPDF('c', 'A4', '', '', 0, 0, 0, 0, 0, 0);
$mpdf->SetAutoFont();
$mpdf->autoScriptToLang = true;
$mpdf->autoLangToFont = true;
$mpdf->WriteHTML($body);
$mpdf->Output('SavePDF.pdf', 'D');
}
}
?>
我遇到的问题是:在输入栏中,我输入了怎么用中文对话,它打印出��������。
If you want to download the source code here is the link to the code
不要使用'c'
作为$mode
参数,这意味着只有PDF核心字体,它们不支持汉字。
试试 '+aCJK'
或 '-aCJK'
。
我的代码如下[mpdf v7.0 from composer]
<?php
require_once './vendor/autoload.php';
//report errors
error_reporting(E_ALL);
ini_set("display_errors", 1);
$config = [
'mode' => '+aCJK',
// "allowCJKoverflow" => true,
"autoScriptToLang" => true,
// "allow_charset_conversion" => false,
"autoLangToFont" => true,
];
$mpdf=new \Mpdf\Mpdf($config);
$mpdf->WriteHTML('Hello World 中文');
$mpdf->Output();
这段代码没问题,你可以试试
要正确显示汉字,我们需要下载一个完全支持中文的字体并将其放置在一个目录中,例如:/app/fonts/yahei.ttf
我们可以使用 ConfigVariables 和 FontVariables 实例化它:
use Mpdf\Config\ConfigVariables;
use Mpdf\Config\FontVariables;
// Get the default font dirs and append the custom path to it
$defaultConfig = (new ConfigVariables())->getDefaults();
$fontDirs = $defaultConfig['fontDir'];
$fontDirs[] = '/app/fonts/';
// Get the default font data and add the yahei font
$defaultFontConfig = (new FontVariables())->getDefaults();
$fontData = $defaultFontConfig['fontdata'];
$fontData['yahei'] = [
'R' => 'yahei.ttf'
];
$mpdf = new \Mpdf\Mpdf([
'mode' => '+aCJK',
'setAutoTopMargin' => 'stretch',
'setAutoBottomMargin' => 'stretch',
'default_font' => 'yahei',
"autoScriptToLang" => true,
"autoLangToFont" => true,
'fontDir' => $fontDirs,
'fontdata' => $fontData,
]);
现在可以显示汉字了