Se il file è aperto da un'applicazione esterna (come, appunto, Reader) non ci puoi fare assolutamente nulla: nemmeno chiuderlo, servono privilegi di amministrazione e, in ogni caso, è un'operazione che va fatta nell'ambito del sistema operativo (quindi, niente Java puro, eventualmente JNI).

La stampa è un altro punto cruciale. Non esiste un modo pulito per farlo e gli unici a funzionare sono comunque legati al programma che si lancia per la stampa (Adobe Reader, ad esempio).

Io mi sono trovato particolarmente bene con FoxIt (al posto di Adobe Reader che mi ha sempre dato parecchi problemi, quando invocato per la stampa, come ad esempio il fatto che si apre sempre la finestra di Reader, che poi va chiusa usando, appunto, JNI o un programma esterno che se ne occupi: troppo macchinoso).

Il comando da dare per la stampa di un PDF (che ovviamente deve esistere come file fisico) con FoxIt è il seguente:

codice:
Percorso/Al/File/Eseguibile/Foxit nomeDelPdf /p
Il percorso all'eseguibile di foxit è ovviamente il percorso completo del programma.
Il parametro /p permette di stampare sulla stampante predefinita, in alternativa è possibile dare il comando /t seguito dal nome della stampante in cui stampare.

Per Acrobat Reader è pressappoco uguale, ma purtroppo viene aperta la finestra del programma, su cui viene caricato il PDF e poi rimane lì (a differenza di Foxit che viene eseguito in background e si chiude automaticamente).


Ciao.