Attività del runtime di Flash e stampa di sistema

Flash Player 9 e versioni successive, Adobe AIR 1.0 e versioni successive

Poiché i runtime di Flash Player e AIR inviano le pagine all'interfaccia di stampa del sistema operativo, è opportuno tenere presenti le attività gestite dall'interfaccia di stampa del sistema operativo. I runtime di Flash possono avviare un lavoro di stampa, leggere alcune delle impostazioni della pagina di una stampante, passare il contenuto per un lavoro di stampa al sistema operativo e verificare se l'utente o il sistema ha annullato un lavoro di stampa. Tutti gli altri processi, ad esempio la visualizzazione delle finestre di dialogo specifiche della stampante, l'annullamento di un lavoro di stampa elaborato dallo spooler o la segnalazione dello stato della stampante, vengono gestiti dal sistema operativo. I runtime di Flash sono in grado di rispondere se si verificano problemi all'avvio o durante la formattazione di un lavoro di stampa, ma possono fornire una segnalazione solo su determinate proprietà o condizioni dall'interfaccia di stampa del sistema operativo. Gli sviluppatori devono fare in modo che il codice risponda a queste proprietà o condizioni.

Operazioni relative alle eccezioni e ai valori restituiti

Verificate se il metodo PrintJob.start() restituisce true prima di eseguire le chiamate a addPage() e send() , qualora l'utente abbia annullato il lavoro di stampa. Un metodo semplice per verificare se questi metodi sono stati annullati, prima di continuare, consiste nell'inserirli in un'istruzione if , come riportato di seguito:

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

Se PrintJob.start() è true , l'utente ha selezionato Stampa (o un runtime Flash, ad esempio Flash Player o AIR, ha avviato un comando di stampa). Pertanto, i metodi addPage() e send() possono essere chiamati.

Inoltre, per facilitare la gestione del processo di stampa, i runtime di Flash generano delle eccezioni per il metodo PrintJob.addPage() , così che sia possibile rilevare gli errori e presentare le informazioni e le opzioni all'utente. Se un metodo PrintJob.addPage() ha esito negativo, è possibile chiamare un'altra funzione oppure interrompere il lavoro di stampa corrente. Per rilevare queste eccezioni, incorporate le chiamate ad addPage() all'interno di un'istruzione try..catch , come nell'esempio seguente. Nell'esempio, [params] è un segnaposto per i parametri che specificano il contenuto effettivo da stampare.

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

Una volta avviato il lavoro di stampa, potete aggiungere il contenuto utilizzando PrintJob.addPage() e verificare se viene generata un'eccezione (ad esempio, se l'utente ha annullato il lavoro di stampa). In caso contrario, è possibile aggiungere logica all'istruzione catch per fornire all'utente (o al runtime di Flash) le informazioni e le opzioni, oppure è possibile interrompere il lavoro di stampa corrente. Se la pagina viene aggiunta correttamente, potete procedere all'invio delle pagine alla stampante utilizzando PrintJob.send() .

Se durante l'invio del lavoro di stampa alla stampante si verifica un problema (ad esempio, la stampante non è in linea), potete rilevare anche quell'eccezione e fornire all'utente le informazioni o ulteriori opzioni (ad esempio la visualizzazione del testo di un messaggio o la presentazione di un avviso all'interno di un'animazione). È possibile ad esempio assegnare nuovo testo a un campo di testo in un'istruzione if..else , come mostra il codice seguente:

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

Per un esempio funzionante, vedete Esempio di stampa: modifica in scala, ritaglio e risposta .

Operazioni con le proprietà della pagina

Dopo che l'utente ha fatto clic su OK nella finestra di dialogo di Stampa e PrintJob.start() ha restituito true , è possibile accedere alle proprietà definite nelle impostazioni della stampante, che includono la larghezza e l'altezza del foglio ( pageHeight e pageWidth ) e l'orientamento del contenuto sul foglio. Poiché queste sono impostazioni della stampante che non vengono controllate dal runtime di Flash, non è possibile modificarle; tuttavia, possono essere utilizzate per allineare il contenuto inviato alla stampante, in modo che corrisponda alle impostazioni correnti. Per ulteriori informazioni, vedete Impostazione delle dimensioni, della scala e dell'orientamento .

Impostazione del rendering vettoriale o bitmap

Potete impostare manualmente il lavoro di stampa in modo che ogni pagina sia inviata allo spooler come grafica vettoriale o immagine bitmap. In alcuni casi, la stampa vettoriale produce file di spool di dimensioni inferiori e un'immagine migliore rispetto alla stampa bitmap. Se tuttavia nel contenuto è presente un'immagine bitmap e desiderate mantenere gli eventuali effetti di colore o di trasparenza alfa, stampate la pagina come immagine bitmap. Le stampanti non PostScript, inoltre, convertono automaticamente la grafica vettoriale in immagini bitmap.

Potete specificare la stampa bitmap passando un oggetto PrintJobOptions come terzo parametro di PrintJob.addPage() .

In Flash Player e nella versione di AIR precedente a AIR 2, impostate il parametro printAsBitmap dell'oggetto PrintJobOptions su true , come riportato di seguito:

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

Se non specificate un valore per il terzo parametro, il lavoro di stampa utilizza l'impostazione predefinita, ovvero la stampa vettoriale.

In AIR 2 e versioni successive, utilizzate la proprietà printMethod dell'oggetto PrintJobOptions per specificare il metodo di stampa. Questa proprietà accetta tre valori, che sono definiti come costanti nella classe PrintMethod:

  • PrintMethod.AUTO : sceglie automaticamente il metodo di stampa migliore in base al contenuto in corso di stampa. Ad esempio, se una pagina è costituita da testo, viene scelto il metodo di stampa vettoriale. Tuttavia, se un'immagine filigrana con trasparenza alfa viene sovrapposta al testo, viene scelta la stampa bitmap per preservare la trasparenza.

  • PrintMethod.BITMAP : impone la stampa bitmap indipendentemente dal contenuto.

  • PrintMethod.VECTOR : impone la stampa vettoriale indipendentemente dal contenuto.

Tempistica delle istruzioni per i lavori di stampa

ActionScript 3.0 non limita un oggetto PrintJob a un fotogramma singolo (come accadeva nelle versioni precedenti di ActionScript). Tuttavia, poiché le informazioni sullo stato di stampa vengono visualizzate dopo aver fatto clic sul pulsante OK nella finestra di dialogo di stampa, chiamate PrintJob.addPage() e PrintJob.send() il più presto possibile per inviare le pagine allo spooler. Se il fotogramma contenente la chiamata PrintJob.send() viene raggiunto in ritardo, il processo di stampa viene ritardato.

In ActionScript 3.0, esiste un limite di 15 secondi per il timeout dello script, pertanto l'intervallo tra ogni istruzione principale in una sequenza del lavoro di stampa non può superare 15 secondi. In altre parole, il limite di timeout dello script di 15 secondi si applica ai seguenti intervalli:

  • Tra PrintJob.start() e il primo PrintJob.addPage()

  • Tra PrintJob.addPage() e il successivo PrintJob.addPage()

  • Tra l'ultimo PrintJob.addPage() e PrintJob.send()

Se uno di questi intervalli supera il limite di 15 secondi, la successiva chiamata a PrintJob.start() nell'istanza PrintJob restituisce false e la successiva chiamata a PrintJob.addPage() nell'istanza di PrintJob causa la generazione di un'eccezione di runtime da parte di Flash Player o AIR.