View Full Version : [java]Stream di stampa
mone.java
14-07-2008, 13:44
Salve a tutti, ho fatto un programma che tutti i giorni ad una certa ora stampa tutti i pdf presenti in una certa cartella. per la stampa uso Adobe Reader (Process pr = Runtime.getRuntime().exec("AcroRd32.exe /p /h percorso_file")). Il problema è che una volta che ha finito di stampare adobe non si chiude. Per farlo avevo pensato di catturare lo stream di dati che arrivava alla stampante e quand'esso fosse finito avrei chiuso adobe con un comando del cmd. Il problema è come faccio a catturare uno stream di dati diretto alla stampante o che comunque sia passa per essa???
Grazie. :help:
p.s. altra domanda che però non centra molto: come si fà a mettere il titolo del messaggio in grassetto???
mone.java
15-07-2008, 11:08
Con \t non funzione poichè serve a visualizzare il documento prima di stamparlo, comunque ho gia risolto così facendo:
trovo il percorso della stampante predefinita:
public static String getDefaultPrinter() {
//cerco di trovare il nome della stampante predefinita con java
String printerName;
PrintService ps = PrintServiceLookup.lookupDefaultPrintService();
printerName = ps.getName();
//se il nome della stampante non è nullo lo ritorno
if(printerName != null && !printerName.equals(""))
if(printerName.indexOf("\\")!=-1)
return Utility.deleteSpaces(printerName.substring(printerName.indexOf("\\")));
else
return Utility.deleteSpaces(printerName);
//se java non ha trovato la stampante ci provo con dos riuscito provo con dos
else {
try {
String sys32Path = Utility.replaceBackslash(new File("C:\\WINDOWS\\system32\\prnmngr.vbs"));
Process cmd = Runtime.getRuntime().exec("cscript "+sys32Path+" -g");
InputStream cmdStream = cmd.getInputStream();
BufferedReader br = new BufferedReader( new InputStreamReader(cmdStream));
String s = null;
for (int i=0; i<4; i++) {
s = br.readLine();
}
printerName = s.substring(s.indexOf("\\"));
return Utility.deleteSpaces(printerName);
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
mentre con questo codice trovo la coda di stampa che quando è a zero chiudo adobe:
public static int getPrintQueue (String printer) throws Exception {
System.out.println("net print "+printer);
Process cmd = Runtime.getRuntime().exec("net print "+printer);
InputStream cmdStream = cmd.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(cmdStream));
String s = null;
//l'informazioni relative alla coda di stampa si trovano all'ottava riga
for(int i=0; i<8; i++) {
s = br.readLine();
}
String s2 = "";
//ripulisco l'output del cmd fino a ricavare solo il numero di stampe in coda
for(int i=28; i<s.length(); i++) {
try {
int b = +Integer.parseInt(""+s.charAt(i));
s2 += b;
System.out.println(s2);
} catch(Exception e) {
}
}
try {
return Integer.parseInt(s2);
} catch (Exception e) {
return -1;
}
}
Spero che questo codice potrà essere utile a qualcuno!!!!!!!!!!!!!!!!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.