Seguinte, eu estou gerando um pdf com uma imagem, funciona no perfil de desenvolvimento, porém no Heroku, o pdf não é gerado. O que eu estou fazendo é o seguinte, estou salvando direto no classpath o pdf e a imagem e dali eu mando via REST para o frontend. Está parecendo que no Heroku, não é a mesma subdivisão de pastas que é estabelecido por padrão, alguém sabe a solução? Onde posso por estes arquivos para que eles sejam gerados no Heroku e não ignorados?
Atualmente estava em target/classes
O erro é 500 file not found.
@RequestMapping(value = "/{id}/download", method = RequestMethod.GET, produces = "application/pdf")
public ResponseEntity<InputStreamResource> downloadPDFFile(@PathVariable Integer id)
throws IOException {
Parecer parecer = service.findById(id);
String path = service.createPDF(parecer);
ClassPathResource pdfFile = new ClassPathResource(path,this.getClass().getClassLoader());
HttpHeaders headers = new HttpHeaders();
headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
headers.add("Content-Disposition", "attachment;filename=\""+parecer.getTitulo()+".pdf\"");
headers.add("Pragma", "no-cache");
headers.add("Expires", "0");
return ResponseEntity
.ok()
.headers(headers)
.contentLength(pdfFile.contentLength())
.contentType(MediaType.parseMediaType("application/pdf"))
.body(new InputStreamResource(pdfFile.getInputStream()));
}
CLASS SERVICE
public String createPDF(Parecer parecer) {
String path = "";
String arquivo ="\\relatorio.pdf";
Document document = new Document();
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
try {
ClassPathResource pdf = new ClassPathResource(path,this.getClass().getClassLoader());
PdfWriter writer = PdfWriter.getInstance(document, new
FileOutputStream(pdf.getURL().toString().substring(6)+arquivo));
document.open();
HeaderAndFooterService event = new HeaderAndFooterService(parecer);
writer.setPageEvent(event);
String filename = "";
ClassPathResource img = new ClassPathResource(filename,this.getClass().getClassLoader());
Image image = Image.getInstance(img.getURL().toString().substring(6)+"\\clinica_online.png");
image.setAbsolutePosition(460, 780);
writer.getDirectContent().addImage(image);
ColumnText.showTextAligned(writer.getDirectContent(), Element.ALIGN_CENTER, new Paragraph("Clínica Online",FontFactory.getFont(FontFactory.TIMES_ITALIC, 12)), 540, 795, 0);
document.add(new Paragraph(parecer.getTitulo(),FontFactory.getFont(FontFactory.HELVETICA, 16)));
document.add(new Paragraph(parecer.getCliente().getNome(),FontFactory.getFont(FontFactory.HELVETICA, 10)));
Paragraph date = new Paragraph(sdf.format(parecer.getData()),FontFactory.getFont(FontFactory.HELVETICA, 10));
document.add(date);
document.add(new Paragraph(" "));
Paragraph desc = new Paragraph(parecer.getDescricao(),FontFactory.getFont(FontFactory.TIMES_ROMAN, 13));
document.add(desc);
}
catch(DocumentException de) {
System.err.println(de.getMessage());
}
catch(IOException ioe) {
System.err.println(ioe.getMessage());
}
document.close();
return path+arquivo;
}