php 西里尔字符的DOMPDF问题

w7t8yxp5  于 2023-01-29  发布在  PHP
关注(0)|答案(7)|浏览(243)

我正在使用DOMPDF库创建PDF格式的发票。此文档可以是法语、俄语或英语,但我在打印俄语字符时遇到问题。
首先,我尝试使用UTF-8编码,并将meta标记放在要转换的HTML页面的头部:

wkyowqbh

wkyowqbh1#

如果您将使用DejaVu字体,则可以看到西里尔字符
DejaVu TrueType字体已预装,默认情况下可为dompdf提供适当的Unicode字符覆盖。要使用DejaVu字体,请参考样式表中的字体,例如body { font-family:德贾武·桑斯;}(对于DejaVu Sans)。
DOMPDF包括默认的DejaVu字体

$html = "<html><head><style>body { font-family: DejaVu Sans }</style>".
        "<body>А вот и кириллица</body>".
        "</head></html>";

    $dompdf = new \DOMPDF();
    $dompdf->load_html($html);
    $dompdf->render();
    echo file_put_contents('cyrillic.pdf', $dompdf->output());

您也可以在dompdf_config.inc.php中设置默认字体的更改def

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

nzrxty8p2#

问题是字体默认dompdf使用(即它没有所有的unicode字符,现在超过5000).通常arialuni.ttf是你需要的.你可以下载本地化俄语版本在http://chernev.ru/dompdf.rar {breaked link}
更新链接:https://code.google.com/p/ipwn/downloads/detail?name=arialuni.ttf

daolsyd0

daolsyd03#

在html中,使用以下样式:

<style type="text/css">
* {
  /*font-family: Helvetica, sans-serif;*/
  font-family: "DejaVu Sans", sans-serif;
}
</style>
vm0i2vca

vm0i2vca4#

如果其他答案都没有帮助,那么将Dompdf升级到7.0.0版本对我有帮助。

// generate pdf.
$dompdf_options = apply_filters( 'yith_wcwl_dompdf_options', array() );
$dompdf         = new Dompdf\Dompdf( $options );
$dompdf->set_option('defaultFont', 'dejavu sans');
$dompdf->loadHtml( $template );
$dompdf->setPaper( 'A4', apply_filters( 'yith_wcwl_dompdf_orientation', 'portrait' ) );
$dompdf->render();
$dompdf->stream( $wishlist->get_formatted_name() );
t5fffqht

t5fffqht5#

下载arialuni.ttf在dompdf目录下运行php load_font.php 'Arial' arialuni.ttf,设置字体为arial可以正常工作;)

iqjalb3h

iqjalb3h6#

对我来说,上面的4个步骤没有解决这个问题。除此之外,dompdf将创建的pdf转换为ANSI(ISO)您需要在选项页http://domain.com/admin/settings/print/pdf禁用此功能
勾选复选框使用dompdf的Unicode模式。这将强制创建UTF-8/Unicode格式的文件。
请注意,默认情况下,Web设置会覆盖dompdf_config.inc.php中的设置。

lawou6xi

lawou6xi7#

已注意到问题可能出在css-reset使用中,尤其是font:inherit;

相关问题