Generare PDF in Micronaut

Mattepuffo's logo
Generare PDF in Micronaut

Generare PDF in Micronaut

Ho dovuto aggiungere una funzione di creazione e download PDF ad un progetto sviluppato in Java e Micronaut.

Per i PDF ci sono diverse librerie da usare in Java, ed in questo caso ho optato per OpenPDF.

Do per scontato che abbiamo già un progetto Micronaut funzionante.

Se usate Maven aggiungete questa dipendenza per OpenPDF:

<dependency>
  <groupId>com.github.librepdf</groupId>
  <artifactId>openpdf</artifactId>
  <version>2.0.3</version>
</dependency>

Adesso creaimo un servizio per generare il PDF:

package com.example;

import jakarta.inject.Singleton;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.PdfWriter;
import java.io.ByteArrayOutputStream;

@Singleton
public class PdfService {

  public byte[] generatePdf() throws DocumentException {
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    Document document = new Document();

    PdfWriter.getInstance(document, outputStream);
    document.open();
    document.add(new Paragraph("File PDF creato con Micronaut!"));
    document.add(new Paragraph("Come libreria per Java ho usato OpenPDF!"));
    document.close();

    return outputStream.toByteArray();
  }
}

Ovviamente potete anche interagire con un db per prendere i dati.

Poi creiamo un controller:

package com.example;

import io.micronaut.http.HttpResponse;
import io.micronaut.http.MediaType;
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;
import jakarta.inject.Inject;


@Controller("/test")
public class TestController {

  @Inject
  PdfService pdfService;

  @Get(produces = MediaType.APPLICATION_PDF)
  public HttpResponse<byte[]> index() {
    try {
      byte[] pdfBytes = pdfService.generatePdf();
      return HttpResponse
          .ok(pdfBytes)
          .contentType(MediaType.APPLICATION_PDF_TYPE)
          .header("Content-Disposition", "attachment; filename=\"test.pdf\"");
    } catch (Exception e) {
      return HttpResponse.serverError();
    }
  }
}

Lo start dell'applicazione non cambia.

Enjoy!


Condividi

Commentami!