Originariamente inviato da Wolvy23
Supponiamo che, per la stampa, mi stia bene che si apra la finestra di Adobe,
per il percorso dell'eseguibile devo tener conto che sia sempre lo stesso in tutti i pc!!?
Beh, metti il percorso dentro un file di configurazione dell'applicazione: la configurazione sarà fatta per ciascun PC dove, ovviamente, il Reader può essere installato ovunque.
Eventualmente posso mettere un controllo che se non trova l'eseguibile
di Adobe mi apre il file .pdf e poi sarà l'utente a lanciare la stampa!!
Che dici?
Certo... io preferisco mettere il percorso all'eseguibile come parametro di configurazione dell'applicazione, così da non dover "scomodare" l'utente per la stampa. 
Mentre per la questione di non poter chiudere Adobe Reader per poter
leggere il file con iText o poterlo cancellare, il codice
if(file.canExecute()) ..... è corretto per verificare se quel file
è già in uso da un altro processo!? Perchè posso far comparire una finestra
di avviso in cui chiedo all'utente di chiudere Adobe prima di procedere con
le operazioni!!!
No, canExecute() non va bene. Il canExecute() testa solo due cose:
1) Che il file esista
2) Che l'applicazione abbia i permessi per poterlo eseguire (permessi nel senso di credenziali dell'utente)
Del resto è semplice: se provi ad eseguire un canExecute() su un PDF aperto da Adobe, il metodo ritorna true (perchè il file esiste e l'applicazione ha le credenziali per aprirlo... ma non ci riuscirà perchè in uso).
L'unico modo sicuro per verificare di avere a disposizione il file è provare a "cancellarlo". Sembra una cosa assurda, ma non lo è così tanto: se la tua applicazione ha bisogno di modificare un file, la cosa più facile da fare per evitare che altri concorrano per il file è quella di spostarlo in una directory di lavoro. Lo spostamento si traduce in una copia + cancellazione (e la cosa è "atomica" se fatta usando l'apposito metodo "renameTo()"). Se lo spostamento va a buon fine, il file è tutto tuo ed è anche "al sicuro" dentro la tua cartella di lavoro... onere tuo spostarlo nuovamente al suo posto alla fine dell'elaborazione.
codice:
// Supponiamo che la directory di lavoro si chiami "work"
File originalFile = new File("pippo.pdf");
File workDir = new File("./work/");
File workFile = new File(workDir, originalFile.getName());
if ( originalFile.renameTo(workFile) ) {
// Il file è tutto tuo e ora puoi lavorarci su
// usando l'oggetto "workFile"
} else {
// Il file è in uso da altra applicazione
}
Ciao.