Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: aprire pdf da jar

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    11

    aprire pdf da jar

    ciao a tutti, il mio problema è il seguente.
    ho fatto un applicazione e vorrei che si aprisse un file di help (file pdf) quando clicco sul pulsante "help".

    il codice da me scritto funziona quando eseguo il programma in eclipse ma non funziona quando creo il jar.


    codice:
    try {
       String toExecute="rundll32 url.dll,FileProtocolHandler ";
       String pdf=((DocResourceLoader.class.getResource("documentazione.pdf").toString()));
       toExecute+=pdf;
       toExecute=toExecute.replace("/","\\");
       System.out.println(toExecute);
       pdf=pdf.replace("/","\\");
       //   Runtime.getRuntime().exec(toExecute);
       //   java.awt.Desktop.getDesktop().open(toExecute);
       File file = new File(pdf);
       java.awt.Desktop.getDesktop().open(file);
    } catch (Exception e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
    }

    nel codice sono presenti i commenti delle varie modalità di apertura file testate.

    come potete vedere ho creato una classe, nello stesso package dove è il pdf (classe DocResourceLoader) in modo tale da prendere il percorso..così come faccio anche per le immagini e per le immagini funziona

    purtroppo per il pdf non funziona..

    chi mi aiuta???

    grazie mille a tutti

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: aprire pdf da jar

    Originariamente inviato da vasco85
    ho fatto un applicazione e vorrei che si aprisse un file di help (file pdf) quando clicco sul pulsante "help".

    come potete vedere ho creato una classe, nello stesso package dove è il pdf (classe DocResourceLoader) in modo tale da prendere il percorso..così come faccio anche per le immagini e per le immagini funziona

    purtroppo per il pdf non funziona..
    Quindi il PDF è dentro il jar. Il path che puoi ottenere della risorsa è un path molto "speciale", che ha senso ed è riconosciuto solo dal framework di Java .... non dall'esterno da altre applicazioni.

    Quindi devi per forza leggere il contenuto della risorsa (usa getResourceAsStream che ti fornisce un InputStream), lo scarichi su un file temporaneo (magari in una directory temporanea, quella di sistema la puoi rintracciare da una system-property) e infine puoi passare il path a questo file "vero" sul file-system al open() di Desktop.

    Non c'è altro modo. Ripeto: le "risorse" sono particolari. Le immagini ti funzionano ma ovviamente perché un URL della risorsa lo passi ad una API del framework .... che "sa" come leggere da questo URL speciale!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328

    Moderazione

    Come indicato nel Regolamento interno, il codice va postato indentato usando gli appositi tag CODE.

    Se poi, per l'indentazione, usassi un po' meno TAB, sarebbe anche più facile sistemare all'occorrenza.

    Ho sistemato io il tuo codice, in futuro pensaci tu.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    11

    Re: Moderazione

    Originariamente inviato da LeleFT
    Come indicato nel Regolamento interno, il codice va postato indentato usando gli appositi tag CODE.

    Se poi, per l'indentazione, usassi un po' meno TAB, sarebbe anche più facile sistemare all'occorrenza.

    Ho sistemato io il tuo codice, in futuro pensaci tu.


    Ciao.
    grazie mille. la prossima volta sarà fatto

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    11

    Re: Re: aprire pdf da jar

    Originariamente inviato da andbin
    Quindi il PDF è dentro il jar. Il path che puoi ottenere della risorsa è un path molto "speciale", che ha senso ed è riconosciuto solo dal framework di Java .... non dall'esterno da altre applicazioni.

    Quindi devi per forza leggere il contenuto della risorsa (usa getResourceAsStream che ti fornisce un InputStream), lo scarichi su un file temporaneo (magari in una directory temporanea, quella di sistema la puoi rintracciare da una system-property) e infine puoi passare il path a questo file "vero" sul file-system al open() di Desktop.

    Non c'è altro modo. Ripeto: le "risorse" sono particolari. Le immagini ti funzionano ma ovviamente perché un URL della risorsa lo passi ad una API del framework .... che "sa" come leggere da questo URL speciale!

    provo e ti faccio sapere.

    grazie mille

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    11

    Re: Re: aprire pdf da jar

    Originariamente inviato da andbin
    Quindi il PDF è dentro il jar. Il path che puoi ottenere della risorsa è un path molto "speciale", che ha senso ed è riconosciuto solo dal framework di Java .... non dall'esterno da altre applicazioni.

    Quindi devi per forza leggere il contenuto della risorsa (usa getResourceAsStream che ti fornisce un InputStream), lo scarichi su un file temporaneo (magari in una directory temporanea, quella di sistema la puoi rintracciare da una system-property) e infine puoi passare il path a questo file "vero" sul file-system al open() di Desktop.

    Non c'è altro modo. Ripeto: le "risorse" sono particolari. Le immagini ti funzionano ma ovviamente perché un URL della risorsa lo passi ad una API del framework .... che "sa" come leggere da questo URL speciale!

    non ho capito bene forse: come faccio a passare temporaneamente il contenuto di un pdf su un file??
    con un normale bufferedReader??

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Re: Re: aprire pdf da jar

    Originariamente inviato da vasco85
    non ho capito bene forse: come faccio a passare temporaneamente il contenuto di un pdf su un file??
    con un normale bufferedReader??
    No (BufferedReader tra l'altro è orientato ai caratteri, non è appropriato!).

    InputStream (dal getResourceAsStream), FileOutputStream (per file temporaneo da scrivere).
    Solito ciclo di lettura, preferibilmente leggendo/scrivendo a blocchi di X byte (X scegli tu, es. 1024 o dimensioni del genere ... non esagerare, non otterresti benefici).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    11
    Allora ho provato cos', ma il file temporaneo non me lo apre, mi dice che potrebbe essere corrotto:


    codice:
      InputStream pdf=((DocResourceLoader.class.getResourceAsStream("Arch_Builder.pdf")));
      File f = new File("temp.pdf");
      Scanner s = new Scanner(pdf);
      FileOutputStream out= new FileOutputStream(f);
      String t="";
      while(s.hasNextLine()){
    	t=s.nextLine();
    	out.write(1024);
      } 
      out.close();
      s.close();		
      java.awt.Desktop.getDesktop().open(f);
    cosa sbaglio??

    grazie

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da vasco85
    codice:
      InputStream pdf=((DocResourceLoader.class.getResourceAsStream("Arch_Builder.pdf")));
      File f = new File("temp.pdf");
      Scanner s = new Scanner(pdf);
      FileOutputStream out= new FileOutputStream(f);
      String t="";
      while(s.hasNextLine()){
    	t=s.nextLine();
    	out.write(1024);
      } 
      out.close();
      s.close();		
      java.awt.Desktop.getDesktop().open(f);
    cosa sbaglio??
    Scanner NO.

    Ripeto: hai un InputStream e un FileOutputStream. Istanzi un array di X byte, in ciclo leggi un blocco dal InputStream e lo scrivi sul FileOutputStream.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    11
    Perdonami se ti stresso ma è la prima volta che mi trovo a fare queste cose:

    allora io ho scritto:

    codice:
    InputStream pdf=((DocResourceLoader.class.getResourceAsStream("docum.pdf")));
      File f = new File("temp.pdf");
      FileOutputStream out= new FileOutputStream(f);
    
      byte[] r= new byte[1024];
    
      while(pdf.read(r)!=-1){
    
      //cosa devo mettere nel while?? e nella condizione???
      }
      out.close();
      pdf.close();
      
      java.awt.Desktop.getDesktop().open(f);
    grazie mille

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.