Java 인쇄 서비스 API 사용자 가이드 4 - 문서의 인쇄와 스트림 전달 - xrath.com 에서 번역됨

목차 | 전의 항목 | 다음의 항목 | JavaTM 인쇄 서비스 API 사용자 가이드

## 이벤트의 등록

> Java 인쇄 서비스 API 에서는, 2 종류의 이벤트 (프린터 상태의 갱신 및 인쇄 객체의 진척의 갱신)를, 인쇄 서비스로부터 어플리케이션에 보고할 수가 있습니다. 이벤트 API 에는, javax.print.event package 패키지와 인쇄 서비스 및 DocPrintJob 에 청취자를 등록하는 메소드가 짜넣어지고 있습니다. 이벤트 API 는, AWT 내에서 사용되고 있는 청취자 모델에 준거하고 있습니다.

### 인쇄 서비스의 이벤트

> 인쇄 서비스의 이벤트 청취자는, 서비스 상태의 변화를 감시해, 인쇄 서비스 속성의 값이 변화한 이벤트를 보고합니다. 어플리케이션에서는, 인쇄 서비스의 이벤트를 감시하기 위해서, javax.print.event.PrintServiceAttributeListener 인터페이스를 구현해, PrintService 에 대해서 어플리케이션 자체를 청취자로서 인스톨 합니다. 예를 나타냅니다.

> >     public class PrintPS implements PrintServiceAttributeListener {
> >     	...
> >     	pservices[0]. addPrintServiceAttributeListener(this);
> >     	...
> >     	public void attributeUpdate(PrintServiceAttributeEvent e){
> >     		// Do something if an attribute is updated
> >     	}
> >     ...

> PrintServiceAttributeListener.attributeUpdate() 메소드는, 인쇄 서비스 속성이 변화했을 때에 불려 갑니다. 인쇄 서비스는, PrintServiceAttributeListener 인터페이스를 사용해, 지원하는 이벤트를 판단합니다.

> 어플리케이션에서는, 서비스가 지원하는 인쇄 서비스 속성을 검출할 경우에, 서비스가 지원하는 요구 속성을 검출할 경우에 사용하는 조회 메소드를 사용합니다. 예를 들어, 특정의 서비스가 QueuedJobCount 속성을 지원하고 있을지 어떨지를 조사하려면 , 어플리케이션으로부터 다음의 메소드를 호출합니다.

> >     service.isAttributeCategorySupported(QueuedJobCount.class);

> 서비스에는, 속성의 갱신을 보고하는 빈도를 설정합니다. 서비스에 의해 지원되는 속성이 많은 경우는, 이벤트가 일괄되는 일이 있습니다. 이 경우, 어플리케이션이 특정의 이벤트를 납득할 수 없는 것이 있습니다. 전달된 이벤트는, 값이 변화한 속성만으로 구성됩니다. 즉, 프린터 모델등의 static 서비스 속성은, 이벤트에는 보고되지 않습니다.

### 인쇄 작업의 이벤트

> 인쇄를 실시하고 있는 클라이언트에서는, 대부분의 경우, 서비스 상태는 아니고, 인쇄 작업을 감시합니다. 클라이언트의 DocPrintJob 에는, PrintJobAttributeListener 및 PrintJobListener 로 불리는 2 살의 청취자를 인스톨 할 수 있습니다.

#### PrintJobAttributeListener

> PrintJobAttributeListener 는, 서비스 속성의 청취자와 닮아 있습니다. 인쇄 작업은, PrintJobAttribute 인터페이스를 구현하는 속성이 변화했을 때에 보고합니다. 일반적으로, 이러한 속성은, 인쇄 요구 속성이기도 해, 인쇄 작업의 라이프 타임을 걸쳐 고정됩니다. JobMediaSheetsCompleted 등, 매우 일부의 속성만이 변화합니다. 또, 이 기능을 지원하는 서비스는 거의 없습니다. 대부분의 클라이언트에서는, PrintJobListener 는 작업의 진척의 감시에 사용됩니다.

#### PrintJobListener

> PrintJobListener 는, PrintJobAttributeListener 보다 간단하게 사용할 수 있습니다. 전달하는 메세지가, printJobCompleted 나 printJobFailed 와 같이 단순합니다. 이 인타페? 스에는, 6 개의 메소드만이 짜넣어지고 있습니다. 이러한 메소드는, 중요하고 단순한 정보를 이벤트로서 보고합니다. 어댑터 클래스의 PrintJobAdapter 에는, 이러한 6 개의 메소드가 디폴트로 구현되고 있습니다.

> 특히, printJobNoMoreEvents 는, 발행 빈도는 높지는 않습니다가, 도움이 되는 메세지입니다. 클라이언트에서는, 많은 경우, 작업의 종료 또는 실패를 파악할 필요가 있습니다. 가능한 경우는, 서비스는 이러한 「종료」이벤트를 전달할 필요가 있습니다. 다만, 작업의 종료 또는 실패를 서비스가 판단할 수 없는 경우는, 「완료」메세지에 의해 잘못한 처리가 실행되는 일이 있습니다. 예를 들어, 가시 큐가 존재하지 않는 네트워크 인쇄 서비스에 대해서, 작업이 spool 되는 일이 있습니다. 이 경우, 「no more events」메세지가 전달되어도, 작업이 정상 종료했다고 확실히 판단할 수 없습니다. 그러나, 클라이언트는, 작업의 실패는 통지되어 있지 않다고 판단할 수 있습니다. 다음의 예에서는, printJobNoMoreEvents 메세지를 감시하는 청취자를 추가하고 있습니다.

> >     public class PrintPS extends PrintJobAdapter{
> >     	...
> >     	pj.addPrintJobListener(this);
> >     	...
> >     	public void printJobNoMoreEvents(PrintJobEvent e){
> >     		// Do something here
> >     	}
> >     ...

목차 | 전의 항목 | 다음의 항목

Copyright © 2001 Sun Microsystems, Inc. All Rights Reserved.