Jak sprawdzić czy drukarka jest aktywna i czy może drukować?

0

Chciałbym sie dowiedziec jak z poziomu Javy dowiedzieć się czy drukarka jest aktywna i czy może drukować. PrintStateReason zwraca null, atrybut accepting-jobs jest zawsze ustawiony na "accepting-jobs", nieważne czy drukarka jest podłączona czy nie. Myślę, że trzeba użyć języka EZPL do komunikacji z drukarką. Jak zwrócić wynik w javie przy użyciu języka EZPL? EZPL command do sprawdzenia statusu drukarki to:
^XSET,ACTIVERESPONSE,1 ale nie wiem jak ją wywołać z poziomu Javy. Może jest jakiś prostszy sposób? Moje drukarki to Godex DT4 oraz Godex DT2.

0

Moze cos takiego Ci pomoze. To sprawdza domyslna drukarke (printer-name) i czy przyjmuje do druku (printer-is-accepting-jobs). Zakomentowalem czesc ktora powinna sprawdzac czy drukarka przyjmuje zlecenia. Nie daje sobie za to reki uciac bo u mnie domyslnym programem rukujacym jest OneNote (nie wiem czemu) i zawsze jest dostepny ale mysle ze warto sprawdzic ;)

public class PrinterStatusReport {

	
	public static void main(String[] args) {
		PrintService printer = PrintServiceLookup.lookupDefaultPrintService();

		AttributeSet att = printer.getAttributes();
		
//		Attribute[] sAtt = att.toArray();
//		if(sAtt[0].equals("accepting-jobs"));
//		System.out.println("dziala");
		
		for (Attribute a : att.toArray()) {
		String attributeName;
		String attributeValue;
		attributeName = a.getName();
		attributeValue = att.get(a.getClass()).toString();
		System.out.println(attributeName + " : " + attributeValue);
		}
	}
}
0

Dzięki za odpowiedź ale w atrybutach drukarki nie ma nic ciekawego, a w atrybucie accepting-jobs zwraca 'acccepting-jobs' niewazne czy drukarka jest włączonoa, podłączona czy odłączona. Chyba z poziomu Java API nie da się tego sprawdzić. Na niektórych drukarkach działa ale akurat na mojej nie.

0

walczyłem kiedyś z podobnym problemem. W PrintService api nie ma. Trzeba z spools.dll natywnie wygrzebąc listę podłączonych, ale kodu już nie mam.

0

A możesz w kilku zdaniach opisać jak się do tego zabrać? Byłbym wdzięczny :)

0

Czy takie coś jest możliwe? Język EZPL drukarka Godex DT4.

private static void checkPrinter() {
        String queryString = "${^XSET,ACTIVERESPONSE,1}$";
        
        try {
            PrintService printService = findPrintService();

            System.out.println(printService.getAttribute(QueuedJobCount.class).getValue());

            if (printService == null) {
                System.out.println(PRINTER_NAME + " printer not found.");
                return;
            }

            DocPrintJob job = printService.createPrintJob();
            job.addPrintJobListener(new MyPrintJobListener());
            job.addPrintJobAttributeListener(new MyPrintJobAttributeListener(), null);

            InputStream is = new ByteArrayInputStream(queryString2.getBytes());
            DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
            Doc doc = new SimpleDoc(is, flavor, null);

            job.print(doc, null);
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

        } catch (PrintException e) {
            e.printStackTrace();
        }
    } 

1 użytkowników online, w tym zalogowanych: 0, gości: 1