mPDF (PHP) 无法识别 html 复选标记
mPDF (PHP) does not recognize html check mark
我在我的网页上的 HTML 中显示了一个 table,其中正确显示了复选标记(我使用 ✔
作为粗体复选标记)。
我正在使用经典-asp 来显示 HTML。 html 构建(tableOutput)随后被发布到 PHP 脚本($output = $_POST["output"]),该脚本使用 mPDF.php(版本 6.0)来将相同的 HTML table 打印为 PDF 并且复选标记无法正确打印(%u2714 打印在我的 PDF 上)。其余table都打印正确,只有对勾有问题
我尝试在 mpdf\ttfonts 文件夹中添加 Symbola.ttf 和 Symbola_hint.ttf 字体,但没有成功。
HTML(经典-asp):
tableOutput = tableOutput & "<TD class='center pass_x' style='font-family:symbola;'>✔</TD>"
PHP (create_report_pdf.php):
$output = $_POST["output"]; //This is the html buildup tableOutput discussed previously
$header = Irrelevant;
$footer= Irrelevant;
$mpdf = new mPDF( 'utf-8', 'A4-L', 0, '', 5, 5, 20, 20);
$mpdf->allow_charset_conversion = true;
$mpdf->WriteHTML($style,1);
$mpdf->SetHTMLHeader( $header );
$mpdf->SetHTMLFooter( $footer );
$mpdf->WriteHTML( $output );
$mpdf->Output($temp ,'F' );
config_fonts.php(我在mpdf\ttfonts文件夹中添加了symbola.ttf和Symbola_hint.ttf):
$this->fontdata = array (
"symbola" => array (
'R' => "Symbola.ttf",
'I' => "Symbola_hint.ttf",
),
CSS(PHP $style 变量指向 create_report_pdf.css):
.report-table{
border: 1px solid black;
border-collapse: collapse;
font-size: 7pt;
width: 100%;
}
th,td{
font-size: 7pt;
border: 1px solid black !important;
vertical-align : middle;
}
.center{ text-align: center; vertical-align: middle; }
INPUT{
border-color:#ffffff !important;
}
.pf{ width: 45px; }
.fix-cell{ width: 90px; }
.dr-column, .dr-input{ width: 100px; }
.comments, .comments-input{ width: 130px; }
非常感谢您的帮助
有两种可能的解决方案:
- 通过执行以下操作,将
%u2714
手动替换为相应的 html 实体 ✔
:
$output = str_replace('%u2714', '✔', $output);
- 实施更通用的方法来处理所有此类特殊字符。该方法基于以下事实:
%uXXXX
是 URL-encoding Unicode 字符的 non-standard 符号方案。因此,您需要将 %uXXXX
表示法转换为 HTML 实体表示法 &#xXXXX;
,然后可以通过 html_entity_decode. 将其解码为实际的 UTF-8
$output = preg_replace('/%u([0-9A-F]+)/', '&#x;', $output);
$output = html_entity_decode($output, ENT_COMPAT, 'UTF-8');
我在我的网页上的 HTML 中显示了一个 table,其中正确显示了复选标记(我使用 ✔
作为粗体复选标记)。
我正在使用经典-asp 来显示 HTML。 html 构建(tableOutput)随后被发布到 PHP 脚本($output = $_POST["output"]),该脚本使用 mPDF.php(版本 6.0)来将相同的 HTML table 打印为 PDF 并且复选标记无法正确打印(%u2714 打印在我的 PDF 上)。其余table都打印正确,只有对勾有问题
我尝试在 mpdf\ttfonts 文件夹中添加 Symbola.ttf 和 Symbola_hint.ttf 字体,但没有成功。
HTML(经典-asp):
tableOutput = tableOutput & "<TD class='center pass_x' style='font-family:symbola;'>✔</TD>"
PHP (create_report_pdf.php):
$output = $_POST["output"]; //This is the html buildup tableOutput discussed previously
$header = Irrelevant;
$footer= Irrelevant;
$mpdf = new mPDF( 'utf-8', 'A4-L', 0, '', 5, 5, 20, 20);
$mpdf->allow_charset_conversion = true;
$mpdf->WriteHTML($style,1);
$mpdf->SetHTMLHeader( $header );
$mpdf->SetHTMLFooter( $footer );
$mpdf->WriteHTML( $output );
$mpdf->Output($temp ,'F' );
config_fonts.php(我在mpdf\ttfonts文件夹中添加了symbola.ttf和Symbola_hint.ttf):
$this->fontdata = array (
"symbola" => array (
'R' => "Symbola.ttf",
'I' => "Symbola_hint.ttf",
),
CSS(PHP $style 变量指向 create_report_pdf.css):
.report-table{
border: 1px solid black;
border-collapse: collapse;
font-size: 7pt;
width: 100%;
}
th,td{
font-size: 7pt;
border: 1px solid black !important;
vertical-align : middle;
}
.center{ text-align: center; vertical-align: middle; }
INPUT{
border-color:#ffffff !important;
}
.pf{ width: 45px; }
.fix-cell{ width: 90px; }
.dr-column, .dr-input{ width: 100px; }
.comments, .comments-input{ width: 130px; }
非常感谢您的帮助
有两种可能的解决方案:
- 通过执行以下操作,将
%u2714
手动替换为相应的 html 实体✔
:
$output = str_replace('%u2714', '✔', $output);
- 实施更通用的方法来处理所有此类特殊字符。该方法基于以下事实:
%uXXXX
是 URL-encoding Unicode 字符的 non-standard 符号方案。因此,您需要将%uXXXX
表示法转换为 HTML 实体表示法&#xXXXX;
,然后可以通过 html_entity_decode. 将其解码为实际的 UTF-8
$output = preg_replace('/%u([0-9A-F]+)/', '&#x;', $output);
$output = html_entity_decode($output, ENT_COMPAT, 'UTF-8');