2016-05-10 6 views
1

からJaseprReportsの報告書にREPORT_LOCALEを設定する方法。私はPHPコードから<em>JasperReportsの</em>のレポートを実行できるようにするために一緒にPHPとPHP/JavaのブリッジとTomcat 8とで<em>JasperReportsの</em>ライブラリを使用しているPHP

実は私の作業コードは次のとおりです。私は、ディレクトリと、明らかな理由のためのデータベース接続についての唯一のいくつかの情報を削除

if (! defined('BASEPATH')) exit('No direct script access allowed'); 

require_once("http://localhost:8080/JavaBridge/java/Java.inc"); 
if (! function_exists('run_report')) { 
    function run_report($report_name = '') { 
     //--------------------------------------------------------------- 
     // Esegue un report di Jasper Report 
     // $report_name è il nome del file .jwxml senza estensione 
     //--------------------------------------------------------------- 
     try { 
      $jasperxml = new Java("net.sf.jasperreports.engine.xml.JRXmlLoader"); 
      $jasperDesign = $jasperxml->load(realpath("./assets")."/".$report_name.".jrxml"); 
      $compileManager = new JavaClass("net.sf.jasperreports.engine.JasperCompileManager"); 
      $report = $compileManager->compileReport($jasperDesign); 
     } catch (JavaException $ex) { 
      echo $ex; 
     } 
     $fillManager = new JavaClass("net.sf.jasperreports.engine.JasperFillManager"); 
     $params = new Java("java.util.HashMap"); 
     $params->put("id_record", 88); 
     $class = new JavaClass("java.lang.Class"); 
     $class->forName("com.mysql.jdbc.Driver"); 
     $driverManager = new JavaClass("java.sql.DriverManager"); 

    $locale = new Java("java.util.Locale"); 
     $conn = $driverManager->getConnection("jdbc:mysql://myhost:3306/mydb?zeroDateTimeBehavior=convertToNull", "myuser", "mypassword"); 
     $jasperPrint = $fillManager->fillReport($report, $params, $conn); 
     $exporter = new java("net.sf.jasperreports.engine.JRExporter"); 
     $outputPath = "............outputfatt88.pdf"; 
     $exporter = new java("net.sf.jasperreports.engine.export.JRPdfExporter"); 
     $exporter->setParameter(java("net.sf.jasperreports.engine.JRExporterParameter")->JASPER_PRINT, $jasperPrint); 
     $exporter->setParameter(java("net.sf.jasperreports.engine.JRExporterParameter")->OUTPUT_FILE_NAME, $outputPath); 
     $exporter->setParameter(java("net.sf.jasperreports.engine.JRExporterParameter")->REPORT_LOCALE, $locale); 

     header("Content-type: application/pdf"); 
     header("Content-Disposition: attachment; filename=outputfatt88.pdf"); 
     $exporter->exportReport(); 
     readfile($outputPath); 
     unlink($outputPath); 
    } 

上記のコードは動作していますが、今はイタリア語に設定するためにREPORT_LOCALEを設定する必要があります。

私はいくつかの検索をしたと私はのJavaでこのコードを見つけました:

Locale locale = new Locale("en", "US"); 
metadata.put(JRParameter.REPORT_LOCALE, locale); 

私は "私は私の実際のコードに挿入することができるようにPHPに変換する必要があり、それを変更する必要がありますイタリア語 "の価値。 私は以下のようにしていない成功を収めてみました:

if (! defined('BASEPATH')) exit('No direct script access allowed'); 

require_once("http://localhost:8080/JavaBridge/java/Java.inc"); 
if (! function_exists('run_report')) { 
    function run_report($report_name = '') { 
     //--------------------------------------------------------------- 
     // Esegue un report di Jasper Report 
     // $report_name è il nome del file .jwxml senza estensione 
     //--------------------------------------------------------------- 
     try { 
      $jasperxml = new Java("net.sf.jasperreports.engine.xml.JRXmlLoader"); 
      $jasperDesign = $jasperxml->load(realpath("./assets")."/".$report_name.".jrxml"); 
      $compileManager = new JavaClass("net.sf.jasperreports.engine.JasperCompileManager"); 
      $report = $compileManager->compileReport($jasperDesign); 
     } catch (JavaException $ex) { 
      echo $ex; 
     } 
     $fillManager = new JavaClass("net.sf.jasperreports.engine.JasperFillManager"); 
     $params = new Java("java.util.HashMap"); 
     $params->put("id_record", 88); 
     $class = new JavaClass("java.lang.Class"); 
     $class->forName("com.mysql.jdbc.Driver"); 
     $driverManager = new JavaClass("java.sql.DriverManager"); 

     $locale = new Java("java.util.Locale", "en", "US"); 
//db username and password 
     $conn = $driverManager->getConnection("jdbc:mysql://myhost:3306/mydb?zeroDateTimeBehavior=convertToNull", "myuser", "mypassword"); 
     $jasperPrint = $fillManager->fillReport($report, $params, $conn); 
     $exporter = new java("net.sf.jasperreports.engine.JRExporter"); 
     $outputPath = "/................./outputfatt88.pdf"; 
     $exporter = new java("net.sf.jasperreports.engine.export.JRPdfExporter"); 
     $exporter->setParameter(java("net.sf.jasperreports.engine.JRExporterParameter")->JASPER_PRINT, $jasperPrint); 
     $exporter->setParameter(java("net.sf.jasperreports.engine.JRExporterParameter")->OUTPUT_FILE_NAME, $outputPath); 
     $exporter->setParameter(java("net.sf.jasperreports.engine.JRExporterParameter")->REPORT_LOCALE, $locale); 

     header("Content-type: application/pdf"); 
     header("Content-Disposition: attachment; filename=outputfatt88.pdf"); 
     $exporter->exportReport(); 
     readfile($outputPath); 
     unlink($outputPath); 
    } 
} 

誰も私を助けてもらえますか?

+0

'$ロケール=新しいJava(」 java.util.Locale "、" en "、" US ");' - このコードを試しましたか?あなたはイタリアのロケールを使うべきです(あなたの投稿からわかるように) - "it_IT" –

+0

はい、あなたが私のコードで見ることができるように '$ locale = new Java(" java.util.Locale "、" en "、" US ");'がありますが、この行も '$ exporter-> setParameter(java ( "net.sf.jasperreports.engine.JRExporterParameter") - > REPORT_LOCALE、$ locale);それは自分のコードを破ります – agodoo

+0

'それは自分のコードを破壊します' - それはどういう意味ですか?間違いましたか? –

答えて

0

あなたは対象国に対応するロケールを作成する必要があります。すでに行われているよう

$locale = new Java("java.util.Locale", "it", "IT"); 

その後レポートに、ロケールを追加します。

$exporter->setParameter(java("net.sf.jasperreports.engine.JRExporterParameter")->REPORT_LOCALE, $locale); 
関連する問題