Génération de PDF à l'aide de la bibliothèque iText dans Struts 2 : type de résultat flux ne fonctionne pas
Mon exigence est de générer un fichier PDF à l'aide de la bibliothèque iText, j'utilise le code ci-dessous pour créer un exemple de fichier PDF
Document document = new Document();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfWriter.getInstance(document, baos);
document.open();
document.add(new Paragraph("success PDF FROM STRUTS"));
document.close();
ServletOutputStream outputStream = response.getOutputStream() ;
baos.writeTo(outputStream);
response.setHeader("Content-Disposition", "attachment; filename=\"stuReport.pdf\"");
response.setContentType("application/pdf");
outputStream.flush();
outputStream.close();
Si vous le voyez dans le code ci-dessus, iText n'est pas à l'aide de tout inputStream paramètre, c'est plutôt l'écriture directe sur la réponse de l'outputstream. Alors que struts 2 est en nous mandatant pour l'utilisation InputStream paramètre (voir la configuration ci-dessous)
<action name="exportReport" class="com.export.ExportReportAction">
<result name="pdf" type="stream">
<param name="inputName">inputStream</param>
<param name="contentType">application/pdf</param>
<param name="contentDisposition">attachment;filename="sample.pdf"</param>
<param name="bufferSize">1024</param>
</result>
</action>
Je sais que ma classe devrait avoir des getters et setters pour inputStream et je n'ai que trop dans la classe mentionnée dans struts configuration
private InputStream inputStream;
public InputStream getInputStream() {
return inputStream;
}
public void setInputStream(InputStream inputStream) {
this.inputStream = inputStream;
}
Mais depuis iText n'a pas vraiment besoin inputstream plutôt il est écrit directement à la réponse de l'outputstream, je reçois des exceptions puisque ne suis pas le réglage de quoi que ce soit pour l'inputStream paramètre.
S'il vous plaît laissez-moi savoir comment utiliser la bibliothèque iText code dans struts 2 ayant la resultType stream
Grâce
Oui chaitanya.. vous avez raison . Je reçois illégale de l'état d'exception, me demandant de vérifier <param name="inputName">
j'ai supprimé ma réponse. semble que j'avais tort. comme l'a dit je ne suis pas familier avec struts
Vous pouvez créer l'inputstream à partir du flux de sortie:
setInputStream(new ByteArrayInputStream(baos.toByteArray()));
Cliquez ici et ici pour les solutions à l'aide de Dave Newton suggestion.
OriginalL'auteur Arun | 2012-09-04
Vous devez vous connecter pour publier un commentaire.
Trouvé la solution à ce.
La méthode dans l'action qui effectue cette exportation au format PDF peut être vide. Le type de résultat de la configuration n'est pas nécessaire alors que nous sommes en écrivant directement à la réponse de l'outputstream
par exemple, demandez à votre classe de l'action de cette façon
et votre struts configuration de cette façon
cela fonctionne cool !!!
Merci pour tous ceux qui ont tenté de répondre à cette question
S2 est resultType flux toujours l'air de java.io.InputStream objet pour le placer dans le code. Inputstream peut être rempli lors de la lecture d'un fichier PDF à partir d'un système de fichiers ou autres données du système. Alors que iText crée un fichier PDF écrit directement à la réponse de l'outputstream. Cela étant le cas, nous n'avons pas besoin de tout inputstream et aussi iText besoin inputstream à écrire. Donc c'solutions sonne bien pour moi 🙂
C'est un one-liner pour obtenir un flux d'entrée à partir d'un flux de sortie. La Configuration est plus flexible via XML, et normalisé par rapport au reste du système. Je ne suis pas l'argument jamais écrire directement à la réponse, mais quand vous n'avez pas , il semble être un gaspillage. Quoi que ce soit.
OriginalL'auteur Arun
Principale Réponse:
Vous pouvez également
return NONE
oureturn null
comme expliqué dans l'Apache docs:Exemple:
O'Reilly propose un tutoriel sur Créer dynamiquement des fichiers Pdf dans une Application Web à l'aide de Servlets (S. C. Sullivan, 2003). Il peut être transformé en un Struts2 classe de l'action comme indiqué ci-dessous.
Il est bon d'avoir une classe d'assistance comme
PDFGenerator
pour créer le PDF pour vous et de le retourner comme unByteArrayOutputStream
.PDFGenerator
classe:Vous pouvez maintenant appeler dans votre classe d'action.
ViewPDFAction
classe:web.xml
:struts.xml
:Mise à jour de la réponse de la génération de PDF.
OriginalL'auteur silver