DOMPDF拼接输出

时间:2013-03-14 14:30:02

标签: php dompdf

1月底,我编写了一个脚本,使用DOMPDF库从HTML生成PDF文件。

HTML如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

    <head>
        <title>test</title>

        <style type="text/css">

            *{
                color:#715335;
                font-family:Helvetica, Arial, Serif;
            }

            .i{font-style: italic;}
            .b{font-weight:bold;}

            h1, h2, h3, h4, h5, h6{display:inline;}
            h1{font-size:350%;}
            h3{font-size:275%;}
            h6{font-size:150%;}
            span{font-size:125%;}
            div{background-color:#fedebd;}

        </style>
    </head>

    <body>

        <div align="center" style="margin-left:10px;margin-right:10px;padding:0px;">
            <br />
            <br />
            <br />
            <br />
            <img src="img/banner/Bronze/top.gif" />
            <br />
            <br />
            <h1 class="b" style="color:#715335;">Bronze Certificate</h1>
            <br />
            <br />
            <h3 class="i" style="color:#715335;">Ruth Candlish</h3>
            <br />
            <br />
            <h6 style="color:#715335;">This certificate has been awarded to you for earning over 250 points on the LEAP System.</h6>
            <br />
            <br />
            <img src="img/barry.gif" />
            <br /><br />
            <img src="img/badge.gif" />
            <br />
            <h6 class="i">Date Awarded: 14-03-2013</h6>
            <br />
            <br />
            <span>Awarded by: Middle School</span>
            <br />
            <br />
            <img src="img/banner/Bronze/bottom.gif" />
            <br />
            <br />
            <br />
            <br />
        </div>

    </body>
</html>

我正在使用两段代码来保存和呈现PDF文件。一个是简单的compile函数,它根据输入变量(即学生姓名,分数等)生成HTML,另一个是:

/*
 * @param   string  $data           : <HTML> from $this->compile();
 * @param   string  $size           : "a1","a2","a3","a4","a5","a6"...
 * @param   string  $orientation    : "landscape", "portrait"
 * @param   string  $name           : The name of the student, used to prefix the name of the output file
 */
public function save($data, $size, $orientation, $name, $type){
    $dompdf = new DOMPDF();
    $dompdf->set_paper($size, $orientation);
    $dompdf->load_html($data);
    $dompdf->render();
    $data = $dompdf->output();

    $filename = 'data/'.$type.'/'.$name.' - '.date("d-m-Y").'.pdf';
    return file_put_contents($filename, $data);
}

当时,这个脚本运行得很好。 PDF已创建并保存,带有图像。

我今天回过头来找两件事:

  1. 图片在保存的PDF中不起作用,但没有X表示它们缺失
  2. 有大量的乱码文本输出,我怀疑它可能是一个字符形式的图像
  3. 以下是一些输出:

    ‰PNG
    
    
    IHDR»<  û;8úPLTEÿÿÿÅ__ÀVVÉlií%š$î:+ÃaUª4&ïK6ïD2ðW>ðQ9ñaEñ\BórU½VAònQòjMñeIòˆlôƒeô‚eô€bó}_ô`óz\ô|\óxZôyYóvXôwWö–yö’tõqõoõ‹mõˆjõ†hõ…fô‚cô~^ô|[¥:ù°—ø¥Š÷Ÿƒö›~öoökø‹iõ‰gÃdDúº¢ø«ö—uÎ|\±L&úìÆo<º`*Ø–hÞ¥uÕ‘EÍ„,Åxâ¯j羀ߨSÙ /î·æºUä¶3íÍfôÝÛ­øæ˜þçƒþëŒþë†óÞzÿê{üålå¿ûî›ôç•ÿî‘ùèŠþî‰þëÿì~þìzþëwõápÿësóÞXÿèYÿæSî×LìÓ2ùÙîÍûØýÛûô»úñ­úï£îã–úí”ÿò•ùìùìùìŠøëˆøë…øë„øë‚øê€øê}ÜÏnøéz÷éxøétøéoøèjþëm÷çfþêg÷æ\þë_ÿçIûåCùä<þä5þã,ïÕ#ÿâ#þâÿáíÓõ×
    øÝ
    ÿáüÜ    ýÝûÛÿÞüÝÿÞõêŽùí‡ÿô÷ça÷çU÷åLöã+ñÛþèøâôÞÿåþöŒÿôuÿòHþì&õãöâÿîþôVýñÿúkþø8ÿþ¡ÿÿŒÿþxÿþYÿþFÿý-ÿþÿýØé½Ðå¯Ëâ§ÆàŸÂÞ˜¿Ü”¼ÚŽ¹Ù‰±Õ|­Óu¨ÑlžÍY˜ÊN¶Ø…´×£ÏcÆ<zÀÄ/…Æ;‰ÉU’ÍPÍGËiœÒg›Òb˜Ð]–ÐZ”Îu¢Ör ÕnŸÔkÓe™Ña–Ï“´Þ‹¯Ü…¬Û€©Ù}¦Øy¤×ržÓoœÓl™Ð²È礿㙸à—9‘(ˆ$~"¸@Zœ.³3L¯'B¥7¾QeŸ+«'6Ä`eŸ!'™"•¿QU½LP»EJ¯48ª.2¦*-£%*›$ÂXZ·AC³<=M$æ‚tRNS@æØf,IDAThÍÚwXTwºð±D(d2E)S£ˆn¢‘&EÁÜ«fe]MŒ’½H‡À‚ÛM\“Ñ{APÈf€Xh*  }Á¬fM@©áyîïô33ewó¸÷ý#É3çŒóÉ÷yϯiß~îÜßΞ9súô©'âããbcböí=~ìÈîOwîð÷óòòÚ¾yËÎ]»;¾o_Ll\|ü‰§NŸ>sæì¹sç¾ßÿ%ím•5‡Ëe±Õ?û>á»ïÎ; Øw}¶cûv/¯CÛwìüt÷‘cÇ÷‰%ègÏ~—ð··$ç2ù¦|Ó¥|º5ùÓý¸ýlÇsÿ|'fßòÙ.ؾ²ÇŸ8u
    ØϼM;‡Éä±--,,yæ|æÌì[6ÿÿ°[šs¹–¶6k–/_naÊgLgÏËåÀ.eeíº •H$Ivüç…¬Ý<.“¥ÅÄŠÅ'Ôìß¾
    ; ³@ê¶+l–¯¶15§SÚÓO¸¯³÷ï“müè#O©§ÀÁQ°á?7§nu¹ot»˜–æážþÖí‡Áe[[ü
    ›Õ¶|sJ{¶ÊÙ]å$sëú=·
    &'›\{¤®]_ˆ<ÃNrùG“ÙoÝÎg›,aÒ9,+K8z¶9>Ú¨Ûû=ävn²þuYY‹Æ¤Á|_‰ëÈ&©ëàEnóåòu‹ÞºÅ ,1Å¢_ckÊ£´'÷Û½t–ywoe¹õ…»D²adÖœÁ9Q¢9“º¼ÿv6ÇLßÈÐÀl1Ž~…-Zµr_'ëwÊÊHa»ëð†ó.ƒGDƒAÏF1°g§ÿîöFe]²iš‹,®¡ž1À/1aÒÙ,+.>Ljô»{\·½l]·§[·ƒT2Øá~¹tyî¯ëuw>™þûÚÔ)êë”õ•
    j=›m¨£¿è—˜ñy¶•—2÷ôd{;;ç´L™ÓÔ¤›t§ÔÁôŒàÏÒ
    "™ÌM öX´hÊã÷µ×(šÛZž>m©­TP]·þÐlÞ= G£gó(í'NˆãÓäiÐø.ÊsÓ!   ˜›àñýˆH¶w_š<Vœý{÷L›BÙô¨µµåé“'
    •Í7XðYºîzÉ¥¶k¬  û!|^ÑžWÿu»¢NYÛø ½
    Ò7V·QÜa²Òp®®½   ÛÜrFö7® þe;ˆ½JQWÛØð¨­õéCeðækõæÎCð¸\>~åßl¯©©º_¥¨W6AÑ?l¬¤ºÇ”g©?wî<]Æt61­ÒöïOÈÍÍÍ
    ô²¬gd2´ž‘J¡õ(ðY"øT.—Cýž
    Ý›UÊþ™ÚƒÏS_hTÞ¯¨®F£oy@ù´Ò̵L=]]ý%,¶)‡dÏøj=ZÎH9!åÊ+777øsøäÛ2ffŠAm//¿¿ºªŠþQ#µÆḒÍá¬b3äÿ’»íWP TPuCÕß××70ÐÛÛÛÓÓÓÕÕõìÙàà3ðïžžÞ^p¥»Üîÿõ“Ü¿Ì„.Œõ;xÐ+ü°¿öµšŽò²òŠûpô5j¦±ƒQžÇeré<µ¿Ìøj¨shhèÅ‹ßž?Ÿ˜xùr|||llljjrrttddxö«Y³ç€šõjxdtrrjl|üåÄÄóß^uÎÌ.û{<àëx4PëbûÏUeŽÌP3øóˆú:ãÛwþYû¶™Øý"ÃÃC‚ÀÖ÷À°(íËŠÇåeeHôÕJEû?d?™’²ŒÒ>ì£ýÕ4vÕÐW¹_¿ùB#G   Ãμ…½¡¹ —•—W(š(‡™éË'%×îWÌþ³Oõ
    ŒŽööŽ¾îéÉgöÎw¾Ï8ùæ‰J:Gª}½þçŽ
    _Qÿ¸ŠúO°bsè\:.:›´ÛöNÈ]ÛßÁÃöEž.}}Ž›æ÷
    opîqøÂaµMŽaöe)d{~IqI±ö/N<)ð£ ÕÕt(+«?+ë(åÖï3ø¦|&T|¦©ùÒxø(ùW’½ßþÝ爽oQÖ Uâ:ÇQ"qtØšå𳯛@íö¹   „ýfaÁ­7ò
    ó5;ðhòŤh½0ø¼0˜’§¬yüø±òå5“ÉcY‚íÞ
    ¸,8æ¦Llç”û  fïv¶ëÇì¢+RéŽÍ_ÉöÍRéç¸}jÊy³¯ÏM ~ÐoÞ¸þÓ¢[š¹““/^LÑG†Sñ¯-&ƒÁ²µ±Y³:%X
    êãÕ6<óPü—_Cƒ$dW¹ÛwöOwnÙ.ñ’Ú¼c'aï]ä1€ô4Döü’’‚| ÿ)¯DóçC¯%ǂ裣„”¾”A·²]a‹ÄŽþ|ü±¥ùR|ùRJƲΨÝYE¶ï8ôÀB’l_çƒÚUCÿ›q    ÿ‘‚¢"€Ïm£e
    Jºz59>6qºØÛ444´7h]á3¹`£daâm`<Ð[˜›[A×} †Çìãã¨=õÐpïè&éÄ>Û}ú{ç²\Ò£š»´¨Ž¾@«ã…þ i¢Â)SoR**ŠJ¸=Ï6粬¬,¡³HoCDomn
    ßïñ±q0Î öY=¯ûlÈîŽÚŸCíîCØKïܾ]TXœŸG1Ôøú‡PÈkšuíÚÚÚZ[[Û•jc
    ŸÎa¿g
    ôšÑ¯^Í[
    ÿMÆ5Ððˆ=¹Ó>m\åí¦šBsïÃrïqHêê‰uúŵ¿PmËÝOüLþí{wJoCÑkõÌkª¹¹®¡­åáç`×ôäÉßÿþôAU}-~Õò—Ãf³¬µ£ÿØv)¼*ƒg§°Ý9ÛÝCîá$KrÚbowutõƒúýŠ§ËÙF7yœ“ر«–edfÕ›ÅwïݽSZZT’7sºRQÛÞ
    Uì
    ô­•ÄÜÊaðt gY[kD¿fõÆð=pÓ v±8N.ƒ6¬ˆ,ßáqf·Ht|¯ìWÅÙ¨´LŠÉ‘_Pz÷îÛ%±…
    ¡E°0Tctoª¬ihoo‡úÂ#úbÇͤ3Mïs9µèW }c½ž`¿É¸üN'j—;'eîE^@§íÛ!;Ø8eÎÈãâQ{¿ê+òè*/¯zXµäÂȈðÐàPad¤Ú¼
    vÙ`€Úý£ªFÌÎ51[̤Ž~¹%r´šŒ4¸}Ê[†¼øØrÚ7mÆì]³   {§]nÊ%
    å­›ÚýÀÀØ×÷@àaÒXÓ¨¨­­ônüf,x.}‰™‰Éb=¦_nn rÿ{HEaOõstpü“d‹¶ý9˜˜R´»C«¢Â¼BuáŒ"–’ʺæfe­VôOUµcv33ýûPôxã@ø5|Ä~)%Ǿó7¼g^îÉ„íRçƒÓì¤Z=óRõnnÆ7jʼ‚âââ’’bõ¦‰
    õó‚^ZáúDòJø<‹þŒú'-•hÓpè†Kàè™<:=‹4àX.F—d)9—:‡P{\Zú²LêЖï=Ô¾73-Ë]õ‰ú“ZPR’ŸêV^IañqxD€€?ŠGô^‰^èÅææ*E=¤oj"Gÿôa½³@z´ëÙøLìhîPðë;1{nôƒ  iNê…O5ì*»œŒÿQ£ç…Øõë?ºQH5¡AAï‡ã}}…èÊ ¥¾ìóHÑ·#Ñ?li®ÅìFF††@FÏe]¿Â
    ³ÓR~¼:¤š@í1ÓØáw”}â—m9äØóón‚ºqãÌÇÇIÿÈ°ÐOŠÞ×íø¶fEuÀÃú¦Æâ™%Ùa=½)“žYö{¨~…³ŸLÉqÿõùLí¿¬ÏI¹FŠ½ôË­[°¿o‚…Âp ?Fë}F"[›`ƒ]G_§Ä£oki%ìÆ5¢ÇºÞÖ·ÓR.çØuÂs“Xž–)ƒS/`v©ô‘H–™™–ÏMÝ/ü1ƒDÏÃ:ªG¢¿Uˆ\#z„îÁ¤èŒôGí•`
    ð•h×#Ïlka_¨oðXô ëyØ"Á‚ÅÀí>)9é/:Ó}|â¼½½÷ìIüâ‹­ç=°ýÏ¡‘‡FïÙs16ά    Ž!íÅ%‹þ§ë¨=("
    ‡…]À+Ò±++¡£
    XOŽ¾­­·ëë-\hL=À“ì´«g³Ý;ûŸ÷CGÈ)rÆb[í±_œsÎ’Ôü‚ÂÂ’bRôׯcöÃQ‘Xô˜Þ+Í]YUã‘g¶© êúöf’]_ൣ·b“ì´«§³;ûAML øô|†°÷ôº}ÎirÇ€‘½°Â“¢/(@퉇!==hœƒ~XîUåÑ7v½žˆž.YÉN»œžm¯zãÙRßTvz†º½¨àa==Éx‹>íz,÷Ÿ«Ë*Èx4ú0;›¾@GO‰ÞoSÐ8¯n?   ðvª×ÛG=û²ú©L^Øu’£GíIþ0ÚõÈ€C¶—#ÉãÑ××Ac=Öïì÷è,X §½    =WÍNó¹,Û©^géLÎ>­±v°ëP‹³G^„ð zâ™õ@ímÀæÑ£3Un§ëèÂxu=òÌréjvšOºXÚflûì‘ÞQqö©du:-/¿´ô¶zô„:@¢G»> ëwØN½²®ùƒy::Ñ›™ðùtõÜi´ät±ÜYÕ7]ÅéštÈ~ÒÑç£ö€ÈXŸHDŒæNCìd=}3jg®Ò›§««C=i­áðNO“»wwÃG©šö®'¹8݇¦Y·òï;=4\â¹ÇAxrôà™ÅíUe$<1\Öס/Z¹«ŒæêBxµè®ç˜hAââceÞSÝãZöÁ®áòØto­o€ÜïÜEõDôhîqÒ“¢ÇÁʺ²²2Šèë›Ñƒ+k‰^½qù\ž¶„#“9u÷iØ»™ò˜x
    :j'G_ŒÎMáqÉqÑG„‡£ßkz\¡ŽG¢¯Vâ/û–®5žëu°ÆAñF†lSà3Ež‹ú;t†í)ËŒ‰¥ºàKïÝÅõpôØMPôÕx<úh4zü[ÙTV¦ýýJ%~Êaa¾VàçiDodlÌã0µpýußqQ–Ë¢¾ÞÑ°ž™5k¸kŽXŠíÛC};íV!°£z8úló’|$DõG…‘ø÷jWiá+ª›Hïœ>\9ÇãÑë/\ÌZj;
    †–ðR—Ù½½£³‡G,#GOw3t(FàKo—’6aaW¯%“¢OŠ"¿>P´W—©éËËï75“ÿJ„Á*K¹êÑë-Ðg®2Õ Õêð‘R©«`´wDàš*½räØkî¥åü½{ˆþÎ"ÒžÕ/<,ùÚÕääd”¦vžªh¨/WÓWwh¼Aà¸Ö@wî\Ø<·z†œUÄ_) ®]Ÿ¥J$›7H¤>ßµõõ÷æçݽ‡d_Z¤vF&£èxÔž”®þEå㎪Šr¬î×uÔ5ªß@c0W®43ÖC†xý…FK¸,®ÖЮ]Á;R¡s±Ô-o¼ô<Ødƒá:]Ò8¤    öãz8øGhXæ÷¾ã1R5Jí?ÙŠÇüƒ¥åJ¤¬­þÀÓœP§©ÿòò:ô§ÝI£Ý̃
    (®üðC¨à (¿×Þ„õ[í=°êå¢ïÊ8VøÇÿ ©/&ÿIEND®B`‚
    

    我觉得奇怪的是“PNG”也被标记在输出的顶部 - 所使用的文件都不是PNG文件,尽管它们可能已经在Photoshop中同时或其他时间转换过。

    如果我从目录中删除图像文件,则乱码输出会消失 - 大概是因为DOMPDF没有渲染它们。 PDF仍然是创建的,但这次图像以“X”标记存在,表示它们已丢失。

    如果我echo之后$dompdf->render()echo之后,echo'd内容出现在乱码输出之前和之后 - 那么(再次,大概)这就是问题功能

    我认为自1月30日以来唯一改变的是我们的网络管理员将PHP从5.2.9升级到5.3。

    我们正在使用IIS来托管此网络服务器。

    我已经尝试过Google问题,但似乎没有人遇到同样的问题。有没有人有任何建议?

    提前致谢,

1 个答案:

答案 0 :(得分:0)

升级到最新版本的DOMPDF,现在我遇到了一个完全不同的问题。