Я хочу создать PDF-документ с символами Unicode. Я сохранил использование utf8_unicode_ci
в db.
Вот мой стол:
language(word_id,english,sinhala,tamil)
Это мой код для генерации pdf. Но слова sinhala n tamil не приходят.
<?php $word_id= '2'; require_once '../model/language.php'; $obj=new Word(); $result=($obj->getWord($word_id)); include_once 'common/dompdf/dompdf_config.inc.php'; $date=date("Y/m/d"); $html="Word Details<br/>"; $value= mysql_fetch_assoc($result); $html.='<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <div style="float:left;width:96%"> <table border="0" width="100%"> <tr> <th>English Word : </th> <td><input type="text" name="enhlish" value="'.$value['english'].'"/></td> </tr> <tr> <td colspan="2"><hr/></td> </tr> <tr> <th>Sinhala Word : </th> <td><input type="text" name="sinhala" value="'.$value['sinhala'].'"/></td> </tr> <tr> <th>Tamli Word : </th> <td><input type="text" name="tamli" value="'.$value['tamil'].'"/></td> </tr> </table>'; $dompdf = new DOMPDF(); $dompdf = new DOMPDF(); $html = iconv('UTF-8','Windows-1250',$html); $dompdf->load_html($html,'UTF-8'); $dompdf->render(); $dompdf->stream("dompdf_out.pdf", array("Attachment" => false)); exit(0); include("foot.inc"); ?>
в<?php $word_id= '2'; require_once '../model/language.php'; $obj=new Word(); $result=($obj->getWord($word_id)); include_once 'common/dompdf/dompdf_config.inc.php'; $date=date("Y/m/d"); $html="Word Details<br/>"; $value= mysql_fetch_assoc($result); $html.='<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <div style="float:left;width:96%"> <table border="0" width="100%"> <tr> <th>English Word : </th> <td><input type="text" name="enhlish" value="'.$value['english'].'"/></td> </tr> <tr> <td colspan="2"><hr/></td> </tr> <tr> <th>Sinhala Word : </th> <td><input type="text" name="sinhala" value="'.$value['sinhala'].'"/></td> </tr> <tr> <th>Tamli Word : </th> <td><input type="text" name="tamli" value="'.$value['tamil'].'"/></td> </tr> </table>'; $dompdf = new DOMPDF(); $dompdf = new DOMPDF(); $html = iconv('UTF-8','Windows-1250',$html); $dompdf->load_html($html,'UTF-8'); $dompdf->render(); $dompdf->stream("dompdf_out.pdf", array("Attachment" => false)); exit(0); include("foot.inc"); ?>
Это код в модели:
require_once 'connection.php'; class Word{ function getWord($word_id){ $conn = new Connection(); $sql = "select * from language where word_id='$word_id'"; $result = $conn->query($sql); return $result; } }
Может ли кто-нибудь сообщить мне, что случилось с этим, и как я могу это исправить?
Сначала несколько общих советов …
В дополнение к хранению данных в формате UTF8 вам необходимо убедиться, что ваше соединение с базой данных находится в UTF8. Как вы это делаете, это зависит от вашей библиотеки доступа к данным. Я не могу сказать, какую библиотеку доступа к данным вы используете, но я вижу некоторые классические функции mysql. Если это то, что вы используете, вы можете использовать следующее сразу после подключения к базе данных:
mysql_query("SET NAMES 'utf8'");
Вы также должны убедиться, что PHP работает в UTF8. Здесь есть две вещи, которые вам понадобятся. Во-первых, dompdf требует расширения MBString для правильной обработки многобайтовых символов. Во-вторых, вы, вероятно, хотите сказать PHP, чтобы обрабатывать ваши данные символов как UTF8 со следующим кодом:
mb_internal_encoding('UTF-8');
Наконец, чтобы отображать символы, выходящие за пределы набора символов ANSI Windows, в формате PDF вам нужен шрифт, который поддерживает эти символы. dompdf v0.6.x по умолчанию используют шрифты DejaVu, но они не поддерживают tamil, поэтому вам придется загружать шрифт в dompdf. Самый простой способ сделать это – использовать шрифт @ font-face. Вы должны прочитать инструкцию dompdf Unicode How-To (она немного устарела, но по-прежнему имеет полезную информацию). Затем проверьте этот ответ на вопрос «dompdf и установите другое семейство шрифтов» .
Теперь некоторые конкретные советы …
1) Используйте UTF8 полностью. Вы работаете с набором символов на основе UTF8, и вы должны оставить его в этом наборе символов. Старые версии dompdf (0.5.x и более ранние) понимали только Windows-ANSI. Более новые версии работают в UTF8, и даже если вы не используете никаких специальных символов, UTF8 является предпочтительным кодированием документов.
2) Не конвертируйте из UTF8 в меньшую кодировку. При меньшем кодировании я подразумеваю преобразование из инклюзивного кодирования, такого как UTF8, который поддерживает большой набор символов с ограниченной кодировкой, такой как iso-8859-x или Windows-12XX. Опять же, если целевая кодировка не поддерживает ваших персонажей, вы потеряете информацию. Вы преобразовали строку документа из UTF8 в Windows-1250. Поддерживает ли эта кодировка даже тех персонажей, которые вы используете?
3) В вашем документе всегда должно быть указано правильное кодирование. Вы указываете в метатеге вашего документа, что документ закодирован в UTF8, и поэтому dompdf будет считать, что это подходящая кодировка. Если вы конвертируете в другую кодировку, ваши символы могут отображаться неправильно.
4) Как указано выше, вам нужен шрифт, который поддерживает символы, используемые в вашем документе. Вы не указываете шрифт вообще, и поэтому будет использоваться шрифт ядра PDF. Эти шрифты поддерживают только текст, закодированный с помощью Windows ANSI. Прочитайте это сообщение на трекере о проблеме dompdf о отображении символов тамилов: https://github.com/dompdf/dompdf/issues/838#issuecomment-47415806
Учитывая вышеизложенное, ваш код должен выглядеть следующим образом:
include_once 'common/dompdf/dompdf_config.inc.php'; $date=date("Y/m/d"); $value= mysql_fetch_assoc($result); $html = ' <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <style> @font-face { font-family: latha; font-style: normal; font-weight: 400; src: url(http://yourfontprovider.com/latha.ttf) format("true-type"); } </style> </head> <body> Word Details<br/> <div style="float:left;width:96%"> <table border="0" width="100%"> <tr> <th>English Word : </th> <td><input type="text" name="enhlish" value="'.$value['english'].'"/></td> </tr> <tr> <td colspan="2"><hr/></td> </tr> <tr> <th>Tamli Word : </th> <td><input type="text" name="tamli" value="'.$value['tamil'].'" style="font-family: latha, sans-serif;" /></td> </tr> </table> </body> </html> '; $dompdf = new DOMPDF(); $dompdf->load_html($html,'UTF-8'); $dompdf->render(); $dompdf->stream("dompdf_out.pdf", array("Attachment" => false));