为什么此代码使用PHP Zend_Pdf库无法正常处理PDF上的文本?

前端之家收集整理的这篇文章主要介绍了为什么此代码使用PHP Zend_Pdf库无法正常处理PDF上的文本?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试在服务器上动态创建PDF文档,并使用Zend_Pdf库将它们发送到客户端. PDF上的所有文本都需要与页面居中对齐,页面将是字母大小的横向.使用我在不同网站上多次发现的功能,我遇到了问题 – 中心理由是关闭的.所有文字都显得太偏左了.这是我的代码
  1. <?
  2. require('Zend/Pdf.PHP');
  3.  
  4. $font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA);
  5. $pdf = new Zend_Pdf();
  6.  
  7. // Create a new page,add to page listing
  8. $pdfPage = $pdf->newPage(Zend_Pdf_Page::SIZE_LETTER_LANDSCAPE);
  9. $pdf->pages[] = $pdfPage;
  10.  
  11. // Add certify that
  12. $pdfPage->setFont($font,15.75);
  13. drawCenteredText($pdfPage,"THIS IS TO CERTIFY THAT",378);
  14.  
  15. // Add name
  16. $pdfPage->setFont($font,39.75);
  17. drawCenteredText($pdfPage,"Example Name",314.25);
  18.  
  19. // Headers
  20. header("Content-type: application/pdf");
  21. header("Content-Disposition: inline; filename=\"cert.pdf\"");
  22. header('Content-Transfer-Encoding: binary');
  23. header('Accept-Ranges: bytes');
  24.  
  25. // Output PDF
  26. echo $pdf->render();
  27.  
  28.  
  29. function drawCenteredText($page,$text,$bottom) {
  30. $text_width = getTextWidth($text,$page->getFont(),$page->getFontSize());
  31. $Box_width = $page->getWidth();
  32. $left = ($Box_width - $text_width) / 2;
  33.  
  34. $page->drawText($text,$left,$bottom,'UTF-8');
  35. }
  36.  
  37. function getTextWidth($text,$font,$font_size) {
  38. $drawing_text = iconv('','UTF-8',$text);
  39. $characters = array();
  40. for ($i = 0; $i < strlen($drawing_text); $i++) {
  41. $characters[] = (ord($drawing_text[$i++]) << 8) | ord ($drawing_text[$i]);
  42. }
  43. $glyphs = $font->glyphNumbersForCharacters($characters);
  44. $widths = $font->widthsForGlyphs($glyphs);
  45. $text_width = (array_sum($widths) / $font->getUnitsPerEm()) * $font_size;
  46. return $text_width;
  47. }
  48.  
  49. ?>

……这就是结果.

如果其他人遇到类似的问题,问题在这里:
  1. function getTextWidth($text,$text);
  2. $characters = array();
  3. for ($i = 0; $i < strlen($drawing_text); $i++) {
  4. $characters[] = (ord($drawing_text[$i++]) << 8) | ord ($drawing_text[$i]);
  5. }
  6. $glyphs = $font->glyphNumbersForCharacters($characters);
  7. $widths = $font->widthsForGlyphs($glyphs);
  8. $text_width = (array_sum($widths) / $font->getUnitsPerEm()) * $font_size;
  9. return $text_width;
  10. }

构建字符数组时,字符加载错误 – 8位,而不是16位.

  1. $characters[] = ord ($drawing_text[$i]);

解决了问题,并正确计算文本宽度.

猜你在找的PHP相关文章