Ouvrir fichier pdf en java
Gamso
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
Je dispose d'un fichier pdf qui correspond au manuel du programme que j'améliore actuellement.
Ce fichier est placer dans mon JAR et j'aimerais pouvoir l'ouvrir lorsque je clique sur "aide" dans mon programme.
Le listener sur "aide" est déjà implémenté mais j'arrive pas à ouvrir le pdf. J'ai cherché sur le net mais sans succès.
La "meilleur" solution trouvée actuellement est la suivante :
Le problème avec cette solution c'est qu'elle ne m'ouvre pas le fichier pdf et elle m'en fait une copie sur le bureau (La copie du fichier est obligatoire pour le lire ensuite ?).
J'ai également vu qu'il existait plusieurs librairies pour gérer les pdf mais je ne sais pas laquelle utilisée si jamais je doit en utiliser une.
J'ai aussi vu qu'on pouvait utiliser Runtime.getRuntime().exec() mais cette solution nécessite de donner le chemin d'accès d'adobe (par exemple). J'aimerais trouver une solution ne nécessitant pas cette contrainte.
Merci d'avance :)
Je dispose d'un fichier pdf qui correspond au manuel du programme que j'améliore actuellement.
Ce fichier est placer dans mon JAR et j'aimerais pouvoir l'ouvrir lorsque je clique sur "aide" dans mon programme.
Le listener sur "aide" est déjà implémenté mais j'arrive pas à ouvrir le pdf. J'ai cherché sur le net mais sans succès.
La "meilleur" solution trouvée actuellement est la suivante :
InputStream pdfInJar = getClass().getResourceAsStream("/manual.pdf"); System.out.println("pdfInJar : " +pdfInJar); try { File pdf = new File("NomDuPDFCree.pdf"); FileOutputStream fos = new java.io.FileOutputStream(pdf); while (pdfInJar.available() > 0) { fos.write(pdfInJar.read()); } fos.close(); Desktop.getDesktop().open(pdf); } catch (IOException e) { System.out.println("erreur : " + e); } // catch (IOException e)
Le problème avec cette solution c'est qu'elle ne m'ouvre pas le fichier pdf et elle m'en fait une copie sur le bureau (La copie du fichier est obligatoire pour le lire ensuite ?).
J'ai également vu qu'il existait plusieurs librairies pour gérer les pdf mais je ne sais pas laquelle utilisée si jamais je doit en utiliser une.
J'ai aussi vu qu'on pouvait utiliser Runtime.getRuntime().exec() mais cette solution nécessite de donner le chemin d'accès d'adobe (par exemple). J'aimerais trouver une solution ne nécessitant pas cette contrainte.
Merci d'avance :)
A voir également:
- Ouvrir fichier pdf en java
- Lire le coran en français pdf - Télécharger - Histoire & Religion
- Comment ouvrir un fichier epub ? - Guide
- Ouvrir fichier .bin - Guide
- Waptrick java football - Télécharger - Jeux vidéo
- Ouvrir fichier .dat - Guide
2 réponses
Pour ouvrir un fichier tu as Desktop.getDesktop().open(File file); le fichier sera alors ouvert avec l'application par défaut, quel que soit le type de fichier, ou l'OS utilisé.
Par contre est-ce que la copie du fichier est obligatoire je ne sais pas, en tout cas je ne sais pas faire autrement. Exemple avec "Fichier.pdf" à la racine "/" du fichier JAR :
Par contre est-ce que la copie du fichier est obligatoire je ne sais pas, en tout cas je ne sais pas faire autrement. Exemple avec "Fichier.pdf" à la racine "/" du fichier JAR :
import java.awt.Desktop; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; public class Test { public static File access(String fileNameInJAR, String extension) throws IOException { InputStream in = Test.class.getClass().getResourceAsStream(fileNameInJAR); File f = File.createTempFile("JAR_", extension); FileOutputStream out = new FileOutputStream(f); byte[] buf = new byte[1024]; for (int n; (n=in.read(buf))!=-1; out.write(buf, 0, n)); out.close(); in.close(); return f; } public static void main(String...args) throws IOException { Desktop.getDesktop().open(access("/Fichier.pdf",".pdf")); } }
Desktop.getDesktop().open(File file) est la version "courte" sans aucune vérification.
La version longue c'est :
Cependant, j'avoue avoir parfois vu cette commande échouer (en particulier sous Windows) ou être assez longue avant que l'opération ne soit exécutée... mais sans trop de raison :(
La version longue c'est :
if (Desktop.isDesktopSupported()) { Desktop desktop = Desktop.getDesktop(); if (desktop.isSupported(Desktop.action.OPEN) { try { desktop.open(file); } catch (Exception e) { e.printStackTrace(); } } else System.err.println("OPEN not supported"); } else System.err.println("Desktop not supported");
Cependant, j'avoue avoir parfois vu cette commande échouer (en particulier sous Windows) ou être assez longue avant que l'opération ne soit exécutée... mais sans trop de raison :(