Gerando documento PDF com caracteres unicode armazenados no database

Eu quero gerar documento PDF com caracteres unicode. Eu armazenei usando utf8_unicode_ci no db.

Aqui está a minha mesa:

 language(word_id,english,sinhala,tamil) 

Este é o meu código para gerar pdf. Mas as palavras sinhala n tamil não estão chegando.

 getWord($word_id)); include_once 'common/dompdf/dompdf_config.inc.php'; $date=date("Y/m/d"); $html="Word Details
"; $value= mysql_fetch_assoc($result); $html.='
English Word :

Sinhala Word :
Tamli Word :
'; $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"); ?>

Este é o código no modelo:

 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; } } 

Alguém pode me dizer o que há de errado com isso e como posso corrigir isso?

Primeiro, alguns conselhos gerais …

Além de armazenar seus dados como UTF8 você precisa garantir que sua conexão de database esteja em UTF8. Como você faz isso depende da sua biblioteca de access a dados. Não consigo saber em que biblioteca de access a dados você está usando, mas vejo algumas funções clássicas do mysql. Se esse for o seu uso, você usaria o seguinte logo após se conectar ao seu database:

 mysql_query("SET NAMES 'utf8'"); 

Você também deve garantir que o PHP esteja funcionando de forma nativa no UTF8. Há duas coisas aqui que você precisará. Primeiro dompdf requer a extensão MBString para manipular caracteres de vários bytes corretamente. Em segundo lugar, você provavelmente quer dizer ao PHP que trate seus dados de personagem como UTF8 com o seguinte código:

 mb_internal_encoding('UTF-8'); 

Finalmente, para exibir caracteres que caem fora do conjunto de caracteres ANSI do Windows em um PDF você precisa de uma fonte que suporte esses caracteres. dompdf v0.6.x incluem as fonts DejaVu por padrão, mas essas não suportam tamil e assim você terá que carregar uma fonte em dompdf. A maneira mais fácil de fazer isso é usando @ font-face. Você deve ler sobre o dompdf Unicode How-To (é um pouco desactualizado, mas ainda tem informações úteis). Em seguida, verifique esta resposta para a pergunta “dompdf e configure a fonte-família diferente” .


Agora, alguns conselhos específicos …

1) Use UTF8 completamente. Você está trabalhando com um conjunto de caracteres baseado em UTF8 e você deve deixá-lo nesse conjunto de caracteres. As versões mais antigas do dompdf (0.5.x e anterior) só entendeam o Windows-ANSI. As versões mais recentes funcionam de forma nativa no UTF8 e, mesmo se você não estiver usando caracteres “especiais”, o UTF8 é a codificação de documento preferida.

2) Não converter de UTF8 para uma menor codificação. Por menor codificação, quero dizer conversão de uma codificação inclusiva como UTF8 que suporta um conjunto de caracteres grande para uma codificação limitada como iso-8859-x ou Windows-12XX. Novamente, se a codificação de destino não suportar seus personagens, você perderá informações. Você converteu sua seqüência de documentos de UTF8 para Windows-1250. Essa codificação ainda suporta os caracteres que você está usando?

3) O seu documento sempre deve especificar a codificação correta. Você especifica na meta tag do documento que o documento está codificado em UTF8 e, portanto, dompdf assumirá que é a codificação apropriada para usar. Se você converter para outra codificação, seus personagens podem não ser representados corretamente.

4) Como indicado acima, você precisa de uma fonte que suporte os caracteres usados ​​em seu documento. Você não especifica nenhuma fonte e, portanto, uma fonte de núcleo PDF será usada. Essas fonts apenas suportam texto codificado com o Windows ANSI. Leia esta publicação no rastreador de problemas dompdf sobre a exibição de caracteres Tamil: https://github.com/dompdf/dompdf/issues/838#issuecomment-47415806

Com o acima em mente, seu código deve se parecer mais com isso:

 include_once 'common/dompdf/dompdf_config.inc.php'; $date=date("Y/m/d"); $value= mysql_fetch_assoc($result); $html = '       Word Details
English Word :

Tamli Word :
'; $dompdf = new DOMPDF(); $dompdf->load_html($html,'UTF-8'); $dompdf->render(); $dompdf->stream("dompdf_out.pdf", array("Attachment" => false));