直到最近,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'