TCPDF UTF-8 符号未显示

     2023-03-15     208

关键词:

【中文标题】TCPDF UTF-8 符号未显示【英文标题】:TCPDF UTF-8 symbols not showing up 【发布时间】:2011-07-17 01:31:28 【问题描述】:

我正在使用最新的 TCPDF 版本(5.9)。但是编码有一些奇怪的问题。我需要立陶宛语符号,例如:ąčęėįšųūž。但只得到其中的一小部分。其他仍然像????? 所以我该怎么做 ?我使用默认时间字体(它带有 TCPDF 下载)。

任何帮助将不胜感激。

【问题讨论】:

生成的PDF文档的编码是ANSI。此类信息显示 PDF 阅读器。但怎么可能呢?我在我的代码中定义,编码是 UTF-8... 【参考方案1】:

IIRC,您可以在创建新字体as described here 时定义编码。否则,您必须使用创建字体时定义的编码。听起来 TCPDF 附带的字体都使用 WinAnsiEncoding...a.k.a. 代码页 1252。

笨拙但有效。

【讨论】:

我可以确认这是我如何让它为罗马尼亚字符工作的。我尝试以多种方式生成 Arial (ttf),但最终失败了。当我尝试使用 MyriadPro (utf) 时,它第一次起作用。【参考方案2】:

将 TCPDF 构造函数上的$unicode 参数设置为false,将$encoding 参数设置为'ISO-8859-1' 或其他一些字符映射。

This 会帮助你:

UTF-8 unicode 的默认值:

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

欧洲字符集的构造函数示例:

$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, false, 'ISO-8859-1', false);

【讨论】:

请提及该行应该添加/修改的文件 这绝对行不通,当文本的编码是 utf-8 时。在我的情况下,将参数设置为 >>false, 'ISO-8859-1' 会更糟 @emfi 不要忘记将源文件本身的编码从“UTF-8”更改为“ANSI”【参考方案3】:

TCPPDF 与 utf8 相当棘手。实现您想要的最佳方法是将字体嵌入生成的 PDF 文件本身。您可以使用 TCPDF 包中的 freeserif 字体,它包含所有 utf8 符号,绝对显示任何语言的任何字符,但在输出文件中增加了 ~700kb。如果文件大小无关紧要,这可能是获取所需符号的最简单方法。

您还可以制作自己的字体来嵌入,其中包含您需要的字符。这可能是最好的解决方案,保持通用性和小型化,但更复杂。

或者,您可以使用从系统中获取的核心字体,如果未找到,则替换为替代品。这使得输出文件非常轻,但增加了字体子集以获得奇异字符的必要性。就我个人而言,我没有成功,所以我仍然认为嵌入字体是最好的解决方案,它也恰好更通用..

【讨论】:

freesans 字体的绝妙提示,我会为你投票 10 次,为我节省了很多工作! Freesans 也帮助了我。非常感谢!另外,我想补充一点,如果您像我一样尝试打印表格,则应该在 PHP ($pdf->SetFont('freesans')) 和 HTML 中设置“freesans”字体。只需像这样添加 'style' 属性:... 帮助我显示了一些捷克语字符。 "实现您想要的最佳方式是将字体嵌入生成的 PDF 文件本身。" - 我怎样才能做到这一点? @squirrely 我爱你,parrker9 我爱你 就我而言,只需更改原始 HTML 的内联样式中的字体(为 freesans)(我正在使用 writeHTML)就可以了。不过,您需要在字体文件夹中有字体。【参考方案4】:

为此使用参数TCPDF构造函数的以下代码

$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, false, 'ISO-8859-1', false);

它会帮助你。

【讨论】:

【参考方案5】:

刚刚在尝试使用默认的 Helvetica 字体渲染罗马尼亚语文本时发现了同样的情况。在进行一些调查时,我发现 tcpdf 库将其默认字体(称为“核心”字体)视为 Latin1 字符,因此即使您告诉它使用 UTF-8 编码并设置 unicode 标志,它也会逐字翻译您的文本在渲染之前转换为 Latin1 等价物。该库的默认行为是,如果它找到一个 Latin1 等价物,则翻译它可以找到一个等价物的每个字符,否则它会将字符翻译为“?”。

这可以在以下方法链中的 TCPDF 类中找到: Write() -> Cell() -> getCellCode() -> _escapetext().

_escapetext() 内部,您可以看到它正在检查$this->isunicode,然后检查所选字体以查看其类型是否为core|TrueType|Type1。如果是,它将通过UTF8ToLatin1() 方法为您将字符串“拉丁化”。这是'?翻译正在进行中。

我的建议是使用与您所使用的默认字体类似的自定义 unicode 字体(如 Deja Vu Sans)。在我目前的情况下,这对我有用。

【讨论】:

这确实也是我的问题。感谢您的提示!【参考方案6】:

对我来说,这是一个字体问题。我使用了字体times,而我的本地多字节字符无法正确显示。当我将其更改为freeserif 时,它们工作正常:)

【讨论】:

【参考方案7】:

你有问题从数据库中读取像 Karnātaka 这样的字符并像这样显示 karn?taka 我的意思是 "?" 我们没有'不想然后做以下事情:

    为连接定义字符集 (mysql_set_charset()):

    $con = mysql_connect("localhost","root","");
    
    if (!$con)
    
        die('Could not connect: ' . mysql_error());
    
    mysql_select_db("database_name", $con) or die(mysql_error());
    mysql_set_charset('utf8',$con);
    

    使用$pdf->SetFont('DejaVuSerif', '', 10); 而不是$pdf->SetFont('helvetica', 'B', 12);

    对于 PHP 的 TCPDF 库,从数据库中读取字符如 Rājasthān 而不是 R?jasth?n

【讨论】:

【参考方案8】:

使用 dejavusans 字体,它适用于俄语和拉脱维亚字母。

【讨论】:

【参考方案9】:

CPDF 核心字体中包含一种字体——dejavusans,它显示了所有立陶宛字符。只需添加以下内容:

$pdf->setHeaderFont(Array('dejavusans', '', 10, '', false));
$pdf->setFooterFont(Array('dejavusans', '', 8, '', false));
$pdf->SetFont('dejavusans', '', 10, '', false);

【讨论】:

【参考方案10】:

使用默认的 TCPDF 包测试 dejavusansfreeserif,这两种字体都适用于立陶宛字符。我还输入了几个俄语字符,它们也有效。我用这段代码来测试它:

$this->pdf = new \TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); 
$this->pdf->AddPage();
$this->pdf->SetFont('dejavusans', 'B', 20); // UTF8 fonts with lithuanian support: freeserif, dejavusans
$this->pdf->Write(0, 'ąžūčšęėųįĄŽŪČŠĘĖŲĮ Превед Кросавчег!', '', 0, 'C', true, 0, false, false, 0);

【讨论】:

【参考方案11】:

将 TCPDF 与 ฿、포 等特殊字符一起使用 您需要使用 unicode 字体:

    下载字体在这里: ftp://ftp.fu-berlin.de/unix/X11/multimedia/MPlayer/contrib/fonts/arialuni.ttf.bz2

    创建一个测试pdf文件并将此字体加载到TCPDF 示例:

    $fontname = $pdf->addTTFfont('/var/www/app/images/fonts/arialuni.ttf', 'TrueTypeUnicode', '', 32);

    这将创建如下字体:

    应用程序/库/tcpdf/fonts/arialuni.ctg.z 应用程序/库/tcpdf/fonts/arialuni.php 应用程序/库/tcpdf/fonts/arialuni.z

    现在您可以使用以下命令设置新字体: $pdf->SetFont('arialuni', '', 10.5);

    现在您可以使用特殊的 unicode 字符,如 ฿ 等....

来源: http://myridia.com/dev_posts/view/852

【讨论】:

我使用的是 6.2.12 版本,这里不存在 $pdf->addTTFfont() 方法?你或其他人有任何信息吗? @emfi,现在“addTTFfont”是一个静态方法。您可以在此处找到示例:github.com/tecnickcom/TCPDF/blob/…【参考方案12】:

将字体设置为 freeserif 即可。 我测试过。

$pdf->SetFont('freeserif', '', 14, '', true);

【讨论】:

不敢相信花了将近两个小时才弄明白 谢谢我试图在页眉/页脚中写希腊语,只有这个答案对我有帮助。我必须通过htmlentities() 传递字符,现在freeserif 字体可以正确显示它们。【参考方案13】:
$fontname = $pdf->addTTFfont('C:\xampp\htdocs\copyshop\fonts\07-TH-Sarabun-PSK\THSarabun.ttf', 'TrueTypeUnicode', '', 32);
    $pdf->SetFont($fontname, '', 16,'',FALSE); //Working

【讨论】:

【参考方案14】:

我对罗马尼亚语字符也有同样的问题,问题不在于编码、LC_CTYPETCPD 的其他设置,而是我使用的字体。 我提到我使用带有 Courier 字体的 TWIG 模板。 您可以尝试将字体更改为 freeserif

【讨论】:

【参考方案15】:

更改字体以正常显示₹和立陶宛符号

$pdf->SetFont('cid0cs', '', 12);

【讨论】:

tcpdf 中的 HTML 实体

...09-2507:11:09【问题描述】:我正在使用tcpdf生成pdf,但是在显示其中包含html实体的字符串时遇到了问题。例如,字符串RAHİB显示为RAH?B而我只想解码此实体并将其显示为RAHİB。我使用UTF-8作为字符集。我尝试使用html_entity_d... 查看详情

未使用 tcpdf 自定义字体

】未使用tcpdf自定义字体【英文标题】:tcpdfcustomfontisnotbeingused【发布时间】:2013-07-2706:12:04【问题描述】:我正在使用TCPDF库通过PHP生成PDF文件。我想使用自定义字体,所以我使用addTTFfontmethod添加我的自定义TrueType字体文件。我... 查看详情

在视图中使用表时的 TCPDF“未定义索引:cols”

】在视图中使用表时的TCPDF“未定义索引:cols”【英文标题】:TCPDF"Undefinedindex:cols"whenusingtablesinview【发布时间】:2012-01-3008:06:49【问题描述】:我正在使用CakePHP1.3制作一个在线应用系统。我尝试使用基于视图的TCPDF打印... 查看详情

utf-8 字符未在 chrome 中显示 [关闭]

】utf-8字符未在chrome中显示[关闭]【英文标题】:utf-8charactersnotdisplayinginchrome[closed]【发布时间】:2013-05-1512:56:09【问题描述】:遇到html特殊字符无法在chrome中正确显示的问题,请参阅ExamplePage我已经检查并重新保存了项目中的每... 查看详情

现场未显示欧元符号

】现场未显示欧元符号【英文标题】:Eurosignnotshowingonsite【发布时间】:2011-10-1205:46:42【问题描述】:我的一个字段(这是一个latin1_swedish_ci)似乎在字段内部的PHPMYADMIN中显示欧元符号很好。但是,当我尝试以表单的形式在网站... 查看详情

™ 来自数据库未显示符号

】™来自数据库未显示符号【英文标题】:™fromdatabasenotshowingsymbol【发布时间】:2014-03-2104:47:10【问题描述】:在我的数据库中,某些产品旁边有一个™符号。这由™记录在数据库中。但是,当我从数据库中... 查看详情

SVG 符号未在 Firefox 中显示

】SVG符号未在Firefox中显示【英文标题】:SVGsymbolsnotbeingdisplayedinFirefox【发布时间】:2015-02-0302:01:19【问题描述】:我目前正在使用SVG符号来显示图标。这适用于IE、Chrome和Safari,但图标不会显示在Firefox中。***上有很多类似的问... 查看详情

性能:内核模块符号未显示在分析中

】性能:内核模块符号未显示在分析中【英文标题】:Perf:kernelmodulesymbolsnotshowingupinprofiling【发布时间】:2017-06-0210:21:13【问题描述】:加载和运行内核模块,然后通过perf进行分析。$perfrecord-a-g--call-graphdwarfsleep30\'$perfreport性能... 查看详情

卢布 (₽) 符号未在 iOS 上显示?

】卢布(₽)符号未在iOS上显示?【英文标题】:Ruble(₽)symbolnotshowingoniOS?【发布时间】:2015-05-2216:25:45【问题描述】:我正在开发一个电子商务应用程序,其中一项功能是用户可以选择他们的货币。现在,我注意到当有人选择俄... 查看详情

TCPDF 创建 PDF 耗时太长,此时如何显示加载效果

】TCPDF创建PDF耗时太长,此时如何显示加载效果【英文标题】:TCPDFTakestoomuchtimeforcreatingPDF,Howtoshowloadingeffectinthistime【发布时间】:2015-05-2712:57:31【问题描述】:我有一个锚标记,带有指向页面的href,它将使用TCPDF生成PDF。生成PD... 查看详情

Discord.js v13 机器人显示未定义而不是表情符号

】Discord.jsv13机器人显示未定义而不是表情符号【英文标题】:Discord.jsv13botdisplaysundefinedinsteadofemoji【发布时间】:2022-01-0512:53:41【问题描述】:我希望我的机器人显示来自另一台服务器的表情符号,但我得到了未定义的表情符号... 查看详情

TCPDF - 在 iPad 上查看 PDF 时不显示嵌入的 ttf 字体

】TCPDF-在iPad上查看PDF时不显示嵌入的ttf字体【英文标题】:TCPDF-embeddedttffontsnotshowingwhenPDFisviewedoniPad【发布时间】:2013-02-2305:01:48【问题描述】:我创建了一个使用tcpdf动态创建PDF并将字体嵌入PDF的网站。用户可以从一系列标准... 查看详情

无法解决方法/符号在 Eclipse C 中未突出显示

】无法解决方法/符号在EclipseC中未突出显示【英文标题】:Method/Symbolcannotberesolveddoesn\'thighlightinEclipseC【发布时间】:2016-01-0613:26:30【问题描述】:我的EclipseforCDT不会突出显示我没有声明(并且之前定义过)的新调用函数的错误... 查看详情

TCPDF:为啥即使单击不同单元格的按钮,“生成 pdf”按钮也会显示相同的数据?

...:为啥即使单击不同单元格的按钮,“生成pdf”按钮也会显示相同的数据?【英文标题】:TCPDF:why"generatepdf"buttonshowsthesamedataevenwhendifferentcell\'sbuttonisclicked?TCPDF:为什么即使单击不同单元格的按钮,“生成pdf”按钮也会显... 查看详情

如何修复在 Linux/Fedora 31 上的 R 中未正确显示的度数符号

】如何修复在Linux/Fedora31上的R中未正确显示的度数符号【英文标题】:HowtofixdegreesymbolnotshowingcorrectlyinRonLinux/Fedora31【发布时间】:2020-06-2415:24:37【问题描述】:我使用的任何地图:ggplot()+geom_sf()生成预期的地图,但未正确显示... 查看详情

静态 Swift 框架未能通过 CocoaPods 验证,并显示“未定义的架构符号”

...态Swift框架未能通过CocoaPods验证,并显示“未定义的架构符号”【英文标题】:StaticSwiftframeworkfailsCocoaPodsvalidationwith`Undefinedsymbolsforarchitecture`【发布时间】:2020-11-2000:25:21【问题描述】:我正在使用Xcode12.2,并且正在开发一个Swif... 查看详情

tcpdf说明文档(代码片段)

TCPDF说明文档一、首先调用TCPDF文件require_once(‘tcpdf.php‘);二、实例化TCPDF类页面方向(P=肖像,L=景观)、测量(mm)、页面格式 $pdf=newTCPDF(‘P‘,‘mm‘,‘A4‘,true,‘UTF-8‘,false); 三、设置文档信息设置文档信息----文件创... 查看详情

浏览器以 UTF-8 而非 windows-1251 显示页面

...述】:我有一个网站,它只包含html,并且有很多西里尔符号。浏览器正在设置UTF-8编码,而不是应有的windows-1251。所以,英文字母显示很好,但每个西里尔符号都像����这是我的设置:RHEL6.3(2. 查看详情