我对PDF下载的要求是:
我该怎么做?
提前致谢。
答案 0 :(得分:2)
如果您正在使用Spring,则需要创建一个控制器
@Controller
@RequestMapping(value = "/report")
public class ReportController {
@Autowired
ReportFileStore reportFileStore;
@RequestMapping(value = "/download/{uniqueId}", method = RequestMethod.GET)
public void getFile(@PathVariable("uniqueId") String uniqueId, HttpServletResponse response) {
//Find the generated PDF from somewhere, might be a disk, or RAM
byte[] pdf = getFromStore(uniqueId);
writeToResponse(pdf,response);
deleteFileFromStore(uniqueId);
}
private byte[] getFromStore(String uniqueId){
return reportFileStore.getFile(uniqueId);
}
}
方法writeToResponse
是标准的servlet下载代码,您可以看到示例here或here。
关于getFromStore
,这是一个简单的方法获取从Jasper生成的PDF的byte [],当你生成时,你可以使用put方法存储带有uniqueId的byte []。
我使用像这样的界面
public interface ReportFileStore {
void storeFile(String uniqueId,byte[] content);
byte[] getFile(String uniqueId);
InputStream getFile(String uniqueId);
void deleteFile(String uniqueId);
}
使用映射在RAM或磁盘上的VFS实现它。
当然,在PDF生成中,您需要为其生成唯一ID,您可以尝试使用UUID。将此UUID与ReportFileStore
一起使用以保存PDF文件。目前还不清楚"是否需要返回下载链接和唯一身份标识"可以只返回uniqueId,然后在前端硬编码下载位置。如果没有,请返回JSON映射。