重新创建PDF文件从Java到PHP(Recreate PDF File From Java To

2019-06-25 10:43发布

我有在Java中(使用Apache轴)获得的文档的ID,这调用JasperReports的创建PDF文件的WebService(以前在Java应用程序中创建报告 - 服务器端),创建我使用的方法的报告:JasperManager.fillReport和JasperExportManager.exportReportToPdf。 最后一个返回的字节的阵列。 我的web服务需要的阵列和它编码为Base64字符串,PHP接收该字符串作为从WebService响应。

我想重新创建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的返回字符串像这样:

JVBERi0xLjQKJeLjz9MKNCAwIG9iaiA8PC9UeXBlL1hPYmplY3QvQ29sb3JTcGFjZS9EZXZpY2VS R0IvU3VidHlwZS9JbWFnZS9CaXRzUGVyQ29tcG9uZW50IDgvV2lkdGggMjg0L0xlbmd0aCAzNjc0 L0hlaWdodCA1MC9GaWx0ZXIvRENURGVjb2RlPj5zdHJlYW0K / 9J / 4AAQSkZJRgABAgAAAQABAAD / 2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0 Hyc5PTgyPC4zNDL / 2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL / wAARCAAyARwDASIAAhEBAxEB / 8QAHwAAAQUBAQEBAQEA ...

该字符串的“PDF头”,是这样开始的:

%PDF-1.4%âãÏÓ4 0 OBJ <>流ÿØÿà

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

这可能吗? 我在做什么错?

编辑:我读过有关解包功能,或许这个功能可以帮助我吗?

提前致谢

Answer 1:

好吧,我解决了这个问题。 我有,基本上,两个错误:

1.从Java:我已经使用到PDF文件(内容编码类org.w3c.tools.codec.Base64Encoder )被破坏,而不是此类与该文件内容的字符串,我已经切换到Apache轴工具( org.apache.axis.encoding.Base64 )。 我这样说是因为我比较了我的Java应用程序生成的PDF的内容和内容从WebService返回,最后一个是小了些。

2.从PHP:建立文件:在这一部分,我一直试图做到这一点:

$fp = file_put_contents("document.pdf", "w");
fwrite($fp, base64_decode($stringWithFile));
readfile($fp);

但是,只有file_put_contents我所做的内容写入到一个PDF文件,使用fwrite它不一定是在这一点上。 我生成这个片段中的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();
}

我希望这个答案可以帮助大家。



文章来源: Recreate PDF File From Java To PHP