À l'aide de la bibliothèque iText, de générer sur la mémoire d'un fichier PDF est généré sur le disque au lieu
Je suis de la génération d'un fichier PDF à partir d'une application Java. (Et fonctionne très bien) le problème est que le fichier PDF est généré sur le disque:
Document documento = new Document(PageSize.A4, 25, 25, 25, 25);
PdfWriter writer = PdfWriter.getInstance(documento, new FileOutputStream("/Users/sheldon/Desktop/Registry.pdf"));
documento.open();
//Put some images on the PDF
for( byte[] imagen : imagenes )
{
Image hoja = Image.getInstance(imagen);
hoja.scaleToFit(documento.getPageSize().getHeight(), documento.getPageSize().getWidth());
documento.add(hoja);
}
documento.addTitle("Generated Registry!");
documento.close();
Maintenant, que l'utilisateur va chercher le fichier PDF et de les imprimer je n'ai pas besoin de les stocker sur le disque. J'ai besoin (si possible) de les générer à la mémoire et à l'utilisation d'une commande à ouvrir avec acrobat reader) de ce document.
Est-ce possible? Aucune idée.
Si non, quelles sont vos suggestions (sur votre expérience).
Je vous remercie à l'avance.
EDIT:
Est un standard de Java Application de Bureau.
L'ouverture du fichier PDF via une commande de sons spécifiques aux systèmes d'exploitation. Quel système d'exploitation êtes-vous cibler?
Pour le Développement de Mac OS X Snow Leopard. Mais l'application va s'exécuter uniquement sur les Systèmes Windows.
Pour le Développement de Mac OS X Snow Leopard. Mais l'application va s'exécuter uniquement sur les Systèmes Windows.
OriginalL'auteur Sheldon | 2010-01-28
Vous devez vous connecter pour publier un commentaire.
Pour que cela fonctionne, Acrobat doit être en mesure d'accéder à la mémoire d'un autre processus (Java). Ce n'est pas possible.
Vous pourriez juste voulez écrire les fichiers sur le système de répertoire temporaire.
Si votre application reste ouverte après l'ouverture du fichier PDF dans Acrobat, vous voudrez peut-être regarder dans l'aide d'une combinaison de
File.createTempFile()
etFichier.deleteOnExit()
, pour que le fichier supprimé à la fin de la JVM.OriginalL'auteur matt b
Si vous ne voulez pas iText pour générer votre document sur le disque, puis il suffit de faire ceci:
Ce ne sera pas vous aider car le Lecteur ne peut pas y accéder jusqu'à ce que vous écrit quelque part Acrobat peut accéder. Si vous ne voulez pas que d'être sur le disque, puis monter un virtuel dans la mémoire de disque et de graver vos fichiers. Comment vous faites cela, dépend de votre système d'exploitation.
OriginalL'auteur behe
Oui... c'est assez facile. Vous avez juste à diffuser le contenu de retour à la charge du demandeur (c'est à dire via l'objet de Réponse dans un Servlet). Vous devez également définir l'en-tête
Vous pouvez aussi définir pour l'obtenir pour ne pas l'ouvrir dans le navigateur
Grâce mlathe mais ce est une application de bureau 🙂
Bon point 🙂 Mais si quelqu'un se soucie de comment le faire avec une application web!
Je ne! Je suis venu ici à la recherche pour cette réponse donc merci mlathe!
OriginalL'auteur mlathe
Je ne suis pas un JAVA-programmeur, mais je travaille avec iText un peu en ce moment et j'ai eu la même question. J'ai pensé que si pdfWriter seulement besoin d'un outputStream il pourrait aussi bien utiliser java.io.ByteArrayOutputStream. Que serait la nouvelle ByteArrayOutputStream() je suppose que, en JAVA, comme je suis à l'aide de ColdFusion.
Pour moi, ça fonctionne.
OriginalL'auteur Dominique
L'exigence peut être pour une application web où les utilisateurs peuvent télécharger un fichier PDF est généré au moment de l'exécution.
File.createTempFile()
peut créer un grand nombre de fichiers temporaires etFile.deleteOnExit()
ne sera appelée sur la JVM de sortie - pas un scénario idéal.Dans de tels cas, il sera sage de mettre en œuvre ce que @behe suggéré et enfin écrire
ByteArrayOutputStream
objet deServletOutputStream
.OriginalL'auteur deb_