thinkphp tcpdf乱码如何解决

thinkphp tcpdf乱码的解决办法:1、下载插件TCPDF;2、通过“class Pdf extends \app\common\controller\Base{...}”方式使用TCPDF;3、将字体改为“$pdf->
SetFont('
cid0cs'
, '
'
, 8)”即可解决乱码问题。

thinkphp6 生成pdf

ThinkPHPTCPDF乱码怎么解决

下载插件TCPDF

composer 安装

composer require tecnickcom/tcpdf

官网

https://tcpdf.org/examples/

官网中有许多的例子,可根据自身的需求选择

使用TCPDF

<
?php
namespace app\admin\logic;

use think\Db;

use TCPDF;

class Pdf extends \app\common\controller\Base
{
public static function conrtact($data)
{
$sno = $data['
sno'
];

$kid_name = $data['
c_name'
];

$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, '
UTF-8'
, false);

$pdf->
SetCreator(PDF_CREATOR);

$pdf->
SetAuthor('
Nicola Asuni'
);

$pdf->
SetTitle('
TCPDF Example 001'
);

$pdf->
SetSubject('
TCPDF Tutorial'
);

$pdf->
SetKeywords('
TCPDF, PDF, example, test, guide'
);

// set default header data
$pdf->
SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.'
001'
, PDF_HEADER_STRING, array(0,64,255), array(0,64,128));

$pdf->
setFooterData(array(0,64,0), array(0,64,128));

// set header and footer fonts
$pdf->
setHeaderFont(Array(PDF_FONT_NAME_MAIN, '
'
, PDF_FONT_SIZE_MAIN));

$pdf->
setFooterFont(Array(PDF_FONT_NAME_DATA, '
'
, PDF_FONT_SIZE_DATA));

// set default monospaced font
$pdf->
SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);

// set margins
$pdf->
SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);

$pdf->
SetHeaderMargin(PDF_MARGIN_HEADER);

$pdf->
SetFooterMargin(PDF_MARGIN_FOOTER);

// set auto page breaks
$pdf->
SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);

// set image scale factor
$pdf->
setImageScale(PDF_IMAGE_SCALE_RATIO);

// set some language-dependent strings (optional)
if (@file_exists(dirname(__FILE__).'
/lang/eng.php'
)) {
require_once(dirname(__FILE__).'
/lang/eng.php'
);

$pdf->
setLanguageArray($l);

}
// ---------------------------------------------------------
// set default font subsetting mode
$pdf->
setFontSubsetting(true);

// Set font
// dejavusans is a UTF-8 Unicode font, if you only need to
// print standard ASCII chars, you can use core fonts like
// helvetica or times to reduce file size.
$pdf->
SetFont('
dejavusans'
, '
'
, 14, '
'
, true);

// Add a page
// This method has several options, check the source code documentation for more information.
$pdf->
AddPage();

// set text shadow effect
$pdf->
setTextShadow(array('
enabled'
=>
true, '
depth_w'
=>
0.2, '
depth_h'
=>
0.2, '
color'
=>
array(196,196,196), '
opacity'
=>
1, '
blend_mode'
=>
'
Normal'
));

// Set some content to print
$html = <
<
<
EOD
<
h2>
Welcome to <
a href="
http://www.tcpdf.org"
style="
text-decoration:none;
background-color:#CC0000;
color:black;
"
>
&
nbsp;
<
span style="
color:black;
"
>
$kid_name<
/span>
<
span style="
color:white;
"
>
PDF<
/span>
&
nbsp;
<
/a>
!<
/h2>

<
i>
This is the first example of TCPDF library.<
/i>

<
p>
This text is printed using the <
i>
writeHTMLCell()<
/i>
method but you can also use: <
i>
Multicell(), writeHTML(), Write(), Cell() and Text()<
/i>
.<
/p>

<
p>
Please check the source code documentation and other examples for further information.<
/p>

<
p style="
color:#CC0000;
"
>
TO IMPROVE AND EXPAND TCPDF I NEED YOUR SUPPORT, PLEASE <
a href="
http://sourceforge.net/donate/index.php?group_id=128076"
>
MAKE A DONATION!<
/a>
<
/p>

EOD;

// Print text using writeHTMLCell()
$pdf->
writeHTMLCell(0, 0, '
'
, '
'
, $html, 0, 1, 0, true, '
'
, true);

// ---------------------------------------------------------
// Close and output PDF document
// This method has several options, check the source code documentation for more information.
$pdf->
Output('
example_001.pdf'
, '
F'
);

return '
example_001.pdf'
;

}
}

注意:

  • 因为TCPDF使用定界符的方式输出html等内容,因此上述代码中的$html一直到EOD必须顶格。

  • 中文乱码的问题,将字体改为$pdf->
    SetFont('
    cid0cs'
    , '
    '
    , 8)即可。

前端显示

<
object :data="
example_001.pdf"
type="
application/pdf"
style="
width:100%;
height:1200px;
"
>
<
/object>


TCPDF是一款用于生成PDF文件的PHP类,广泛被应用于网站生成PDF证书、发票等业务场景。然而,在使用TCPDF生成的PDF文件中,有时会遇到乱码问题,如果不加以解决,不仅会影响PDF文件的美观度,更可能导致内容无法正确表达。下面就来介绍如何解决ThinkPHP TCPDF乱码问题。
一、使用UTF-8字符集
Unicode是一种国际编码标准,使用它能实现全球范围内文本和符号的无损传输。因此,在TCPDF文档生成之前,需要使用UTF-8字符编码将内容进行编码。在生成TCPDF文档时,需要使用setLanguageArray()和setRTL()方法,将内容赋予相应的Unicode编码,从而避免出现乱码。
二、设置字体
TCPDF提供了OpenType和TrueType两种字体文件格式,但先要确保所使用的字体文件包含所需编码。在initialize方法中使用setFontSubsetting()函数设定字体,该函数会自动为文档生成必须的字体信息。如果TCPDF提供的标准字体不能满足需求,可通过addTTFfont()和addFile()方法载入自定义的字体文件。
三、调整编码
如果已经尝试了前两种方法还是存在乱码问题,可能是因为PDF中某些字符在客户端环境中没有对应的编码方式。在这种情况下,可以使用iconv()或mbstring()函数将字符转换成UTF-8编码。这样就能保证字符编码的正确性,避免了在生成PDF时出现乱码的问题。
总结:
本文介绍了三种解决ThinkPHP TCPDF乱码问题的解决方法:使用UTF-8字符集、设置字体和调整编码。其中,使用UTF-8字符集是最简单、最直接的方式,而调整编码通常是针对部分特殊字符出现的乱码问题。不管哪种方法,都能有效避免乱码问题,保证生成的PDF文件的可读性和可用性。希望本文的介绍对大家有所帮助。