2016-06-08 3 views
1

문서가로드 된 Java 애플릿에 대한 작업을하고 있습니다. 이 애플릿에는 기본적으로 문서의 인쇄 과정에 필요한 사용자 정의 "인쇄"버튼이 있습니다. (?)이이 버튼을 누른 후 실행되는 코드입니다executeDispatch synchronous?

PropertyValue[] printProperties = new PropertyValue[1]; 
printProperties[0] = new PropertyValue(); 
printProperties[0].Name = "Print"; 
printProperties[0].Value = new Boolean(true); 

xDispatchProvider = (XDispatchProvider)UnoRuntime.queryInterface (XDispatchProvider.class, xFrame); 
dispatcher.executeDispatch(xDispatchProvider, ".uno:Print","_self", 0, printProperties); 

someOtherProcess(); 

이 코드는 예상 된 동작입니다 기본 인쇄 대화 상자를 열고, 지금까지 작동합니다. 문제는 "someOtherProcess"메소드입니다. 인쇄 대화 상자가 "인쇄"단추를 누르거나 인쇄 대화 상자를 취소하거나 닫으면 인쇄 대화 상자가 닫힌 직후에이 메서드를 실행해야합니다.

executeDispatch는 async이므로 PropertyValue []의 "SynchronMode"를 사용하여 동기화하지 않으려 고 시도했습니다. 성공하지 못했습니다.

인쇄 프로세스가 시작될 때 또는 취소 될 때 발생하는 인쇄 이벤트를 수신하는 방법을 발견했습니다. 이는 전체 코드입니다 :

은 "PrintJobEvent 클래스"
PropertyValue[] printProperties = new PropertyValue[1]; 
printProperties[0] = new PropertyValue(); 
printProperties[0].Name = "Print"; 
printProperties[0].Value = new Boolean(true); 

xDispatchProvider = (XDispatchProvider)UnoRuntime.queryInterface (XDispatchProvider.class, xFrame); 

dispatcher.executeDispatch(xDispatchProvider, ".uno:Print","_self", 0, printProperties); 

XPrintJobBroadcaster xPrintJobBroadcaster = (XPrintJobBroadcaster)UnoRuntime.queryInterface(XPrintJobBroadcaster.class, xComponent); 
xPrintJobBroadcaster.addPrintJobListener(new MyPrintJobListener()); 



class MyPrintJobListener implements XPrintJobListener { 
    public void printJobEvent(PrintJobEvent printJobEvent) { 
     AppletLogger.log("printing"); 
    } 
    public void disposing(com.sun.star.lang.EventObject eventObject) { 
     AppletLogger.log("disposing"); 
    } 
} 

는 등 인쇄 프로세스가 완료 시작 들일 경우, 발사 취소되고 있지만, 인쇄 대화 상자가 있었는지 알 수있는 방법을 찾을 수 없습니다 취소되거나 닫히기 때문에 인쇄 이벤트가 발생하지 않습니다.

그럼 내 주요 질문은 프로그램이 인쇄 대화 상자를 닫을 때까지 기다릴 수 있도록 인쇄 대화 상자를 동기 방식으로 열 수 있습니까? 네이티브 인쇄 대화 상자의 닫기 이벤트를 수신하는 방법이 있습니까?

미리 감사드립니다.

+0

* "나는 자바 애플릿을 만들고 있습니다."* 당신은 2 년 전입니다. [Java Plugin support deprecated] (http://www.gizmodo.com.au/2016/01/rest-in-hell-java-plug-in/) 및 [Plugin-Free Web로 이동] (https : //blogs.oracle.com/java-platform-group/entry/moving_to_a_plugin_free). –

+0

info @ AndrewThompson에게 감사드립니다. 나는 이미 그것을 알고있었습니다. 문제는 내 회사에서 업그레이드를 원하지 않는 고객을 위해 애플릿을 사용하고 있다는 것입니다. – shittyProgram

+0

* ".. 업그레이드를 원하지 않는 고객을 위해"* 노후화 된 고객에게 음식을 제공하는 데 드는 비용을 더 많이 내야할지, 아니면 버려야할지 결정해야합니다. 이제는 더 많은 비용이 들것입니다. –

답변

0

State 속성을 확인하십시오. 인쇄가 취소되면 먼저 JOB_STARTED (0)을 표시하고 JOB_ABORTED (3)을 표시해야합니다.

class MyPrintJobListener implements XPrintJobListener { 
    public void printJobEvent(PrintJobEvent printJobEvent) { 
     AppletLogger.log("print status: " + printJobEvent.State.getValue()); 
    } 
    public void disposing(com.sun.star.lang.EventObject eventObject) { 
     AppletLogger.log("disposing"); 
    } 
} 

디스패처도 나를 위해 작동하지 않았습니다. API 인터페이스를 대신 사용하십시오 :

XPrintJobBroadcaster xPrintJobBroadcaster = (XPrintJobBroadcaster) 
    UnoRuntime.queryInterface(XPrintJobBroadcaster.class, xComponent); 
xPrintJobBroadcaster.addPrintJobListener(new MyPrintJobListener()); 

XPrintable xPrintable = 
    (XPrintable)UnoRuntime.queryInterface(XPrintable.class, xComponent); 
xPrintable.print(printProperties); 

try { Thread.sleep(10000); } catch (Exception e) {} // Wait for print job. 
+0

도움을 주신 것에 감사드립니다. @ 짐, 이미 인쇄 프로세스의 상태를 확인할 수 있다는 것을 알고있었습니다. "인쇄"버튼을 누르면 인쇄 프로세스가 시작되고 프로세스의 성공 또는 실패에 printJobEvent 메소드가 통지됩니다. 또한 두 번째 해결책은 인쇄 대화 상자를 열지 않아도됩니다. – shittyProgram

관련 문제