gpt4 book ai didi

java - 在 PHP 中使用 Java Bridge 调用 BIRT 时正确的字符编码

转载 作者:行者123 更新时间:2023-11-30 07:39:09 25 4
gpt4 key购买 nike

我正在调用 BIRT 通过 Java Bridge 生成 PDF 报告:

<?php

require_once("java/Java.inc");

class runReport {

function runReport($report, $param, $output) {

header("Content-type: application/pdf");
header("Content-Disposition: attachment; filename=".$output.".pdf");

$report_name = RP_REPORT . $report;
$ctx = java_context()->getServletContext();
$birtReportEngine = java("org.eclipse.birt.php.birtengine.BirtEngine")->getBirtEngine($ctx);
java_context()->onShutdown(java("org.eclipse.birt.php.birtengine.BirtEngine")->getShutdownHook());

try{

$connect = new Java("connectDb");

$report = $birtReportEngine->openReportDesign($report_name);
$task = $birtReportEngine->createRunAndRenderTask($report);

foreach ($param as $key => $value) {
$task->setParameterValue($key, new java("java.lang.String",$value));
}

$taskOptions = new java("org.eclipse.birt.report.engine.api.PDFRenderOption");
$outputStream = new java("java.io.ByteArrayOutputStream");
$taskOptions->setOutputStream($outputStream);
$taskOptions->setOutputFormat("pdf");

$task->setRenderOption( $taskOptions );
$task->getAppContext()->put("OdaJDBCDriverPassInConnection", $connect->getConnection(SERVEUR, BDD_PORT, BDD, LOGIN_DB, PWS_DB));
$task->run();
$task->close();


} catch (JavaException $e) {

echo $e; //"Error Calling BIRT";
}

echo java_values($outputStream->toByteArray());

}
}
?>

除非 $param 包含包含非 ASCII 字符的参数,否则该方法可以正常工作。当 $param 确实包含包含非 ASCII 字符的参数时,不会生成报告。

$param 的编码未知。

最佳答案

Java Bridge 的默认编码是“utf-8”。因此字符串需要编码为UTF-8。

foreach ($param as $key => $value) {
$utf_8_value = mb_convert_encoding($report_name, "utf-8")
$task->setParameterValue($key, new java("java.lang.String", $utf_8_value));
}

如果$param的元素不是iso-8895-1编码的,请将mb_convert_encoding的第三个选项设置为适当的编码

关于java - 在 PHP 中使用 Java Bridge 调用 BIRT 时正确的字符编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34940348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com