Comment générer un fichier PDF téléchargeable avec pdfbox (PDF corrompu)?

Comment puis-je faire un fichier PDF téléchargeable en un lien?

Je suis en train de construire une application web en utilisant JSF, lorsque l'utilisateur clique dans une "Enregistrer au format PDF" lien d'un fichier PDF doit être disponible pour être téléchargé.

Jusqu'à présent, j'ai un code de travail qui génère le fichier PDF, mais le fichier est enregistré sur mon bureau et que je veux faire, c'est que lorsque l'utilisateur clique sur le lien du fichier pdf est téléchargeable au lieu d'être stockées dans l'application.

Mise à JOUR 3:
Merci pour votre aide les gars, j'ai modifié mon code avec vos suggestions, et ça fonctionne.

Mise à JOUR 2:
J'obtiens l'erreur suivante: Adoble Lecteur pourrait ne pas ouvrir "monfichier.pdf" parce que n'est pas pris en charge type de fichier ou parce que le fichier a été endommagé

Mise à JOUR 1:
Je vais ajouter mon code actuel avec les modifications que vous avez fait moi, cependant, j'ai encore du mal à faire ce travail

C'est ma méthode qui a généré le fichier PDF:

public ByteArrayOutputStream createPDF() throws IOException, COSVisitorException {
PDDocument document;
PDPage page;
PDFont font;
PDPageContentStream contentStream;
PDJpeg front;
PDJpeg back;
InputStream inputFront;
InputStream inputBack;
ByteArrayOutputStream output = new ByteArrayOutputStream(); 
//Creating Document
document = new PDDocument();
//Creating Pages
for(int i=0; i<2; i++) {
page = new PDPage();
//Adding page to document
document.addPage(page); 
//Adding FONT to document
font = PDType1Font.HELVETICA;           
//Retrieve Image to be added to the PDF
inputFront = new FileInputStream(new File("D:/Media/imageFront.jpg"));  
inputBack = new FileInputStream(new File("D:/Media/imageBack.jpg"));
BufferedImage buffFront = ImageIO.read(inputFront);
BufferedImage resizedFront = Scalr.resize(buffFront, 460);
BufferedImage buffBack = ImageIO.read(inputBack);
BufferedImage resizedBack = Scalr.resize(buffBack, 460); 
front = new PDJpeg(document, resizedFront);
back = new PDJpeg(document, resizedBack);
//Next we start a new content stream which will "hold" the to be created content.
contentStream = new PDPageContentStream(document, page);                
//Let's define the content stream
contentStream.beginText();
contentStream.setFont(font, 8);
contentStream.moveTextPositionByAmount(10, 770);
contentStream.drawString("Amount: $1.00");
contentStream.endText();
contentStream.beginText();
contentStream.setFont(font, 8);
contentStream.moveTextPositionByAmount(200, 770);
contentStream.drawString("Sequence Number: 123456789");
contentStream.endText();
contentStream.beginText();
contentStream.setFont(font, 8);
contentStream.moveTextPositionByAmount(10, 760);
contentStream.drawString("Account: 123456789");
contentStream.endText();
contentStream.beginText();
contentStream.setFont(font, 8);
contentStream.moveTextPositionByAmount(200, 760);
contentStream.drawString("Captura Date: 04/25/2011");
contentStream.endText();
contentStream.beginText();
contentStream.setFont(font, 8);
contentStream.moveTextPositionByAmount(10, 750);
contentStream.drawString("Bank Number: 123456789");
contentStream.endText();
contentStream.beginText();
contentStream.setFont(font, 8);
contentStream.moveTextPositionByAmount(200, 750);
contentStream.drawString("Check Number: 123456789");
contentStream.endText();            
//Let's close the content stream       
contentStream.close();
}
//Finally Let's save the PDF
document.save(output);
document.close();
return output;
}

C'est ma servlet qui appellent le code précédent et génère la sortie et de la tête:

try {
ByteArrayOutputStream output = new ByteArrayOutputStream();
output = createPDF();
response.addHeader("Content-Type", "application/force-download"); 
response.addHeader("Content-Disposition", "attachment; filename=\"yourFile.pdf\"");
response.getOutputStream().write(output.toByteArray());
} catch (Exception ex) {            
ex.printStackTrace();
}   

Je ne suis pas sûr de ce que je suis absent depuis quand j'essaie d'ouvrir le PDF que j'ai obtenu l'erreur: Adoble Lecteur pourrait ne pas ouvrir "monfichier.pdf" parce que n'est pas pris en charge type de fichier ou parce que le fichier a été endommagé

source d'informationauteur Night Elve | 2012-01-18