2013-10-04 5 views
1

У меня есть приложение Java, которое создает поляроиды из определенных изображений и отправляет на поляроидный принтер (Canon SELPHY). Однако, когда я указываю настраиваемый размер носителя для печати, он дает мне java.lang.RuntimeException: никаких доступных принтеров нет. Код для печати ниже:Отправить на поляроидный принтер из java

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 [] не заполняется. Когда размер носителя не указан, я просто получаю сообщение об ошибке от принтера, в основном говоря, что размер носителя не поддерживается.

Есть ли у кого-нибудь опыт в этой области, который может помочь?

ответ

2

Нестандартные размеры носителей MUST поддерживаться и обычно DEFINED принтером (т.е. драйвер принтера) и печати подсистемы (например CUPS в Linux). Возможно, вы захотите проверить правильность настройки размера вашего медиафайла (см. Ниже код).

Что еще более важно - Java 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()); 
    } 

} 
+0

Хорошо, так, как и ожидалось, я получил размер 86x54mm _Card - 54.0x86. 0mm_, однако изменение к поплавкам и портрету по-прежнему имеет ту же проблему. – Moustachio

+0

Попробуйте изменить 'DocFlavor' на' DocFlavor.SERVICE_FORMATTED.PRINTABLE', чтобы мы могли быть уверены, что это вызвано размером носителя, а не ароматом документа. –

+0

К сожалению, это ничего не меняет. Спасибо за вашу помощь пока BTW. – Moustachio

Смежные вопросы