Шрифт хинди с DOMPDF в Codeigniter

Я использовал библиотеку DOMPDF в codeigniter для извлечения данных из mysql. Но есть некоторые поля в моей таблице на хинди (юникодная форма хинди), когда я пытаюсь создать PDF для хинди-шрифтов, он не отображает правильную вещь. Пожалуйста, помогите мне выбраться из этого.

Вот мой контроллер

public function genrate_pdf($benef_detial,$count){
  $data['repo_result'] = $benef_detial;
  $data['total_benif'] = $count;
  $data['page_title'] = "Benificiary Details";
  $this->load->library('pdf');  
  $html = utf8_decode($this->pdf->load_view('public_reports/pdf_view',$data));
  $dompdf = new DOMPDF();
  $dompdf->load_html($html);
  $dompdf->set_paper("a4", "landscape" );
  $this->template->set_template('default');
  $this->pdf->render();
  $this->pdf->stream("public_reports/pdf_view.pdf"); }

Я добавил метатег

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

в pdf_view и в шаблоне тоже

Если я сделаю данные поля таблицы на английском языке, тогда все работает отлично, но в случае хинди юникода он показывает результат, например

सिंगरà¥OEली

Пожалуйста, помогите мне.

Спасибо


person nitesh mourya    schedule 12.08.2013    source источник
comment
Какая версия dompdf? Вам понадобится версия 0.6.0, чтобы использовать шрифты хинди.   -  person BrianS    schedule 14.08.2013


Ответы (2)


Чтобы правильно отображать символы хинди в PDF, вам необходимо проверить несколько вещей:

<сильный>1. Убедитесь, что PHP использует MBString (включено по умолчанию)

<сильный>2. Убедитесь, что вы используете Dompdf 0.6.0 или выше

<сильный>3. Проверьте свои настройки

При использовании Dompdf 0.6.x установите для параметра DOMPDF_ENABLE_UNICODE значение true. В Dompdf 0.7.0 и выше это включено по умолчанию.

Вам потребуется доступ для чтения/записи к каталогу шрифтов и каталогу кэша шрифтов. По умолчанию эти каталоги находятся в каталоге dompdf (dompdf/lib/fonts для обоих). В Dompdf 0.6.x это будут константы конфигурации DOMPDF_FONT_DIR и DOMPDF_FONT_CACHE. В Dompdf 0.7.0 и выше обязательно установите значение параметров fontDir и fontCache (например, $dompdf->set_option("fontDir", "/my/font/dir");).

При загрузке шрифта через @font-face убедитесь, что у вас также есть доступ для чтения/записи к временному каталогу. В Dompdf 0.6.0 проверьте константу конфигурации DOMPDF_TEMP_DIR. В Dompdf 0.7.0 и выше установите параметр tempDir.

Кроме того, вообще говоря, если вы загружаете какие-либо ресурсы через HTTP, убедитесь, что у вас включена удаленная загрузка ресурсов. В Dompdf 0.6.0 проверьте константу конфигурации DOMPDF_ENABLE_REMOTE. В Dompdf 0.7.0 и выше установите параметр isRemoteEnabled.

<сильный>4. Загрузите вспомогательный шрифт в Dompdf

Самый простой и рекомендуемый способ загрузки шрифта — использование объявления @font-face CSS.

Безусловно, самый простой способ начать работу — использовать шрифты Google, поскольку все, что вам нужно сделать, — это создать ссылку на таблицу стилей. Для шрифта Hind вы просто добавили бы следующее в свой заголовок документа:

<link href="https://fonts.googleapis.com/css?family=Hind:400,700&amp;subset=devanagari,latin-ext" rel="stylesheet">

К сожалению, Dompdf не поддерживает числовой вес для шрифтов. Поскольку именно так Google определяет вес шрифта, вы не можете использовать его с Dompdf до версии 0.8.1 включительно. Вы можете обойти эту проблему, но самый простой способ — загрузить шрифты.

В таблице стилей вашего документа:

@font-face {
  font-family: Hind;
  font-style: normal;
  font-weight: normal;
  src: url(http://example.com/hind.ttf) format('truetype');
}

Примечание. Не забудьте определить различные веса и стили, которые вы хочу поддержать.

<сильный>5. Установите атрибут стиля font-family для вашего текста на загруженный вами шрифт

В таблице стилей вашего документа настройте соответствующий контейнер с соответствующим семейством шрифтов. Например, если вы хотите, чтобы весь документ использовал шрифт, вы можете просто добавить следующее в таблицу стилей документа:

* { 
  font-family: Hind, DejaVu Sans, sans-serif;
}

Все это описано в руководстве по Unicode.

person BrianS    schedule 14.08.2013
comment
Прежде всего, я пробовал, ничего не работает :( Можете ли вы добавить фрагмент кода для следующих пунктов: 4. Загрузите вспомогательный шрифт в dompdf 5. Установите атрибут стиля font-family для вашего текста на загруженный вами шрифт - person Jasmeen; 16.10.2017
comment
Я нашел решение здесь: shishtpal .blogspot.in/2017/04/ - person Jasmeen; 17.10.2017
comment
@Jasmeen эта ссылка shishtpal. blogspot.in/2017/04/ не работает, пожалуйста, поделитесь любой другой ссылкой, если она у вас есть. - person rohit; 12.10.2020

Для вашей проблемы mpdf лучше, чем DomPDF и другие. он имеет следующие особенности

  1. Добавить пользовательский шрифты

  2. Полная поддержка Unicode

    Он поддерживает более 100 языков, включая английский, хинди, тамильский, сингальский, катакана, хирагана, эфиопский, тайский, малаялам, каннада, телугу, гуджарати, бенгальский, арабский, греческий и многие другие по умолчанию.

  3. Поддержка сложных скриптов

3.1 Языки с письмом справа налево

Арабские языки и иврит пишутся справа налево (RTL). mPDF распознает арабский и иврит и автоматически меняет направление текста.

ألسّلام عليكم שלום

3.2 Индийские языки, лаосский, тибетский и т. д.

Другие сложные скрипты требуют некоторой обработки символов перед отображением. Например, некоторые гласные состоят из 2 символов, которые должны быть помещены до и после соседнего согласного, например.

U+0D1C + U+0D4C [гласная AU] = [пишется вместе как ജൌ]

ജ + ൌ = ജൌ

Согласные конъюнкты - это когда два соседних символа записываются как одна «конъюнктивная» форма, например.

प + ॡ = पॣ

3.3 Вертикальное письмо

Вертикальное письмо не поддерживается mPDF (например, монгольский и Phags-pa), хотя отдельные символы могут отображаться с использованием подходящих шрифтов.

  1. Коллекции TrueType
  2. Дополнительные плоскости Unicode
person Chanaka    schedule 03.12.2020