2017-10-19 8 views
0

C'est la première fois que j'utilise la bibliothèque iText 7. Je voudrais envoyer le pdf généré par ma réponse http @Get sans stocker le fichier sur mon serveur. Je essayé ceci:IText 7 - Comment envoyer des fichiers PDF via une API de repos sans stocker de fichier?

@GET 
@Path("/generatePDF") 
@Produces({MediaType.APPLICATION_OCTET_STREAM}) 
public Response generatePDF() { 
    try { 

     String text ="This is the text of my pdf"; 
     ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
     PdfDocument pdfDoc = new PdfDocument(new PdfWriter(baos)); 

     Document doc = new Document(pdfDoc);    
     doc.add(new Paragraph(text)); 
     doc.close(); 
     System.err.println("doc closed"); 


     return Response.ok().entity(baos). 
       header("Content-Disposition", 
       "attachment; filename=\"mypdf - " + new Date().toString() + ".pdf\"") 
       .header("Expires", "0") 
       .header("Cache-Control","must-revalidate, post-check=0, pre-check=0") 
       .header("Pragma", "public") 
       .build(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return Response.status(Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); 
    } 
} 

Mais je suis face à l'erreur suivante:

GRAVE [http-nio-8080-exec-4] org.glassfish.jersey.message.internal.WriterInterceptorExecutor $ TerminalWriterInterceptor.aroundWriteTo MessageBodyWriter introuvable pour le type de média = application/octet-stream, type = classe java.io.ByteArrayOutputStream, genericType = classe java.io.ByteArrayOutputStream.

Avez-vous une idée comment faire? Je n'ai rien trouvé dans la documentation.

+1

Avez-vous essayé d'utiliser 'Response.ok() entité (baos.toByteArray()) ...' au lieu de 'Response.ok () .entité (baos) ... '? – mkl

+0

Plus d'erreur avec ça. Merci beaucoup ! – anais1477

Répondre

1

Response attend InputStream plutôt que OutputStream. Il suffit donc de remballer vos octets dans InputStream et envoyer la réponse.

ByteArrayInputStream pdfStream = new ByteArrayInputStream(baos.toByteArray()); 
return Response.ok().entity(pdfStream); 
+0

Merci aussi :) J'ai utilisé baos.toByteArray() directement pour éviter la création d'un objet temp :) – anais1477