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.
|
|
|