Flash 런타임 작업 및 시스템 인쇄

Flash Player 9 이상, Adobe AIR 1.0 이상

Flash 런타임은 운영 체제의 인쇄 인터페이스에 페이지를 전달하므로 Flash 런타임에서 관리하는 작업과 운영 체제의 자체 인쇄 인터페이스에서 관리하는 작업에 주의해야 합니다. Flash 런타임은 인쇄 작업을 초기화하고, 프린터의 페이지 설정 일부를 읽고, 인쇄 작업의 내용을 운영 체제에 전달하고, 사용자나 시스템에서 인쇄 작업을 취소했는지 여부를 확인합니다. 프린터별 대화 상자를 표시하거나, 스풀링된 인쇄 작업을 취소하거나, 프린터의 상태를 보고하는 등 그 밖의 프로세스는 모두 운영 체제에서 처리됩니다. Flash 런타임에서는 인쇄 작업을 초기화하거나 형식을 지정하는 데 문제가 있는 경우에 응답은 할 수 있지만 운영 체제의 인쇄 인터페이스에서 특정 속성이나 조건에 대해서만 보고할 수 있습니다. 개발자의 경우 코드에서 이러한 속성이나 조건에 응답해야 합니다.

예외 및 반환 처리

사용자가 인쇄 작업을 취소한 경우 addPage()send() 호출을 실행하기 전에 PrintJob.start() 메서드가 true를 반환하는지 확인하십시오. 계속 진행하기에 앞서 이러한 메서드가 취소되었는지 확인하는 간단한 방법은 if 문에서 해당 메서드를 다음과 같이 래핑하는 것입니다.

if (myPrintJob.start()) 
{ 
    // addPage() and send() statements here 
}

PrintJob.start()true인 경우 사용자가 [인쇄]를 선택했거나 Flash Player나 AIR와 같은 Flash 런타임에서 인쇄 명령을 시작한 것입니다. 따라서 addPage()send() 메서드를 호출할 수 있습니다.

또한 인쇄 프로세스를 관리할 수 있도록 Flash 런타임에서 PrintJob.addPage() 메서드에 대한 예외를 발생시키므로 오류를 catch하고 사용자에게 정보와 옵션을 제공할 수 있습니다. PrintJob.addPage() 메서드가 실패하면 다른 함수를 호출하거나 현재 인쇄 작업을 중지할 수도 있습니다. 다음 예제와 같이 addPage() 호출을 try..catch 문 내에 포함하여 이러한 예외를 catch합니다. 예제에서 [params]는 실제 인쇄할 내용을 지정하는 매개 변수의 자리 표시자입니다.

if (myPrintJob.start()) 
{ 
    try 
    { 
        myPrintJob.addPage([params]); 
    } 
    catch (error:Error) 
    { 
        // Handle error,  
    } 
    myPrintJob.send(); 
}

인쇄 작업이 시작되면 PrintJob.addPage()를 사용하여 내용을 추가할 수 있으며 그로 인해 예외가 생성되는지 여부(예: 사용자가 인쇄 작업을 취소했는지 여부)를 확인할 수 있습니다. 예외가 발생한 경우 catch 문에 논리를 추가하여 사용자 또는 Flash 런타임에 정보와 옵션을 제공하거나 현재 인쇄 작업을 중지할 수 있습니다. 페이지를 제대로 추가한 경우에는 계속해서 PrintJob.send()를 사용하여 페이지를 프린터로 전송할 수 있습니다.

Flash 런타임이 프린터에 인쇄 작업을 보내는 데 문제가 발생하는 경우, 예를 들어 프린터가 오프라인인 경우 이 예외도 catch하여 추가 정보나 추가 옵션(예: 메시지 텍스트 표시 또는 애니메이션 내에 경고 표시)을 제공할 수 있습니다. 예를 들어 다음 코드와 같이 if..else 문의 텍스트 필드에 새 텍스트를 지정할 수 있습니다.

if (myPrintJob.start()) 
{ 
    try 
    { 
        myPrintJob.addPage([params]); 
    } 
    catch (error:Error) 
    { 
        // Handle error.  
    } 
    myPrintJob.send(); 
} 
else 
{ 
    myAlert.text = "Print job canceled"; 
}

작업 예제는 인쇄 예제: 배율 조절, 자르기 및 자동 맞춤을 참조하십시오.

페이지 속성을 사용한 작업

사용자가 [인쇄] 대화 상자에서 [확인]을 클릭하고 PrintJob.start()true를 반환하면 프린터 설정에서 정의한 속성에 액세스할 수 있습니다. 이러한 설정에는 용지 폭, 용지 높이(pageHeightpageWidth) 및 용지의 내용 방향 등이 있습니다. 이러한 속성은 프린터 설정이므로 Flash 런타임에서 조절할 수 없으며 이러한 설정은 변경할 수 없습니다. 그러나 이러한 속성을 사용하여 프린터로 전송할 내용을 현재 설정에 맞게 조정할 수 있습니다. 자세한 내용은 크기, 배율 및 방향 설정을 참조하십시오.

벡터 또는 비트맵 렌더링 설정

각 페이지를 벡터 그래픽이나 비트맵 이미지로 스풀링하도록 인쇄 작업을 수동으로 설정할 수 있습니다. 경우에 따라 벡터 인쇄는 비트맵 인쇄보다 더 작은 스풀 파일을 만들고 더 나은 이미지를 만듭니다. 그러나 내용에 비트맵 이미지가 있는 경우 알파 투명도나 색상 효과를 보존하려면 페이지를 비트맵 이미지로 인쇄합니다. 또한 PostScript 프린터가 아닌 프린터에서는 자동으로 벡터 그래픽을 비트맵 이미지로 변환합니다.

PrintJobOptions 객체를 PrintJob.addPage()의 세 번째 매개 변수로 전달하여 비트맵 인쇄를 지정할 수 있습니다.

Flash Player 및 AIR 2 이전 버전의 경우 다음과 같이 PrintJobOptions 객체의 printAsBitmap 매개 변수를 true로 설정합니다.

var options:PrintJobOptions = new PrintJobOptions(); 
options.printAsBitmap = true; 
myPrintJob.addPage(mySprite, null, options);

세 번째 매개 변수의 값을 지정하지 않으면 인쇄 작업에서 기본값(벡터 인쇄)을 사용합니다.

AIR 2 이상에서는 PrintJobOptions 객체의 printMethod 속성을 사용하여 인쇄 방법을 지정합니다. 이 속성은 세 가지 값을 사용합니다. 이러한 값은 PrintMethod 클래스에 상수로 정의되어 있습니다.

  • PrintMethod.AUTO: 인쇄되는 내용에 따라 가장 적합한 인쇄 방법을 자동으로 선택합니다. 예를 들어 텍스트로 이루어진 페이지의 경우 벡터 인쇄 방법이 선택됩니다. 한편 알파 투명도가 있는 워터마크 이미지가 텍스트에 겹쳐 있는 경우 투명도를 유지하기 위해 비트맵 인쇄가 선택됩니다.

  • PrintMethod.BITMAP: 내용에 관계없이 비트맵 인쇄를 적용합니다.

  • PrintMethod.VECTOR: 내용에 관계없이 벡터 인쇄를 적용합니다.

인쇄 작업 시간 제한 명령문

ActionScript 3.0에서는 이전 버전의 ActionScript와 달리 PrintJob 객체를 단일 프레임으로 제한하지 않습니다. 그러나 사용자가 [인쇄] 대화 상자에서 [확인] 버튼을 클릭하면 운영 체제에서 사용자에게 인쇄 상태 정보를 표시하므로 PrintJob.addPage()PrintJob.send()를 최대한 빠르게 호출하여 페이지를 스풀러로 보냅니다. PrintJob.send() 호출이 들어 있는 프레임에 늦게 도달하면 인쇄 과정이 지연될 수 있습니다.

ActionScript 3.0에서는 15초의 스크립트 시간 초과 제한이 있습니다. 그러므로 연속된 인쇄 작업에서 각 기본 명령문 사이의 시간은 15초를 초과할 수 없습니다. 즉, 다음 간격에 15초 스크립트 시간 초과 제한이 적용됩니다.

  • PrintJob.start()와 첫 번째 PrintJob.addPage() 사이

  • PrintJob.addPage()와 다음 PrintJob.addPage() 사이

  • 마지막 PrintJob.addPage()PrintJob.send() 사이

이러한 간격 중 하나가 15초를 초과하는 경우 다음에 PrintJob 인스턴스에서 PrintJob.start()를 호출하면 false가 반환되고 다음에 PrintJob 인스턴스에서 PrintJob.addPage()를 반환하면 Flash Player 또는 AIR에서 런타임 예외가 발생합니다.