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('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 (status !== "PENDING" && status !== "IN_PROGRESS") {
cancelButton.style.visibility = 'hidden';
} else {
cancelButton.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,
callback?: function,
): 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
. -
callback
funzione facoltativa
Il parametro
callback
ha il seguente aspetto:() => void
Resi
-
Promise<void>
Chrome 100+
getJobStatus()
chrome.printing.getJobStatus(
jobId: string,
callback?: function,
): 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
-
callback
funzione facoltativa
Il parametro
callback
ha il seguente aspetto:(status: JobStatus) => void
-
stato
-
Resi
-
Promise<JobStatus>
getPrinterInfo()
chrome.printing.getPrinterInfo(
printerId: string,
callback?: function,
): 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
-
callback
funzione facoltativa
Il parametro
callback
ha il seguente aspetto:(response: GetPrinterInfoResponse) => void
-
risposta
-
Resi
-
Promise<GetPrinterInfoResponse>
Chrome 100+
getPrinters()
chrome.printing.getPrinters(
callback?: function,
): Promise<Printer[]>
Restituisce l'elenco delle stampanti disponibili sul dispositivo. Sono incluse le stampanti aggiunte manualmente, aziendali e rilevate.
Parametri
Resi
-
Promise<Printer[]>
Chrome 100+
submitJob()
chrome.printing.submitJob(
request: SubmitJobRequest,
callback?: function,
): 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
-
callback
funzione facoltativa
Il parametro
callback
ha il seguente aspetto:(response: SubmitJobResponse) => void
-
risposta
-
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.