Tarefas do tempo de execução e impressão de sistema do Flash

Flash Player 9 e posterior, Adobe AIR 1.0 e posterior

Devido aos tempos de execução do Flash enviarem páginas para a interface de impressão do sistema operacional, observe as tarefas gerenciadas pelos tempos de execução do Flash e tarefas gerenciadas pela interface de impressão do próprio sistema operacional. Os aplicativos Flash podem iniciar um trabalho de impressão, ler algumas configurações de página de uma impressora, transmitir o conteúdo de um trabalho de impressão para o sistema operacional e verificar se o usuário ou o sistema cancelou um trabalho de impressão. Outros processos, como exibir caixas de diálogo específicas à impressora, cancelar um trabalho de impressão no spool ou relatar o status da impressora, são todos manipulados pelo sistema operacional. Os tempos de execução do Flash podem responder se há um problema ao iniciar ou formatar um trabalho de impressão, mas podem relatar apenas determinadas propriedades ou condições da interface de impressão do sistema operacional. Como desenvolvedor, seu código precisa responder a essas propriedades ou condições.

Trabalho com exceções e retornos

Verifique se o método PrintJob.start() retorna true antes de executar as chamadas addPage() e send() , no caso do usuário ter cancelado o trabalho de impressão. Uma maneira simples de verificar se esses métodos foram cancelados antes de continuar é delimitá-los em uma instrução if , da seguinte maneira:

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

Se PrintJob.start() for true , o Print selecionado pelo usuário (ou um aplicativo Flash, como o Flash Player ou o AIR, iniciou um comando Print). Portanto, os métodos addPage() e send() podem ser chamados.

Além disso, para ajudar a gerenciar o processo de impressão, os tempos de execução do Flash emitem exceções para o método PrintJob.addPage() para que seja possível capturar os erros e fornecer informações e opções ao usuário. Se um método PrintJob.addPage() falhar, você também poderá chamar outra função ou parar o trabalho de impressão atual. Você captura essas exceções incorporando as chamadas de addPage() dentro de uma instrução try..catch , conforme no exemplo a seguir. No exemplo, [params] é um alocador de espaço para os parâmetros que especificam o conteúdo real a ser impresso:

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

Depois que o trabalho de impressão for iniciado, você pode adicionar o conteúdo usando PrintJob.addPage() e verificar se isso gera uma exceção (por exemplo, se o usuário cancelou o trabalho de impressão). Se for gerada uma exceção, você poderá adicionar lógica à instrução catch para fornecer informações e opções ao usuário (ou ao tempo de execução do Flash) ou poderá parar o trabalho de impressão atual. Se você adicionar a página com êxito, poderá continuar a enviar as páginas à impressora usando PrintJob.send() .

Se o tempo de execução do Flash encontrar um problema quando enviar o trabalho de impressão para a impressora (por exemplo, se a impressora estiver offline), você também poderá capturar essa exceção e apresentar informações ou mais opções (por exemplo, exibir o texto da mensagem ou fornecer um alerta dentro de uma animação). Por exemplo, você pode atribuir texto novo a um campo de texto em uma instrução if..else , conforme mostrado no código a seguir:

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

Para obter um exemplo que funciona, consulte Exemplo de impressão: escala, corte e resposta .

Trabalho com propriedades da página

Quando o usuário clica em OK na caixa de diálogo Imprimir e PrintJob.start() retorna true , ele pode acessar as propriedades definidas pelas configurações da impressora. Essas configurações incluem a largura e a altura do papel ( pageHeight e pageWidth ), e a orientação do conteúdo no papel. Como essas são configurações da impressora, não controladas pelo tempo de execução do Flash, você não pode alterá-las. Mas pode usá-las para alinhar o conteúdo enviado para a impressora para que corresponda às configurações atuais. Para obter mais informações, consulte Configuração de tamanho, escala e orientação .

Configuração da renderização de vetores ou de bitmaps

Você pode definir manualmente o trabalho de impressão para armazenar no spool cada página, como gráficos de vetor ou uma imagem de bitmap. Em alguns casos, a impressão de vetores produz um arquivo de spool menor e uma imagem melhor do que a impressão de bitmap. No entanto, se o conteúdo incluir uma imagem de bitmap, e você desejar preservar qualquer transparência alfa ou efeitos de cor, deverá imprimir a página como uma imagem de bitmap. Além disso, uma impressora não PostScript converte automaticamente todos os gráficos de vetor em imagens de bitmap.

É possível especificar a impressão de bitmap, indicando o objeto PrintJobOptions como terceiro parâmetro de PrintJob.addPage() .

Para o Flash Player e AIR anterior ao AIR 2, defina o parâmetro printAsBitmap do objeto PrintJobOptions para true , conforme o exemplo a seguir:

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

Se você não especificar um valor para o terceiro parâmetro, o trabalho de impressão usará o padrão, que é a impressão de vetor.

Para o AIR 2 e posterior, utilize a propriedade printMethod do objeto PrintJobOptions para especificar o método de impressão. Essa propriedade aceita três valores, definidos como constantes na classe PrintMethod:

  • PrintMethod.AUTO : Automaticamente selecione o melhor método de impressão com base no conteúdo impresso. Por exemplo, se a página consiste em texto, o método de impressão vetorial é selecionado. No entanto, se uma imagem de marca d'água com transparência alfa for sobreposta no texto, a impressão de bitmap é selecionada para manter a transparência.

  • PrintMethod.BITMAP : Força a impressão bitmap, imprimindo independentemente do conteúdo

  • PrintMethod.BITMAP : Força a impressão vetor, imprimindo independentemente do conteúdo

Controle de tempo de instruções de trabalho de impressão

O ActionScript 3.0 não restringe o objeto PrintJob a um único quadro (como faziam as versões anteriores do ActionScript). No entanto, como o sistema operacional exibe informações do status de impressão para o usuário depois que ele clicou no botão OK na caixa de diálogo Imprimir, você deve chamar PrintJob.addPage() e PrintJob.send() assim que possível para enviar as páginas para o spooler. Um atraso que atinja o quadro que contém a chamada do PrintJob.send() atrasará o processo de impressão.

No ActionScript 3.0, há um tempo limite de script de 15 segundos. Portanto, o tempo entre cada instrução principal em uma sequência de trabalho de impressão não pode exceder 15 segundos. Em outras palavras, o tempo limite de 15 segundos de script se aplica aos seguintes intervalos:

  • Entre PrintJob.start() e o primeiro PrintJob.addPage()

  • Entre PrintJob.addPage() e o próximo PrintJob.addPage()

  • Entre o último PrintJob.addPage() e PrintJob.send()

Se qualquer um desses intervalos se estender por mais de 15 segundos, a chamada seguinte para o PrintJob.start() , na ocorrência PrintJob, retornará false e o seguinte PrintJob.addPage() na ocorrência PrintJob fará com que o Flash Player ou o AIR emitam uma exceção de tempo de execução.