从Java到PHP重新创建PDF文件

从Java到PHP重新创建PDF文件,php,web-services,jasper-reports,Php,Web Services,Jasper Reports,我有一个Java的Web服务(使用Apache Axis),它获取文档的id,并调用JasperReports来创建一个PDF文件(以前在Java应用程序-服务器端创建的报告),以创建报告,我使用的方法是:jaspermager.fillReport和jaspereExportManager.exportReportToPdf。最后一个返回字节数组。我的Web服务接收数组并将其编码为Base64字符串,PHP从Web服务接收该字符串作为响应 我想用PHP重新创建这个文件,但我不知道这是否可行。我

我有一个Java的Web服务(使用Apache Axis),它获取文档的id,并调用JasperReports来创建一个PDF文件(以前在Java应用程序-服务器端创建的报告),以创建报告,我使用的方法是:jaspermager.fillReport和jaspereExportManager.exportReportToPdf。最后一个返回字节数组。我的Web服务接收数组并将其编码为Base64字符串,PHP从Web服务接收该字符串作为响应

我想用PHP重新创建这个文件,但我不知道这是否可行。我正试图通过以下代码片段来实现这一点:

private function createFileFromString($stringWithFile){
    header('Content-Description: File Transfer');
    header("Content-Type: application/pdf");
    header('Content-Disposition: attachment; filename=remesa.pdf');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    ob_start();
    ob_clean();
    ob_flush();
    flush();
    $fp = file_put_contents("document.pdf", "w");
    fwrite($fp, base64_decode($stringWithFile));
    readfile($fp);
    ob_get_contents();
    fclose($fp);
    exit();
}
WebService返回如下字符串:

JVBERI0xLJQKJELJZ9MKNCAWIG9IA8PC9UEXBLL1HPYMPLY3QVQ29SB3JTCGFJZS9EZXZPY2VS R0IvU3VidHlwZS9JbWFnZS9CaXRzUGVyQ29tcG9uZW50IDgvV2lkdGggMjg0L0xlbmd0aCAzNjc0 L0hlaWdodCA1MC9GaWx0ZXIvRENURGVjb2RlPj5zdHJlYW0K/9j/4AAQSKZJRJRGABAAAQABAAD/ 2WBDAAGGBGCBQGHBWCQCQDBQNDASLDBKSEW8UHROFH0AHBWGJC4NICIXWCKDCPLDAXNDQ0 Hyc5PTgyPC4zNDL/2WBDAQKJCQWLDBGNDRGYIRWHMJYMJYMJYMJYMJYMJYMJYMJYMJYMJYMJYMJJYMJYY MJIYMJIYMJIYMJIYMJIYMJYMJYMJYMJYMJYMJYMJYMJL/wAARCAAyARwDASIAAhEBAxEB/8QAHWAAAQUBAQEEBAQEA

此字符串具有“PDF标头”,开头如下:

%PDF-1.4%目标 溪流

当我尝试下载该文件时,它的大小约为4-5KB(并且,该文件已损坏),但响应字符串约为180KB

这可能吗?我做错了什么

编辑:我已经阅读了有关函数的内容,也许这个函数可以帮助我?


提前谢谢

好的,我解决了。基本上,我有两个错误:

1。来自Java:我用来编码PDF文件内容的类(
org.w3c.tools.codec.Base64Encoder
)正在用文件内容损坏字符串,而不是这个类,我切换到Apache Axis工具(
org.Apache.Axis.encoding.Base64
)。我这样说是因为我比较了用Java应用程序生成的PDF的内容和从WebService返回的内容,最后一个稍微小一点

2。从PHP:构建文件:在这一部分中,我尝试这样做:

$fp = file_put_contents("document.pdf", "w");
fwrite($fp, base64_decode($stringWithFile));
readfile($fp);
但是,只有使用文件内容,我才将内容写入PDF文件,在这一点上并不一定。我正在使用以下代码段生成pdf:

private function createFileFromString($stringWithFile){
    header('Content-Description: File Transfer');
    header("Content-Type: application/pdf");
    header('Content-Disposition: attachment; filename=document.pdf');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    flush();
    file_put_contents("document.pdf", base64_decode($stringWithFile));
    readfile("document.pdf");
    exit();
}

我希望这个答案对每个人都有帮助。

感谢您抽出时间回答您自己的问题。我相信它将来会帮助别人。单击答案旁边左上角的复选标记,即可将自己的答案标记为已接受。