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
Vous devez vous connecter pour publier un commentaire.
Vous devez définir les en-têtes appropriés afin de dire au navigateur de télécharger le fichier.
Je n'ai pas fait de temps en temps, alors pardonnez-moi, mais ce que vous faites au lieu de sauver le fichier pdf en un fichier via un flux, vous enregistrer le flux dans la mémoire comme un tableau d'octets, et ensuite, lorsque l'utilisateur clique sur le lien, vous définissez le type MIME au format PDF et ensuite ouvrir le tableau d'octets comme un flux qui vous renvoyer à la réponse. Je m'excuse d'être un peu flou sur les détails. Je pense que j'ai aussi utilisé jpedal et iText pour le faire.
Je ne peux pas vous montrer tout le code, mais en voici quelques uns:
Vous pouvez alors écrire les baos sur votre réponse au format pdf en utilisant le bon type MIME.