1

我有一个 java 应用程序,它从特定图像创建宝丽来并发送到宝丽来打印机(佳能 SELPHY)。但是,当我指定要打印的自定义介质尺寸时,它给了我一个java.lang.RuntimeException: 没有可用的打印机服务。打印代码如下:

PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
pras.add(new Copies(1));
pras.add(new MediaPrintableArea(0, 0, 86, 54, MediaPrintableArea.MM));
PrintService pss[] = PrintServiceLookup.lookupPrintServices(DocFlavor.INPUT_STREAM.GIF, pras);

这里最初的问题是 pss[] 没有被填充。当没有指定介质尺寸时,我只是从打印机收到一个错误,基本上是说介质尺寸不受支持。

有没有人有这方面的经验可以提供帮助?

4

1 回答 1

2

您的打印机(即打印机驱动程序)和打印子系统(例如 Linux 中的 CUPS )必须支持并通常定义自定义介质尺寸。您可能想要检查您的媒体大小是否配置正确(请参见下面的代码)。

更重要的是- Java 打印 API需要纵向方向定义和处理媒体!您在横向 ( )中错误地输入了可打印区域。实际打印的方向稍后width > height由打印请求属性控制。OrientationRequested


如果要检查 Java 打印 API 识别的打印机和支持的介质尺寸,可以使用以下代码:

public class MediaTest {

    public static void main(String[] args) {
        PrintService[] printServices = PrintServiceLookup.lookupPrintServices(
                DocFlavor.SERVICE_FORMATTED.PRINTABLE, null);
        for (PrintService printService : printServices) {
            System.out.println(printService.getName());
            Media[] supportedMedia = (Media[]) printService.getSupportedAttributeValues(
                    Media.class, DocFlavor.SERVICE_FORMATTED.PRINTABLE, null);
            for (Media media : supportedMedia) {
                if (media instanceof MediaSizeName) {
                    handleMediaSizeName((MediaSizeName) media);
                }
            }
        }
    }

    private static void handleMediaSizeName(MediaSizeName mediaSizeName) {
        StringBuilder builder = new StringBuilder("    " + mediaSizeName.toString());
        MediaSize mediaSize = MediaSize.getMediaSizeForName(mediaSizeName);
        if (mediaSize != null) {
            float[] size = mediaSize.getSize(MediaSize.MM);
            builder.append(" - ").append(size[0]).append("x").append(size[1]).append("mm");
        }
        System.out.println(builder.toString());
    }

}
于 2013-10-05T00:11:58.023 回答