mpdf 错误地显示 ascii<115
Posted
技术标签:
【中文标题】mpdf 错误地显示 ascii<115【英文标题】:mpdf displays ascii<115 incorrectly 【发布时间】:2013-06-07 12:47:33 【问题描述】:直到最近,mpdf 对我来说还不错。现在似乎无法显示 ascii 值小于 115(字母 s)的符号。我的系统管理员无法回忆对系统的任何重大更改。我没有对我的代码进行任何更改。这是一个重现该问题的测试脚本:
<?php //PHP 5.4.15
include('/opt/local/apache2/htdocs/mpdf/mpdf.php'); // mpdf 5.6 (and previously 5.5), apache 2.4
$good='stuvwxyz|'; //ascii >=115
$bad='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr';
$mpdf=new mPDF();
$mpdf->Writehtml("$bad <br> $good"); //note that <br> renders just fine
$mpdf->Output();
exit;
?>
产生这个输出:
我认为这一定是字体问题。但我使用的是默认的嵌入式 mpdf 字体 (DejaVu)。任何想法为什么会发生这种情况?
没有错误:
mpdf 不会抛出任何错误,即使打开调试也是如此 apache 错误日志什么都没有预计到达时间 1:
从 命令行 运行上述脚本会生成一个有效且可读的 pdf 文件。使用的 php 和 mpdf 版本是相同的。 仅在从浏览器运行时才会出现此问题(已测试 FF、IE、Chrome)。使用 Acrobat Reader、Ghostwriter 和 Evince 无法读取问题文件。
预计到达时间 2:
我们已将问题本地化到我们的生产 Apache 2.4 服务器。我们的开发服务器(最小安装)毫无困难地输出测试脚本。
这些是在我们的生产服务器上运行的模块:
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_core_module modules/mod_authn_core.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule access_compat_module modules/mod_access_compat.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule reqtimeout_module modules/mod_reqtimeout.so
LoadModule filter_module modules/mod_filter.so
LoadModule mime_module modules/mod_mime.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule env_module modules/mod_env.so
LoadModule headers_module modules/mod_headers.so
LoadModule unique_id_module modules/mod_unique_id.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule version_module modules/mod_version.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_express_module modules/mod_proxy_express.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so
LoadModule unixd_module modules/mod_unixd.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule dir_module modules/mod_dir.so
LoadModule userdir_module modules/mod_userdir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule php5_module modules/libphp5.so
LoadModule security2_module modules/mod_security2.so
ETA对输出文件的一些分析:
% python pdfid.py mpdf.pdf
PDFiD 0.0.12 mpdf.pdf
PDF Header: %PDF-1.4
obj 13
endobj 13
stream 4
endstream 4
xref 1
trailer 1
startxref 1
/Page 1
/Encrypt 0
/ObjStm 0
/JS 0
/javascript 0
/AA 0
/OpenAction 1
/AcroForm 0
/JBIG2Decode 0
/RichMedia 0
/Launch 0
/EmbeddedFile 0
/Colors > 2^24 0
% python pdf-parser.py mpdf.pdf
PDF Comment '%PDF-1.4\n'
PDF Comment '%\xe2\xe3\xcf\xd3\n'
obj 3 0
Type: /Page
Referencing: 1 0 R, 2 0 R, 4 0 R
<<
/Type /Page
/Parent 1 0 R
/MediaBox [0 0 595.280 841.890]
/TrimBox [0.000 0.000 595.280 841.890]
/Resources 2 0 R
/Group
<<
/Type /Group
/S /Transparency
/CS /DeviceRGB
>>
/Contents 4 0 R
>>
obj 4 0
Type:
Referencing:
Contains stream
<<
/Filter /FlateDecode
/Length 132
>>
obj 1 0
Type: /Pages
Referencing: 3 0 R
<<
/Type /Pages
/Kids [3 0 R ]
/Count 1
/MediaBox [0 0 595.280 841.890]
>>
obj 5 0
Type: /Font
Referencing: 6 0 R, 7 0 R
<<
/Type /Font
/Subtype /Type0
/BaseFont /MPDFAA+DejaVuSerifCondensed
/Encoding /Identity-H
/DescendantFonts [6 0 R]
/ToUnicode 7 0 R
>>
obj 6 0
Type: /Font
Referencing: 8 0 R, 9 0 R, 10 0 R
<<
/Type /Font
/Subtype /CIDFontType2
/BaseFont /MPDFAA+DejaVuSerifCondensed
/CIDSystemInfo 8 0 R
/FontDescriptor 9 0 R
/DW 540
/W [ 32 [ 286 361 414 754 572 855 801 247 351 351 450 754 286 304 286 303 ]
48 57 572 58 59 303 60 62 754 63 [ 482 900 650 661 688 721 657 624 719 785 355 360 672 598 921 787 738 605 738 677 616 600 758 650 925 641 594 625 351 303 351 754 450 450 536 576 504 576 532 333 576 580 288 279 545 288 853 580 542 576 576 430 461 361 580 508 770 507 508 474 572 303 572 754 ]
]
/CIDToGIDMap 10 0 R
>>
obj 7 0
Type:
Referencing:
Contains stream
<<
/Length 345
>>
obj 8 0
Type:
Referencing:
<<
/Registry (Adobe)
/Ordering (UCS)
/Supplement 0
>>
obj 9 0
Type: /FontDescriptor
Referencing: 11 0 R
<<
/Type /FontDescriptor
/FontName /MPDFAA+DejaVuSerifCondensed
/Ascent 928
/Descent -236
/CapHeight 928
/Flags 4
/FontBBox [-693 -347 1512 1242]
/ItalicAngle 0
/StemV 87
/MissingWidth 540
/Style
<<
/Panose <0 0 2 6 6 6 5 6 5 2 2 4>
>>
/FontFile2 11 0 R
>>
obj 10 0
Type:
Referencing:
Contains stream
<<
/Length 302
/Filter /FlateDecode
>>
obj 11 0
Type:
Referencing:
Contains stream
<<
/Length 11270
/Filter /FlateDecode
/Length1 19752
>>
obj 2 0
Type:
Referencing: 5 0 R
<<
/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
/Font
<<
/F1 5 0 R
>>
>>
obj 12 0
Type:
Referencing:
<<
/Producer (\ufffd\ufffd)
/CreationDate (20130610101337-03'00')
/ModDate (20130610101337-03'00')
>>
obj 13 0
Type: /Catalog
Referencing: 1 0 R, 3 0 R
<<
/Type /Catalog
/Pages 1 0 R
/OpenAction [3 0 R /XYZ null null 1]
/PageLayout /OneColumn
>>
xref
trailer
<<
/Size 14
/Root 130R
/Info 120R
/ID [<7e16ee374f9301bc714ec37fbcaf2e35><7e16ee374f9301bc714ec37fbcaf2e35>]
>>
startxref 14000
PDF Comment '%%EOF'
【问题讨论】:
【参考方案1】:我们还没有弄清楚这个问题,但是可以通过只使用核心字体来规避它。为此,请以这种方式调用 mPDF:
$mpdf=new mPDF('c');
我希望这对受此奇怪问题困扰的其他人有所帮助。
【讨论】:
以上是关于mpdf 错误地显示 ascii<115的主要内容,如果未能解决你的问题,请参考以下文章
升级到 PHP7.1 和 MPDF 显示错误 - 在第 30648 行遇到非数字值
MPDF pdf 未在任何浏览器中打开,Codeigniter 中未显示错误
mpdf:如何使用包含大页面的 mpdf 生成 pdf 文件