从Java到PHP重新创建PDF文件
我有一个Java的Web服务(使用Apache Axis),它获取文档的id,并调用JasperReports来创建一个PDF文件(以前在Java应用程序-服务器端创建的报告),以创建报告,我使用的方法是:jaspermager.fillReport和jaspereExportManager.exportReportToPdf。最后一个返回字节数组。我的Web服务接收数组并将其编码为Base64字符串,PHP从Web服务接收该字符串作为响应 我想用PHP重新创建这个文件,但我不知道这是否可行。我正试图通过以下代码片段来实现这一点:从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重新创建这个文件,但我不知道这是否可行。我
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();
}
我希望这个答案对每个人都有帮助。感谢您抽出时间回答您自己的问题。我相信它将来会帮助别人。单击答案旁边左上角的复选标记,即可将自己的答案标记为已接受。