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;
    }