传说在阿拉伯语jpgraph中得到反转

时间:2017-02-22 06:11:23

标签: pdf arabic jpgraph ar-php

我在我的应用程序中创建了一个用于web和pdf视图的饼图(这是一个多语言网站(英语+阿拉伯语))。 对于网络版我正在使用JQplot js插件来创建饼图,这对于pdf的英语和阿拉伯语视图都很好。我正在使用Jpgraph php库。 对于阿拉伯语视图中的pdf版本,问题是传说正在逆转。

web view

pdf view

这是我用于生成pdf饼图的代码。

function create_graph($chart_array, $plan_id,$lang,$site_lang){

require_once dirname(dirname(dirname(__FILE__))).'/application/third_party/jpgraph/src/jpgraph.php';   
require_once dirname(dirname(dirname(__FILE__))).'/application/third_party/jpgraph/src/jpgraph_pie.php';  

if(!empty($chart_array)){
    foreach($chart_array as $chart){
        if ($site_lang=='ar') {
            $leg[] =  $this->utf8_strrev($chart['0']); // to fix the reverse order issue originally it was only ($leg[] =  $chart['0'] - no condition)
        }else{
            $leg[] =  $chart['0'];
        }

        $data[] = $chart['1'];
    }  

    $flag = true;
    foreach($data as $_data){
        if($_data != 0)
            $flag = false;
    }
    if(!$flag){
    // Create the Pie Graph. 
          $graph = new PieGraph(1000,950,"auto"); 
          $graph->SetShadow(); 
          $graph ->legend->Pos( 0.25,0.8,"right" ,"right"); 
          //$graph->legend->SetFont(FF_VERDANA,FS_BOLD,12); 
          $graph->title->SetMargin (20);  

          // Create plots 
          $size=0.25; 
          $p1 = new PiePlot($data); 
          $p1->SetLegends($leg);
          $p1->SetSize($size); 
          $p1->SetGuideLines(true,false); 
          $p1->SetGuideLinesAdjust(1.8,3); 
          $p1->SetCenter(0.25,0.32); 
          //$p1->value->SetFont(FF_VERDANA); 
          $p1->title->Set($lang->line('initial_investment_data')); 

          $p1->title->SetMargin(45); 
          $p1->SetSliceColors(array('red','orange','yellow','green','purple','blue','brown','black'));  
          $graph->Add($p1); 
          $graph->Stroke('assets/graph/initial_investment_'.$plan_id.'.png');
    }
}
}

修复我使用以下

的逆序问题
function utf8_strrev($str){
    preg_match_all('/./us', $str, $ar);
    return join('', array_reverse($ar[0]));
}

在这一切中,我得到的是带有空格的反向字符串(例如:bug变为g u b),所以这个词就失去了意义。

我无法找到为什么jpgraph正在扭转传说,以及如何解决这个相反的问题。

1 个答案:

答案 0 :(得分:1)

这个问题已经解决,一位同事帮我解决了这个问题。

这是一个问题,不是Jpgraph,而是php gd库,当创建图形图像php Gd库由于字体而还原图例文本。 为了解决这个问题,我们使用了扩展名ar-php

https://sourceforge.net/projects/ar-php/

You need to do the following:

1) download library and put that in your project 
2) Include the library file 
3) Create a object of the class 
4) user the object to convert the legend in Arabic with correct font .

以下代码:

require_once '/application/third_party/ar-php/I18N/Arabic.php';

$Arabic = new I18N_Arabic('Glyphs');

$this->Arabic->utf8Glyphs( $legend_name );

这样可以正常工作。