Problema DOMPDF com personagens cirílicos

Estou usando a biblioteca DOMPDF para criar uma fatura em PDF. Este documento pode ser em francês, russo ou inglês, mas estou com problemas para imprimir caracteres russos.

Primeiro, tentei usar a codificação UTF-8 e coloquei a meta tag na cabeça da página HTML para ser convertida:

Mas isso não funcionou.

Então, eu inseri essa meta tag dentro da etiqueta BODY e ajudou a resolver o problema com caracteres franceses.

Mas os personagens russos ainda não funcionam. Também tentei converter caracteres russos em entidades HTML, mas isso também não funciona.

Uso a class CPDF R & OS, não PDFLib como um backend.

Alguém pode ajudar?

O problema é com as fonts de uso dompdf padrão (isto é, não tem todos os caracteres unicode, então são mais de 5000). Normalmente, arialuni.ttf é o que você precisa. Você pode baixar a versão russa localizada em http://chernev.ru/dompdf.rar {link quebrado}

Link atualizado: https://code.google.com/p/ipwn/downloads/detail?name=arialuni.ttf

Na resposta aceite, o link está quebrado e continha a versão antiga do DOMPDF.

Para trabalhar com símbolos unicode no DOMPDF 0.6 você tem duas alternativas: use fonts existentes ou crie sua própria fonte.

  • Use fonte existente (aplicada para DOMPDF 0.6):

    1. Baixe o arquivo e extraie.
    2. Copie arquivos extraídos na sua pasta de fonts /dompdf/lib/fonts/ .
    3. Edite dompdf_font_family_cache.dist.php com o snippet 1.
    4. Em CSS use font-family: times; .

Snippet 1:

 /* ... */ 'times' => array ( 'normal' => DOMPDF_FONT_DIR . 'times', 'bold' => DOMPDF_FONT_DIR . 'timesbd', 'italic' => DOMPDF_FONT_DIR . 'timesi', 'bold_italic' => DOMPDF_FONT_DIR . 'timesbi' ), 'times-roman' => array ( 'normal' => DOMPDF_FONT_DIR . 'times', 'bold' => DOMPDF_FONT_DIR . 'timesbd', 'italic' => DOMPDF_FONT_DIR . 'timesi', 'bold_italic' => DOMPDF_FONT_DIR . 'timesbi' ), /* ... */ 

  • Se você quiser usar sua própria fonte TTF (digamos, Arial.ttf ):

    1. Run: ttf2afm -o Arial.afm Arial.ttf . (Eu fiz isso no Ubuntu.)
    2. Run: ttf2ufm -a -F Arial.ttf . (Eu fiz isso no Windows usando exe do UFPDF , mas acho que você pode usar o /dompdf/lib/ttf2ufm/bin/ttf2ufm.exe .)
    3. Copie arquivos Arial.* Em /dompdf/lib/fonts/ .
    4. Adicione ao snippet dompdf_font_family_cache.dist.php 2.
    5. Em CSS use font-family: arial; .

Snippet 2:

 /* ... */ 'arial' => array ( 'normal' => DOMPDF_FONT_DIR . 'Arial', 'bold' => DOMPDF_FONT_DIR . 'Arial', 'italic' => DOMPDF_FONT_DIR . 'Arial', 'bold_italic' => DOMPDF_FONT_DIR . 'Arial' ) /* ... */ 

Se você usar a fonte DejaVu, você pode ver caracteres cítricos

As fonts DejaVu TrueType foram pré-instaladas para fornecer a cobertura dompdf decente de personagens Unicode por padrão. Para usar as fonts DejaVu, faça referência à fonte na sua folha de estilo, por exemplo, corpo {font-family: DejaVu Sans; } (para DejaVu Sans).

DOMPDF inclui a fonte DejaVu como padrão

  $html = "". "А вот и кириллица". ""; $dompdf = new \DOMPDF(); $dompdf->load_html($html); $dompdf->render(); echo file_put_contents('cyrillic.pdf', $dompdf->output()); 

Você também pode definir change def para fonte por padrão em dompdf_config.inc.php

 def("DOMPDF_DEFAULT_FONT", "DejaVu Sans"); 

Baixe arialuni.ttf Execute php load_font.php ‘Arial’ arialuni.ttf no diretório dompdf, configure a fonte para arial. Funciona;)

Para mim, os 4 passos acima não resolveram o problema. Além disso, o dompdf converte o pdf criado em ANSI (ISO). Você precisa desativá-lo na página de opções http://domain.com/admin/settings/print/pdf

Marque a checkbox de seleção Use o modo Unicode do dompdf. Isso irá forçar a criação de arquivos no UTF-8 / Unicode.

Observe que as configurações da Web substituem as configurações em dompdf_config.inc.php por padrão.

Observou que esse problema poderia estar no uso do css-reset, particularmente font:inherit;