chrome.printing

Descrizione

Utilizza l'API chrome.printing per inviare processi di stampa alle stampanti installate su Chromebook.

Autorizzazioni

printing

Disponibilità

Chrome 81 e versioni successive Solo ChromeOS

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 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 utilizzando getPrinterInfo().
  • Una struttura SubmitJobRequest, che specifica la stampante da utilizzare e il file o i dati da stampare. Questa struttura contiene un riferimento alla struttura ticket.
  • 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à

  • capabilities

    oggetto facoltativo

    Funzionalità della stampante in formato CDD. La proprietà potrebbe non essere presente.

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

  • 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 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 e ReverseOrderTicketItem 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.

  • 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 135+
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

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

getPrinters()

chrome.printing.getPrinters(): Promise<Printer[]>

Restituisce l'elenco delle stampanti disponibili sul dispositivo. Sono incluse le stampanti aggiunte manualmente, aziendali e rilevate.

Resi

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

Resi

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.

Parametri

  • callback

    funzione

    Il parametro callback ha il seguente aspetto:

    (jobId: string, status: JobStatus) => void