Page 1 of 1

Warum gibt getSupportedAttributeValues ​​Papiertypen zurück?

Posted: 20 Dec 2024, 22:57
by Anonymous
Der folgende Codeausschnitt sollte die für einen Drucker verfügbaren Medienfächer zurückgeben.
Allerdings mit einigen Treibern, insbesondere Ricoh PCL6-Treiber für Universal Print und HP Universal Printing PCL 6, zusätzlich zu den Druckerfächern listen diese Treiber auch Papiertypen wie Recycling, Dick, Matt usw. auf.
Soweit ich das beurteilen kann, wird OpenJDK ordnungsgemäß verwendet DC_BINNAMES beim Aufruf von DeviceCapabilities. OpenJDK scheint DC_MEDIATYPENAMES überhaupt nicht im Quellcode zu verwenden, daher würde ich nicht erwarten, dass z. B. Purple Paper soll sogar eine abfragbare Eigenschaft sein, wird jedoch bei der Abfrage von Fächern vom Ricoh-Treiber aufgeführt.
Was ist also los? Sind diese PCL 6-Treiber nur fehlerhaft? Ist DeviceCapabilities schuld? Oder lebt der Fehler im OpenJDK?
import javax.print.DocFlavor;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.attribute.standard.Media;

public class TrayListing {
public static void main(String ... args) {
String printerName = "HP LaserJet ..."; // TODO: change this to the actual printer name
PrintService[] allPrinters = PrintServiceLookup.lookupPrintServices(null, null);
for(PrintService ps : allPrinters) {
if(ps.getName().equalsIgnoreCase(printerName)) {
// loop over media trays
System.out.println("\n\nFound MediaTray:");

// Some HP, Ricoh printers/drivers list items that aren't printer trays, such as paper types
for(Media m : (Media[])ps.getSupportedAttributeValues(Media.class, DocFlavor.SERVICE_FORMATTED.PAGEABLE, null)) {
if (m instanceof javax.print.attribute.standard.MediaTray) {
System.out.println("- " + m + " (" + m.getClass().getName() + ")");
}
}
}
}
}
}

Zusätzliche Schlüsselwörter:
PCL XL Feature Reference