我有一个java应用程序,可以从特定图像创建偏振镜并发送到宝丽来打印机(Canon 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 []未填充。如果没有指定介质尺寸,我只是从打印机得到错误,基本上说不支持介质尺寸。
有没有人在这方面有任何经验可以提供帮助?
答案 0 :(得分:2)
您的打印机支持自定义介质尺寸必须并且通常定义(即打印机驱动程序)和打印子系统(例如Linux中的CUPS)。您可能想要检查您的介质尺寸是否确实配置正确(请参阅下面的代码)。
更重要的是 - 要在 PORTRAIT 方向定义和处理Java Printing API 要求媒体!您错误地在横向(width > height
)中输入可打印区域。实际打印的方向稍后由OrientationRequested
打印请求属性控制。
如果要检查Java Printing 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());
}
}