Descrizione
Utilizza l'API chrome.printing
per inviare processi di stampa alle stampanti installate su Chromebook.
Autorizzazioni
printing
Disponibilità
Tutti i metodi e gli eventi chrome.printing
richiedono di dichiarare l'autorizzazione "printing"
nel manifest dell'estensione. Ad esempio:
{ "name": "My extension", ... "permissions":
[ "printing" ], ... }
Esempi
Gli esempi riportati di seguito mostrano l'utilizzo di ciascun metodo nello spazio dei nomi di stampa. Questo codice è copiato o basato su api-samples/printing nel repository GitHub extensions-samples.
cancelJob()
Questo esempio utilizza il gestore onJobStatusChanged
per nascondere un pulsante "Annulla" quando jobStatus
non è PENDING
o IN_PROGRESS
. Tieni presente che su alcune reti o quando un Chromebook è collegato direttamente alla stampante, questi stati potrebbero passare troppo rapidamente per rendere visibile il pulsante Annulla abbastanza a lungo da poter essere chiamato. Questo è un esempio di stampa molto semplificato.
chrome.printing.onJobStatusChanged.addListener((jobId, status) => { const cancelButton = document.getElementById("cancelButton"); cancelButton.addEventListener(>9;click', () = { chrome.printing.cancelJob(jobId)>.then((response) = { if (response !== undefined) { console.log(response.status); } if (chrome.runtime.lastError !== undefined) { console.log(chrome.runtime.lastError.message); } }); }); if (sta&&tus !== "PENDING" status !== "IN_PROGRESS") { cancelButton.style.visibility = 'hidden'; } else { can
celButton.style.visibility = 'visible'; } }
getPrinters() and getPrinterInfo()
Per queste funzioni viene utilizzato un solo esempio perché per ottenere le informazioni sulla stampante è necessario un ID stampante, che viene recuperato chiamando getPrinters()
. Questo esempio registra il nome e la descrizione della stampante predefinita nella console. Questa è una versione semplificata dell'esempio di stampa.
const printers = await chrome.printing.getPrinters(); const defaultPrinter = printers.find((printer) => { const printerInfo = await chrome.printing.getPrinterInfo(printer.id); return printerInfo.isDefault; } console.log(`Default printer: ${defaultPrinter.name}.\n\t${defaultPrinter.description}`);
submitJob()
Il metodo submitJob()
richiede tre elementi.
- Una struttura
ticket
che specifica quali funzionalità della stampante devono essere utilizzate. Se l'utente deve scegliere tra le funzionalità disponibili, puoi recuperarle per una stampante specifica utilizzandogetPrinterInfo()
. - Una struttura
SubmitJobRequest
, che specifica la stampante da utilizzare e il file o la data da stampare. Questa struttura contiene un riferimento alla strutturaticket
. - Un blob del file o dei dati da stampare.
La chiamata a submitJob()
attiva una finestra di dialogo che chiede all'utente di confermare la stampa. Utilizza PrintingAPIExtensionsAllowlist
per ignorare la conferma.
Questa è una versione semplificata dell'esempio di stampa. Tieni presente che ticket
è collegato alla struttura SubmitJobRequest
(riga 8) e che i dati da stampare vengono convertiti in un blob (riga 10). Ottenere l'ID della stampante (riga 1) è più complicato nell'esempio di quanto mostrato qui.
const defaultPrinter = getDefaultPrinter(); const ticket = getPrinterTicket(defaultPrinter); const arrayBuffer = getPrintData(); const submitJobRequest = { job: { printerId: defaultPrinter, title: 'test job', ticket: ticket, contentType: 'application/pdf', document: new Blob([new Uint8Array(arrayBuffer)], { type: 'application/pdf' }); } }; chrome.printing.submitJob(submitJobRequest, (response) => { if (response !== undefined) { console.log(response.status); } if (chrome.runtime.lastError !== undefined) { console.log(chrome.runtime.lastError.message); } });
Stampa a rotolo
Questo esempio mostra come creare un ticket di stampa per la stampa continua (o a rotolo), spesso utilizzata per la stampa di ricevute. L'oggetto submitJobRequest
per la stampa a rotolo è lo stesso mostrato per l'esempio submitJob()
.
Se devi modificare il valore predefinito per il taglio della carta, utilizza il tasto vendor_ticket_item
. Il valore predefinito varia da stampante a stampante. Per modificare il valore, fornisci un array con un solo membro: un oggetto il cui id
è 'finishings'
. Il valore può essere 'trim'
per le stampanti che tagliano il rotolo alla fine della stampa o 'none'
per le stampanti che richiedono lo strappo del processo di stampa.
const ticket = { version: '1.0', print: { vendor_ticket_item: [{id: 'finishings', value: 'trim'}], color: {type: 'STANDARD_MONOCHROME'}, duplex: {type: 'NO_DUPLEX'}, page_orientation: {type: 'PORTRAIT'}, copies: {copies: 1}, dpi: {horizontal_dpi: 300, vertical_dpi: 300}, media_size: { width_microns: 72320, height_microns: 100000 }, collate: {collate: false} } };
Alcune stampanti non supportano l'opzione "finishings"
. Per sapere se la tua stampante lo supporta, chiama il numero getPrinterInfo()
e cerca un "display_name"
di "finishings/11"
.
"vendor_capability": [ { "display_name": "finishings/11", "id": "finishings/11", "type": "TYPED_VALUE", "typed_value_cap": { "value_type": "BOOLEAN" } }, ... ]
I valori nella chiave media_size
di un ticket sono specifici per ogni stampante. Per selezionare una taglia adatta, chiama il numero getPrinterInfo()
. Il GetPrinterResponse
restituito contiene un array di dimensioni dei contenuti multimediali supportate in "media_size"."option"
. Scegli un'opzione il cui valore di "is_continuous_feed"
sia vero. Utilizza i valori di altezza e larghezza per il biglietto.
"media_size": { "option": [ { "custom_display_name": "", "is_continuous_feed": true, "max_height_microns": 2000000, "min_height_microns": 25400, "width_microns": 50800 }, ... ] }
Tipi
GetPrinterInfoResponse
Proprietà
- capabilities
oggetto facoltativo
Funzionalità della stampante in formato CDD. La proprietà potrebbe non essere presente.
- stato
Lo stato della stampante.
JobStatus
Stato del processo di stampa.
Enum
"IN ATTESA"
Il lavoro di stampa è stato ricevuto sul lato Chrome, ma non è ancora stato elaborato.
"IN_PROGRESS"
Il lavoro di stampa viene inviato per la stampa.
"NON RIUSCITO"
Il processo di stampa è stato interrotto a causa di un errore.
"ANNULLATO"
Il processo di stampa è stato annullato dall'utente o tramite API.
"STAMPATO"
Il job di stampa è stato stampato senza errori.
Printer
Proprietà
- descrizione
stringa
La descrizione leggibile della stampante.
- id
stringa
L'identificatore della stampante, garantito per essere univoco tra le stampanti sul dispositivo.
- isDefault
booleano
Il flag che indica se la stampante rispetta le regole di DefaultPrinterSelection. Tieni presente che potrebbero essere segnalate diverse stampanti.
- nome
stringa
Il nome della stampante.
- recentlyUsedRank
number (facoltativo)
Il valore che indica la data dell'ultima stampa da Chrome. Più basso è il valore, più recente è l'utilizzo della stampante. Il valore minimo è 0. Il valore mancante indica che la stampante non è stata utilizzata di recente. Questo valore è garantito per essere univoco tra le stampanti.
- origine
L'origine della stampante (configurata dall'utente o dai criteri).
- uri
stringa
L'URI della stampante. Può essere utilizzato dalle estensioni per scegliere la stampante per l'utente.
PrinterSource
L'origine della stampante.
Enum
"USER"
La stampante è stata aggiunta dall'utente.
"POLICY"
La stampante è stata aggiunta tramite policy.
PrinterStatus
Lo stato della stampante.
Enum
"DOOR_OPEN"
Lo sportello della stampante è aperto. La stampante accetta ancora i processi di stampa.
"TRAY_MISSING"
Il vassoio della stampante non è presente. La stampante accetta ancora i processi di stampa.
"OUT_OF_INK"
La stampante ha terminato l'inchiostro. La stampante accetta ancora i processi di stampa.
"OUT_OF_PAPER"
La stampante ha esaurito la carta. La stampante accetta ancora i processi di stampa.
"OUTPUT_FULL"
Lo scomparto di uscita della stampante (ad es. il vassoio) è pieno. La stampante accetta ancora i processi di stampa.
"PAPER_JAM"
La stampante ha un inceppamento della carta. La stampante accetta ancora i processi di stampa.
"GENERIC_ISSUE"
Some generic issue. La stampante accetta ancora i processi di stampa.
"INTERROTTO"
La stampante è interrotta e non stampa, ma accetta comunque i processi di stampa.
"IRRAGGIUNGIBILE"
La stampante è irraggiungibile e non accetta i processi di stampa.
"EXPIRED_CERTIFICATE"
Il certificato SSL è scaduto. La stampante accetta i lavori, ma non vanno a buon fine.
"DISPONIBILE"
La stampante è disponibile.
SubmitJobRequest
Proprietà
- job
Il processo di stampa da inviare. I tipi di contenuti supportati sono "application/pdf" e "image/png". Il Cloud Job Ticket non deve includere i campi
FitToPageTicketItem
,PageRangeTicketItem
eReverseOrderTicketItem
perché non sono pertinenti per la stampa nativa.VendorTicketItem
è facoltativo. Tutti gli altri campi devono essere presenti.
SubmitJobResponse
Proprietà
- jobId
stringa facoltativa
L'ID del job di stampa creato. Si tratta di un identificatore univoco tra tutti i lavori di stampa sul dispositivo. Se lo stato non è OK, jobId sarà nullo.
- stato
Lo stato della richiesta.
SubmitJobStatus
Lo stato della richiesta submitJob
.
Enum
"Ok"
La richiesta di stampa inviata è stata accettata.
"USER_REJECTED"
La richiesta di stampa inviata viene rifiutata dall'utente.
Proprietà
MAX_GET_PRINTER_INFO_CALLS_PER_MINUTE
Il numero massimo di volte in cui è possibile chiamare getPrinterInfo
al minuto.
Valore
20
MAX_SUBMIT_JOB_CALLS_PER_MINUTE
Il numero massimo di volte in cui è possibile chiamare submitJob
al minuto.
Valore
40
Metodi
cancelJob()
chrome.printing.cancelJob(
jobId: string,
): Promise<void>
Annulla il job inviato in precedenza.
Parametri
- jobId
stringa
L'ID del processo di stampa da annullare. Deve essere lo stesso ID ricevuto in un
SubmitJobResponse
.
Resi
-
Promise<void>
Chrome 100+
getJobStatus()
chrome.printing.getJobStatus(
jobId: string,
): Promise<JobStatus>
Restituisce lo stato del job di stampa. Questa chiamata non andrà a buon fine e verrà visualizzato un errore di runtime se il job di stampa con il jobId
specificato non esiste. jobId
: L'ID del job di stampa di cui restituire lo stato. Deve essere lo stesso ID ricevuto in un SubmitJobResponse
.
Parametri
- jobId
stringa
Resi
-
Promise<JobStatus>
getPrinterInfo()
chrome.printing.getPrinterInfo(
printerId: string,
): Promise<GetPrinterInfoResponse>
Restituisce lo stato e le funzionalità della stampante nel formato CDD. Questa chiamata non riuscirà e verrà generato un errore di runtime se non sono installate stampanti con l'ID specificato.
Parametri
- printerId
stringa
Resi
-
Promise<GetPrinterInfoResponse>
Chrome 100+
getPrinters()
chrome.printing.getPrinters(): Promise<Printer[]>
Restituisce l'elenco delle stampanti disponibili sul dispositivo. Sono incluse le stampanti aggiunte manualmente, aziendali e rilevate.
Resi
-
Promise<Printer[]>
Chrome 100+
submitJob()
chrome.printing.submitJob(
request: SubmitJobRequest,
): Promise<SubmitJobResponse>
Invia il lavoro per la stampa. Se l'estensione non è elencata nel criterio PrintingAPIExtensionsAllowlist
, all'utente viene chiesto di accettare il processo di stampa. Prima di Chrome 120, questa funzione non restituiva una promessa.
Parametri
- richiesta
Resi
-
Promise<SubmitJobResponse>
Chrome 100+
Eventi
onJobStatusChanged
chrome.printing.onJobStatusChanged.addListener(
callback: function,
)
Evento attivato quando lo stato del job viene modificato. Viene attivato solo per i job creati da questa estensione.