Estou criando um projeto em Java usando o Spring Boot. Nesse projeto, eu quero transformar uma tabela do front em PDF, mas nao sei como fazer isso. alguem poderia me ajudar??
Estou criando um projeto em Java usando o Spring Boot. Nesse projeto, eu quero transformar uma tabela do front em PDF, mas nao sei como fazer isso. alguem poderia me ajudar??
Oi Robert,
Se for uma app web tradicional, com frontend feito com Thymeleaf, você pode gerar o PDF da página html utilizando o próprio Thymeleaf: https://www.baeldung.com/thymeleaf-generate-pdf
Outra maneira é utilizando a biblioteca Flying Saucer: https://github.com/flyingsaucerproject/flyingsaucer https://flyingsaucerproject.github.io/flyingsaucer/r8/guide/users-guide-R8.html
Ah obrigado, tentarei aqui. Sim, o projeto é todo feito usando o thymelef, e boostrap no front
Olá, conseguir através de sua dica criar o pdf através do html
//Metodo que cria Pdf usando o HTML
public void createPDF(List<NotaFiscal> list) throws DocumentException, IOException {
//Obj que permite inserir variaveis no html
Context context = new Context();
//Definindo a variavel do html
context.setVariable("notas", list);
//Inserindo no html as variaveis e passando para String o html criado
String processHtml = templateEngine.process("modelo/teste", context);
//Definindo o local de saída do arquivo
OutputStream out = new FileOutputStream("resultado.pdf");
//Obj. que permitira transformar a String do Html em pdf
ITextRenderer renderer = new ITextRenderer();
//Passando a string do Html
renderer.setDocumentFromString(processHtml);
renderer.layout();
//Criando o pdf do html passado
renderer.createPDF(out, false);
renderer.finishPDF();
out.close();
}
Entretanto, não consigo fazer com que o pdf criado saia diretamente no navegador do usário. A solução que encontrei no momento foi o de deixar armazenado dentro da pasta do codigo o pdf criado, para que aí sim, eu possa o enviar para que seja baixado pelo o navegador do usuário.
//Baixar pelo o navegador o pdf Criado
@GetMapping("/{id}/criarPDF")
public ModelAndView criarPdf(@PathVariable Long id, HttpServletResponse http) {
//Redereciona para a pagina principal
ModelAndView mv = new ModelAndView("redirect:/" + id);
//Seleciona as notas fiscais
List<NotaFiscal> lstNota = nfRepository.findByNotasFiscaisPeriodo(id);
try {
//Função para criar o arquivo em PDF
createPDF(lstNota);
//Selecionando o arquivo criado
File file = new File("resultado.pdf");
//------------ essa parte eu não entendi muito bem como funciona
http.setContentType("application/octet-stream");
String headerKey = "Content-Disposition";
String headerValue = "attachment; filename=" + file.getName();
http.setHeader(headerKey, headerValue);
ServletOutputStream out = http.getOutputStream();
BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream(file));
//-------------------------------
//Passando os bytes do arquivo, caso nao faça isso o pdf baixado pelo o navegador será vazio
byte[] buffer = new byte[8192];
int bytesRead = -1;
while ((bytesRead = inputStream.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
}
inputStream.close();
out.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return mv;
}