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 è 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 utilizzando getPrinterInfo().
  • Una struttura SubmitJobRequest, che specifica la stampante da utilizzare e il file o la data 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 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.

  • 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 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()

Promessa
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()

Promise Chrome 135+
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

Resi

getPrinterInfo()

Promessa
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

Resi

getPrinters()

Promessa
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

  • callback

    funzione facoltativa

    Il parametro callback ha il seguente aspetto:

    (printers: Printer[]) => void

Resi

submitJob()

Promessa
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

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