【问题标题】:How to use Hindi fonts in mpdf library?如何在 mpdf 库中使用印地语字体?
【发布时间】:2018-06-26 08:36:32
【问题描述】:

我正在使用带有 php 的 mpdf 库来创建动态 PDF。 PDF是用英文字符创建的,但是当我尝试使用印地语字符时,它会打印??????。请建议我该怎么做。我将非常感谢所有人。

<?php

require_once('config.php');
require_once __DIR__ . '/lib/functions.php';
require_once __DIR__ . '/lib/mpdf/vendor/autoload.php';

$mpdf = new \Mpdf\Mpdf(['utf-8', 'A4-C']); // New PDF object with encoding & page size
$mpdf->text_input_as_HTML = TRUE;

$userId = $_SESSION['user_id'];

$user = getsingledataByfeild('user_id', $userId, 'registered_user');
$Id = $_SESSION['did'];
$feeDetails = getsingledataByfeild('id', $Id, 'fee_calculation');
$authname = getdataByConditions(['id' => $feeDetails['authority']], 'development_authority');

$html = '<table class="table">
    <tr>
        <td><label> अथॉरिटी का नाम: <span>*</span></label></td>
        <td>' . $authname[0]['authority_name'] . '</td>
    </tr>
    <tr>
        <td><label> आवेदक का नाम  <span>*</span></label></td>
        <td>' . $feeDetails['applicant_name'] . '</td>
    </tr>
    <tr>
        <td><label> आवदेक का पता  : <span>*</span></label></td>
        <td>' . $feeDetails['applicant_address'] . '</td>
    </tr>
    <tr>
        <td><label> भूखण्ड संख्या : <span>*</span></label></td>
        <td>' . $feeDetails['land_no'] . '</td>
    </tr>
    <tr>
        <td><label> योजना का नाम : <span>*</span></label></td>
        <td>' . $feeDetails['plan_name'] . '</td>
    </tr>
    </table>'; 

$mpdf->setAutoTopMargin = 'stretch'; // Set pdf top margin to stretch to avoid content overlapping
$mpdf->setAutoBottomMargin = 'stretch'; // Set pdf bottom margin to stretch to avoid content overlapping

$mpdf->WriteHTML($stylesheet, 1);
$mpdf->WriteHTML($html);
$mpdf->Output();

【问题讨论】:

  • 你看过这篇文章了吗:shishtpal.blogspot.com/2017/04/…
  • 我检查并关注但仍然无法正常工作@LovepreetSingh
  • 您有三个问题: (1.) 编码: 如果您的 PHP 文件使用错误的编码保存,印地语字符将被损坏。 (2) font: 你需要一个支持这些字符的字体。我没有看到你定义一个。 (3.) 连字: 即使字符被渲染,它们也会出错,因为不支持梵文脚本。只有少数 PDF 库支持这一点。请参阅 this white paperiText 7 pdfCalligraph 页面。
  • 感谢您的评论。我会尝试您的建议。我的项目是基于php的,所以我不能改变。

标签: php mpdf hindi


【解决方案1】:
<?php

require_once( 'mpdf/mpdf.php');
$stylesheet = file_get_contents('css/style.css');

$html = '<table class="table">
    <tr>
        <td><label> अथॉरिटी का नाम: <span>*</span></label></td>
        <td>' . $authname[0]['authority_name'] . '</td>
    </tr>
    <tr>
        <td><label> आवेदक का नाम  <span>*</span></label></td>
        <td>' . $feeDetails['applicant_name'] . '</td>
    </tr>
    <tr>
        <td><label> आवदेक का पता  : <span>*</span></label></td>
        <td>' . $feeDetails['applicant_address'] . '</td>
    </tr>
    <tr>
        <td><label> भूखण्ड संख्या : <span>*</span></label></td>
        <td>' . $feeDetails['land_no'] . '</td>
    </tr>
    <tr>
        <td><label> योजना का नाम : <span>*</span></label></td>
        <td>' . $feeDetails['plan_name'] . '</td>
    </tr>
    </table>';


$mpdf = new mPDF('utf-8', 'A4-C');
$mpdf->WriteHTML($stylesheet, 1);
$mpdf->WriteHTML($html);

//call watermark content aand image
$mpdf->SetWatermarkText('phpflow.COM');
$mpdf->showWatermarkText = true;
$mpdf->watermarkTextAlpha = 0.1;
$mpdf->Output("phpflow.pdf", 'F');

$mpdf->Output();

exit;
?>  

在根目录下创建一个 CSS 文件并在 CSS 中添加以下代码:

p, td { font-family: freeserif; }

对我来说工作正常,请查看以下链接...

Click here

【讨论】:

  • 供应商目录中没有 mpdf 文件夹。实际上 ttffonts 文件夹位于 vendor 之外。
  • 在 mpdf 文件夹根目录中找到 config_fonts.php,在 mpdf 文件夹中找到 ttfonts 字体文件夹。你可以添加这个 php 代码 $this->fontdata = array( "mangal" => array( 'R' => "MANGAL.TTF", 'useOTL' => 0xFF, ), .... );
  • 我没有在根目录中找到任何 config_fonts.php
【解决方案2】:

您必须设置支持印地语字符的字体,在您的情况下尤其是td 元素。 Freeserif 适合我。

<style>
    p, td { font-family: freeserif; }
</style>

顺便说一句,您的 mPDF 构造函数已关闭,配置数组必须有键(modeformat)。还。 A4-C 不是有效格式,连字符后的字母必须是 P(ortrait) 或 L(andscape)。

【讨论】:

    【解决方案3】:
    <style>
       body, p, td, div { font-family: freesans; }
    </style>
    

    【讨论】:

    • 请解释一下!
    【解决方案4】:

    我添加了这些代码:

    $mpdf = new \Mpdf\Mpdf(['tempDir' => sys_get_temp_dir().DIRECTORY_SEPARATOR.'mpdf','default_font' => 'serif', 'format' => 'A4-L']);
    $mpdf->autoScriptToLang = true;
    $mpdf->autoLangToFont = true;
    

    对我来说很好。

    【讨论】:

      猜你喜欢
      • 2020-06-05
      • 2017-01-17
      • 1970-01-01
      • 2013-03-14
      • 2021-05-01
      • 2018-03-09
      • 1970-01-01
      • 2014-01-14
      • 1970-01-01
      相关资源
      最近更新 更多