当前位置: 首页 > 面试题库 >

Java中的扩展打印机信息

仇建茗
2023-03-14
问题内容

我正在尝试获取有关系统上打印机的一些信息。
在Windows和Linux上,使用以下代码,仅PrinterName填充属性:

PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null,null);
for( PrintService printService : printServices ) {
    log.info("Found print service: "+printService);
    log.info(printService.getAttribute(PrinterName.class));
    log.info(printService.getAttribute(PrinterLocation.class));
    log.info(printService.getAttribute(PrinterMakeAndModel.class));
    log.info(printService.getAttribute(PrinterMessageFromOperator.class));
    log.info(printService.getAttribute(PrinterMoreInfo.class));
    log.info(printService.getAttribute(PrinterMoreInfoManufacturer.class));
    log.info(printService.getAttribute(PrinterState.class));
    log.info(printService.getAttribute(PrinterStateReasons.class));
    log.info(printService.getAttribute(PrinterURI.class));
}

在使用该toArray()功能之后…

log.info("Found print service: "+printService);
for( Attribute a : printService.getAttributes().toArray() ) {
    log.info("* "+a.getName()+": "+a);
}

…这是结果:

找到的打印服务:Win32打印机:Brother MFC-9420CN BR-Script3
*支持颜色:支持
*打印机名称:Brother MFC-9420CN BR-Script3
*打印机正在接受工作:正在接受工作
*排队人数:0

如何获得更多信息 ,例如打印机注释?


问题答案:

还有其他PrintServiceAttribute实现,但是如果您想获取更多…

这只是一个 肮脏的 代码,您还可以获取不受支持的doc值:

PrintService[] printServices =
        PrintServiceLookup.lookupPrintServices(null, null); //get printers

for (PrintService printService : printServices) {
    System.out.println("Found print service: " + printService);

    Set<Attribute> attribSet = new LinkedHashSet<Attribute>();

    Class<? extends Attribute>[] supportedAttributeCategories = (Class<? extends Attribute>[]) printService.getSupportedAttributeCategories();

    for (Class<? extends Attribute> category : supportedAttributeCategories) {
        DocFlavor[] flavors = printService.getSupportedDocFlavors();
        for (DocFlavor flavor : flavors) {
            Object supportedAttributeValues = printService.getSupportedAttributeValues(category, flavor, printService.getAttributes());
            if (supportedAttributeValues instanceof Attribute) {
                Attribute attr = (Attribute) supportedAttributeValues;
                attribSet.add(attr);
            } else if (supportedAttributeValues != null) {
                Attribute[] attrs = (Attribute[]) supportedAttributeValues;
                for (Attribute attr : attrs) {
                    attribSet.add(attr);
                }
            }
        }
    }

    for (Attribute attr : attribSet) {
        System.out.println(attr.getName());

        System.out.println(printService.getDefaultAttributeValue(attr.getCategory()));
    }
}

注意: 您可能会看到重复的值,但是可以对其进行过滤。



 类似资料:
  • name String - 名称 description String - 描述 status Number - 状态 isDefault Boolean - 是否默认打印机 options Object - 附加字段 例子: 1 name: 'Zebra_LP2844', 2 description: 'Zebra LP2844', 3 status: 3, 4 isDefault: false

  • 我在标签打印机上打印时遇到了问题。下面的代码在一个上打印4个“标签”(附标签图片)。 下面的代码打印到兄弟QL-500标签打印机上。它打印到3.5"乘1.1"标签上。 如果有人能帮我更好地理解代码,那也太好了。 下面是它打印的内容:

  • 问题内容: Java中有一种简单的方法可以执行以下操作吗? 连接到打印机(将是本地打印机,并且是连接到机器的唯一打印机)。 在2个不同的打印机纸盘中打印2页的页面。 获取当前的打印队列计数,即我有100项要打印的项目和34项当前已打印,则打印机队列现在应显示为66。 问题答案: 一些快速提示: 从Java打印:请参阅基本打印程序 打印作业的状态:您可以使用PrintJobListener获得一些有

  • 我需要发送一个pdf文件打印在一个网络应用程序的服务器端,打印机完全支持pdf打印等,它是网络以及服务器。pdf也存储在服务器上。 我尝试的是点击一个按钮,打印出pdf文件,目前我有以下代码: 但我有几个问题,我如何将pdf放入输入流以打印出来,我可以选择诸如双面打印之类的选项,以及如何从JSF web应用程序中调用它 谢谢

  • Vimscript中,我们最先关注的是echo和echom命令。 你可以在Vim中执行:help echo和:help echom命令以查看其帮助文档。读完本书之后, 再次遇到新的命令时,你应该先执行:help命令查看其帮助文档。 执行如下命令,体验echo命令: :::vim :echo "Hello, world!" 你应该会在屏幕的底部看到Hello, world!被打印出来。 还是打印消

  • 在我的项目中,客户需要使用POS打印机打印收据,这可以使用JAVA POS来完成。我在网上搜索没有任何有用的材料,但发现 1.javapos 2.jpos 可以有人请指导我应该进行JAVA POS或JPOS。 该应用程序基于Java Swing desktop而不是基于web。 真的坚持这一点,任何帮助都是非常有用的