问题描述
当客户以阿拉伯语输入帐单/装运信息时,我面临打印发票,装运和装箱单的问题。下载的PDF看起来像下面的屏幕截图,没有解码(编译)阿拉伯字符。
Pdf invoice shows crossed box on Arabic characters
预期结果:发票,装运单和装箱单应正确显示所有信息,无论是英语还是阿拉伯语。不使用第三方扩展。
系统信息
尝试过的解决方案
我已经用尽了所有互联网参考,没有任何实际效果,我设法做到的最好是以下几点。
1-强制字体
$font = Zend_Pdf_Font::fontWithPath(Mage::getBaseDir() . '/lib/LinLibertineFont/AraJozoor-Regular.ttf');
PDF文档带有单独的字符,类似于附件的图像。
Arabic text with separated and reversed characters
当我尝试使用阿拉伯语单词打印发票pdf时,它会给出单独的字符,而不是完整的阿拉伯语单词。阿拉伯语脚本的单个字符未从右至左显示,而是从左至右显示为单个字符。例如:مدرسة(school)显示为ةسردم
与其他从右至左语言(例如希伯来语)不同,后者具有相同的问题,并且可以通过反转字符来解决。在阿拉伯语中,字符必须相互连接。
我使用下面的代码部分解决了字符反转问题,同时维护了其他英语单词。但是它仍然单独打印每个字符。
function fixText($text){
if(preg_match("/\p{Arabic}/u", $text ) ){
preg_match_all('/./us', $text, $ar);
$text = join('',array_reverse($ar[0]));
$words = explode( ' ', $text );
foreach( $words as $i => $word ){
if( !preg_match( "/\p{Arabic}/u", $word ) ){
$words[$i] = implode( '', array_reverse( str_split( $word ) ) );
}
}
$text = implode( ' ', $words );
return $text; }}
2-字体家族服务器更新
如果您尝试通过电子邮件发送发票,即使发票是由同一功能生成的,也不会出现阿拉伯文本问题。因此,我的注意力集中在尝试更新字体的服务器上。我使用以下代码来做到这一点。
yum install linux-libertine-fonts
yum clean all
rm -rf /var/cache/yum
Magento使用哪个字体包
3-使用TCPDF库而不是Zend pdf库
答案 0 :(得分:0)
这可以救你
1)请下载支持阿拉伯文字和符号的字体。
2)将字体放在lib目录中
3)请覆盖此文件app / code / core / Mage / Sales / Model / Order / Pdf / Abstract.php和app / code / core / Mage / Sales / Model / Order / Pdf / Items / Abstract.php 并替换
$font = Zend_Pdf_Font::fontWithPath(Mage::getBaseDir() . '/lib/LinLibertineFont/LinLibertine_Re-4.4.1.ttf');
使用
$font = Zend_Pdf_Font::fontWithPath(Mage::getBaseDir() . '/lib/dejavu-sans/DejaVuSans.ttf');
我在magento 1.9上使用了它 请不要使用此字体“ dejavu-sans / DejaVuSans.ttf” 您应该使用语言和符号支持的字体