Executando verificação de segurança...
6

Sugestão de Gerador de Relatório

Pessoal, preciso da ajuda de vocês.

Estou desenvolvendo um ERP com Bubble e XANO, isto através da agência ESTARE.
Estamos chegando na parte de relatórios e por se tratar de plataformas nocode, elas só criam o relatório a partir de uma chamada API.

Nas pesquisas que a ESTARE e eu fizemos, chegamos a alguns geradores de relatório, como é o caso do API Template.
O plano PDF Standard custa 24 doláres por mês e permite gerar até 3.000 PDF, mas com 20 templates.
Já o plano PDF Premium, custa 89 doláres por mês e permite gerar até 12.000 PDF, tendo 180 templates.

A curto prazo vejo que o API Template atenderia bem, já que ao lançar o sistema não devemos ter uma alta demanda de geração de relatórios, mas a médio prazo esta demanda vai aumentar e isto pode ficar inviável.

Tendo em vista isto estou procurando outras soluções de gerador de relatórios para utilizar no meu ERP Bubble-XANO.
Uma solução gratuita seria ótimo, mas não dá para sonhar muito.

Dos geradores de relatórios que encontrei pela internet tem estes:

  • metabase:
    85 doláres por mês;
    PDF Ilimitado;
    Vários Formatos;
    Observação: Há a opção Open Source onde posso hospedar em meu servidor;

  • venngage:
    24 doláres por mês;
    PDF Ilimitado;
    Vários Formatos;

  • visme:
    29 doláres por mês;
    PDF Ilimitado;
    Vários Formatos;

Ao olhar a documentação disponível não ficou 100% claro para mim se daria para usar via API ou de alguma outra forma integrada ao meu sistema.

Se você tiver alguma sugestão de gerador de relatório com o melhor custo benefício, levando em consideração o designer para criar os relatórios, o custo e ser integrado via BUBBLE/API Rest, gostaria de ouvir ou melhor, ler.

Agora pensando a médio e longo prazo temos a situação de desenvolver minha própria API de gerador de relatório, onde posso pegar um projeto OPEN SOURCE para utilizar ou uma biblioteca que converte HTML em PDF ou algo do tipo, mas desde que seja em JavaScript/TypeScript.

Há sugestões?

Carregando publicação patrocinada...
3

Atualmente eu tenho um saas que gera relatórios em pdf com aproximadamente 30 páginas. A solução que estou utilizando no momento foi criar componentes para cada página, transforma-los em imagem com a lib html2canvas e, depois, cada imagem vira uma página de pdf com a lib jsPDF. Faço tudo isso client-side, ou seja, a parte boa é que não me gera muitos custos.

Confesso que ainda não estou satisfeito com o resultado, quero evoluir e deixar mais personalizavél, pois atualmente todos os usuários utilizam o mesmo template (apenas alterando valores).

2

Poderia contar mais sobre? Estou utilizando o puppeteer para criar imagens e gerar pdf a partir de templates tbm.

Deixa o link da ferramenta tbm. Seria bom

1

Atualmente minha ferramenta está em beta fechado, mas detalhando mais, funciona da seguinte forma. Criei um componente react com a exata medida de cada página e o atributo pdf-page (pdf-page h-[506px] w-[900px]). Em seguida, criei uma página que funciona como um preview, onde junto os 30 componentes (um por página) e tem um botão para fazer a "magia".

 const generatePDF = async () => {
    setSaving(true);
    const reportContent = document.querySelectorAll('.pdf-page') as NodeListOf<HTMLElement>;
  
    if (reportContent.length > 0) {
      const report = new jsPDF('landscape', 'px', [506, 900]);
  
      for (let i = 0; i < reportContent.length; i++) {
        const canvas = await html2canvas(reportContent[i], { scale: 2, useCORS: true });
        const imgData = canvas.toDataURL('image/jpeg');
  
        if (i > 0) {
          report.addPage();
        }
  
        report.addImage(imgData, 'JPEG', 0, 0, 900, 506);

        if (i > 1) {
          report.setFontSize(16);
          report.setTextColor(128, 128, 128);
          report.text(`${i + 1}`, report.internal.pageSize.width - 20, 20);
        }
      }
  
      report.save(`planejamento_${planning?.name}.pdf`);
      setSaving(false);
    } else {
      console.error("No report content found!");
      setSaving(false);
    }
  };

Se quiser, podemos marcar uma call para trocar mais ideias, eu ainda não estou satisfeito com essa solução. Porém tem funcionado, já forma gerados mais de 750 documentos. Meu negócio depende muito disso, pois os usuários (advogados) pagam por documento gerado.

1

Focar em mercado de advogado é uma boa. Eu ainda estou em fase de teste também. Usando o puppeteer para ver se realmente vale a pena ser gerado assim. A minha ideia é criar um editor primeiramente para que a pessoa possa alterar os valores por ali e com um tempo ir adicionando mais modelo junto da possibilidade de criar o seu próprio.

Eu não costumo ir call mas podemos marcar uma.

1

No meu caso, utilizei o motor de templates Nunjucks, que é baseado no Jinja2. Criei o template em HTML, fazendo-o semelhante a uma template string. Então, chamei a biblioteca, passei os dados para que ela realizasse a renderização do HTML e, posteriormente, usei o Puppeteer para gerar o PDF

{% endif %} {% if rdo.images %}
      <span> IMAGENS ({{ rdo.images | length }}) </span>
      <div class="images">
        {% for image in rdo.images %}
        <div class="image">
          <img
            loading="lazy"
            src="{{ image.url }}"
            alt="{{ image.description }}"
          />
          <span class="text-overlay">{{ image.description }}</span>
        </div>
        {% endfor %}
      </div>
      {% endif %}
		nunjucks.configure(
			'./files', {
			autoescape: true
		});

		const htmlContent = nunjucks.render('template.html', data);

		fs.writeFileSync('./files/output.html', htmlContent);

		const browser = await puppeteer.launch(
			{
				headless: true,
				args: ['--no-sandbox', '--disable-setuid-sandbox']
			}
		);
		const page = await browser.newPage();
		await page.setContent(htmlContent);
		await page.addStyleTag({ path: './files/style.css' });
		await page.pdf({ path: './files/output.pdf', format: 'A4', printBackground: true });
1

Eu estou planejando fazer um saas para isso. Seria um experimento para mim, e colocar quase uma década de experiência trabalhando para projetos privados.

Basicamente, em essência, você requisita para api passando o html content ou um endpoint com o html content, e ele renderiza o pdf de maneira inteligente.

Primero, estima o tamanho, se for menos que 1mb, ai ele irá te retornar o pdf (uma url contendo o pdf, mas com opção de retornar application/pdf direto).

Se for maior, ele irá para uma queue e você poderá optar por ter um webhook para pegar o pdf, ou uma polling fetch baseado no id.

Eu usarei algumas técnicas que drasticamente reduz custos, então terá um custo bem baixo por pdf (claro, vai depender do tempo de renderização de cada pdf, mas ai você pode definir um limite tanto de budge quanto de tamanho, ai nunca terá surpresa, a ideia é ser 'pay per use' com um free tier).

O que você acha dessa ideia? Vê algum potencial uso? Claro, além disso tem outras tools, mas a essência em si, seria isso.