2017-02-22 2 views
0

Ich bin ein Kreisdiagramm für Web-und PDF-Ansicht in meiner Anwendung (es ist eine mehrsprachige Website (Englisch + Arabisch)). für Web-Version Ich benutze JQplot js-Plugin zum Erstellen von Kreisdiagrammen, die für beide Englisch und Arabisch Ansichten für PDF funktioniert Ich verwende Jpgraph Php-Bibliothek. für pdf-Version in arabischer Sicht das Problem ist Legenden kommen in umgekehrter Reihenfolge.Legende bekommen Umkehrung in arabischer jpgraph

web view

pdf view

hier ist der Code, den ich zum Erzeugen von Kreisdiagramm für pdf verwenden.

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

die umgekehrte Reihenfolge Problem zu beheben ich folgendes

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

In dieser verwendet haben alles, was ich bekommen habe ist, umgekehrt Zeichenfolge mit Leerzeichen (ex: Fehler Änderungen in GUB), also das Wort verliert es Bedeutung.

Ich kann nicht finden, warum jpgraph die Legenden umkehrt und wie man dieses umgekehrte Problem behebt.

Antwort

1

Dieses Problem ist gelöst, Ein Kollege hat mir dabei geholfen.

Dies ist ein Problem nicht mit Jpgraph sondern mit PHP gd-Bibliothek, Beim Erstellen von Grafik-Bild php Gd-Bibliothek den Legendentext aufgrund der Schriftart zurück. Um dies zu lösen, haben wir eine Erweiterung 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 . 

Code unten verwendet:

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

$Arabic = new I18N_Arabic('Glyphs'); 

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

Dies funktioniert gut.