Descrizione
Utilizza l'API chrome.printing per inviare processi di stampa alle stampanti installate su Chromebook.
Autorizzazioni
printingDisponibilità
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 è connesso direttamente alla stampante, questi stati potrebbero passare troppo rapidamente perché il pulsante Annulla sia visibile abbastanza a lungo da 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 ticketche 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 i dati 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 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 dimensione appropriata, chiama 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à
- 
    capabilitiesoggetto facoltativo Funzionalità della stampante in formato CDD. La proprietà potrebbe non essere presente. 
- 
    statoLo 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à
- 
    descrizionestringa La descrizione leggibile della stampante. 
- 
    idstringa L'identificatore della stampante, garantito per essere univoco tra le stampanti sul dispositivo. 
- 
    isDefaultbooleano Il flag che indica se la stampante rispetta le regole di DefaultPrinterSelection. Tieni presente che potrebbero essere segnalate diverse stampanti. 
- 
    nomestringa Il nome della stampante. 
- 
    recentlyUsedRanknumber (facoltativo) Il valore che indica l'ultima volta che la stampante è stata utilizzata per la 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. 
- 
    origineL'origine della stampante (configurata dall'utente o dai criteri). 
- 
    uristringa 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 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à
- 
    jobIl 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,PageRangeTicketItemeReverseOrderTicketItemperché non sono pertinenti per la stampa nativa.VendorTicketItemè facoltativo. Tutti gli altri campi devono essere presenti.
SubmitJobResponse
Proprietà
- 
    jobIdstringa 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. 
- 
    statoLo 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
- 
    jobIdstringa 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
- 
    jobIdstringa 
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
- 
    printerIdstringa 
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.