chrome.printing

Description

Utilisez l'API chrome.printing pour envoyer des tâches d'impression aux imprimantes installées sur le Chromebook.

Autorisations

printing

Disponibilité

Chrome 81 et versions ultérieures ChromeOS uniquement

Toutes les méthodes et tous les événements chrome.printing nécessitent que vous déclariez l'autorisation "printing" dans le fichier manifeste de l'extension. Exemple :

{   "name": "My extension",   ...   "permissions": [     "printing"   ],   ... } 

Exemples

Les exemples ci-dessous montrent comment utiliser chacune des méthodes dans l'espace de noms d'impression. Ce code est copié ou basé sur api-samples/printing dans le dépôt Github extensions-samples.

cancelJob()

Cet exemple utilise le gestionnaire onJobStatusChanged pour masquer un bouton "Annuler" lorsque jobStatus n'est ni PENDING ni IN_PROGRESS. Notez que sur certains réseaux ou lorsqu'un Chromebook est connecté directement à l'imprimante, ces états peuvent passer trop rapidement pour que le bouton "Annuler" soit visible assez longtemps pour être appelé. Il s'agit d'un exemple d'impression très simplifié.

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

Un seul exemple est utilisé pour ces fonctions, car l'obtention d'informations sur l'imprimante nécessite un ID d'imprimante, qui est récupéré en appelant getPrinters(). Cet exemple enregistre le nom et la description de l'imprimante par défaut dans la console. Il s'agit d'une version simplifiée de l'exemple d'impression.

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

La méthode submitJob() nécessite trois éléments.

  • Structure ticket spécifiant les fonctionnalités de l'imprimante à utiliser. Si l'utilisateur doit choisir parmi les fonctionnalités disponibles, vous pouvez les récupérer pour une imprimante spécifique à l'aide de getPrinterInfo().
  • Une structure SubmitJobRequest, qui spécifie l'imprimante à utiliser, ainsi que le fichier ou la date à imprimer. Cette structure contient une référence à la structure ticket.
  • Blob du fichier ou des données à imprimer.

L'appel de submitJob() déclenche une boîte de dialogue demandant à l'utilisateur de confirmer l'impression. Utilisez PrintingAPIExtensionsAllowlist pour contourner la confirmation.

Il s'agit d'une version simplifiée de l'exemple d'impression. Notez que ticket est associé à la structure SubmitJobRequest (ligne 8) et que les données à imprimer sont converties en blob (ligne 10). Obtenir l'ID de l'imprimante (ligne 1) est plus compliqué dans l'exemple que ce qui est montré ici.

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);   } }); 

Impression sur rouleau

Cet exemple montre comment créer un ticket d'imprimante pour l'impression continue (ou sur rouleau), qui est souvent utilisée pour l'impression de reçus. L'objet submitJobRequest pour l'impression sur rouleau est le même que celui présenté pour l'exemple submitJob().

Si vous devez modifier la valeur par défaut pour la découpe du papier, utilisez la touche vendor_ticket_item. (La valeur par défaut varie d'une imprimante à l'autre.) Pour modifier la valeur, fournissez un tableau avec un seul membre : un objet dont id est 'finishings'. La valeur peut être 'trim' pour les imprimantes qui coupent le rouleau à la fin de l'impression ou 'none' pour les imprimantes qui nécessitent que la tâche d'impression soit déchirée.

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}   } }; 

Certaines imprimantes ne sont pas compatibles avec l'option "finishings". Pour savoir si votre imprimante est compatible, appelez getPrinterInfo() et recherchez un "display_name" de "finishings/11".

"vendor_capability": [   {     "display_name": "finishings/11",     "id": "finishings/11",     "type": "TYPED_VALUE",     "typed_value_cap": {       "value_type": "BOOLEAN"     }   },   ... ] 

Les valeurs de la clé media_size d'un ticket sont spécifiques à chaque imprimante. Pour sélectionner une taille appropriée, appelez getPrinterInfo(). Le GetPrinterResponse renvoyé contient un tableau des tailles de supports acceptées à "media_size"."option". Choisissez une option dont la valeur "is_continuous_feed" est "true". Utilisez ses valeurs de hauteur et de largeur pour le ticket.

"media_size": {   "option": [   {     "custom_display_name": "",     "is_continuous_feed": true,     "max_height_microns": 2000000,     "min_height_microns": 25400,     "width_microns": 50800   },   ...   ] } 

Types

GetPrinterInfoResponse

Propriétés

  • capabilities

    object facultatif

    Fonctionnalités de l'imprimante au format CDD. Il est possible que la propriété soit manquante.

  • État de l'imprimante.

JobStatus

État de la tâche d'impression.

Énumération

"EN ATTENTE"
La tâche d'impression a été reçue par Chrome, mais n'a pas encore été traitée.

"IN_PROGRESS"
La tâche d'impression est envoyée à l'imprimante.

ÉCHEC
La tâche d'impression a été interrompue en raison d'une erreur.

"ANNULÉE"
La tâche d'impression a été annulée par l'utilisateur ou via l'API.

IMPRIMÉ
La tâche d'impression a été effectuée sans erreur.

Printer

Propriétés

  • description

    chaîne

    Description de l'imprimante dans un format lisible.

  • id

    chaîne

    Identifiant de l'imprimante, dont l'unicité est garantie parmi les imprimantes de l'appareil.

  • isDefault

    booléen

    Indicateur indiquant si l'imprimante respecte les règles DefaultPrinterSelection. Notez que plusieurs imprimantes peuvent être signalées.

  • nom

    chaîne

    Nom de l'imprimante.

  • recentlyUsedRank

    number facultatif

    Valeur indiquant la date de la dernière impression depuis Chrome. Plus la valeur est faible, plus l'imprimante a été utilisée récemment. La valeur minimale est 0. Une valeur manquante indique que l'imprimante n'a pas été utilisée récemment. Cette valeur est unique pour chaque imprimante.

  • source

    Source de l'imprimante (utilisateur ou configuration de règle).

  • uri

    chaîne

    URI de l'imprimante. Les extensions peuvent l'utiliser pour choisir l'imprimante pour l'utilisateur.

PrinterSource

Source de l'imprimante.

Énumération

"USER"
L'imprimante a été ajoutée par l'utilisateur.

"RÈGLE"
L'imprimante a été ajoutée via une règle.

PrinterStatus

État de l'imprimante.

Énumération

"DOOR_OPEN"
Le capot de l'imprimante est ouvert. L'imprimante accepte toujours les tâches d'impression.

"TRAY_MISSING"
Le bac de l'imprimante est manquant. L'imprimante accepte toujours les tâches d'impression.

"OUT_OF_INK"
L'imprimante n'a plus d'encre. L'imprimante accepte toujours les tâches d'impression.

"OUT_OF_PAPER"
L'imprimante n'a plus de papier. L'imprimante accepte toujours les tâches d'impression.

"OUTPUT_FULL"
Le bac de sortie de l'imprimante (par exemple, le bac) est plein. L'imprimante accepte toujours les tâches d'impression.

"PAPER_JAM"
L'imprimante est bloquée par un bourrage papier. L'imprimante accepte toujours les tâches d'impression.

"GENERIC_ISSUE"
Problème générique. L'imprimante accepte toujours les tâches d'impression.

ARRÊTÉE
L'imprimante est arrêtée et n'imprime pas, mais accepte toujours les tâches d'impression.

"INACCESSIBLE"
L'imprimante est inaccessible et n'accepte pas les tâches d'impression.

"EXPIRED_CERTIFICATE"
Le certificat SSL a expiré. L'imprimante accepte les tâches, mais elles échouent.

"DISPONIBLE"
L'imprimante est disponible.

SubmitJobRequest

Propriétés

  • job

    Tâche d'impression à envoyer. Les types de contenu acceptés sont "application/pdf" et "image/png". Le ticket de tâche Cloud ne doit pas inclure les champs FitToPageTicketItem, PageRangeTicketItem et ReverseOrderTicketItem, car ils ne sont pas pertinents pour l'impression en natif. VendorTicketItem est facultatif. Tous les autres champs doivent être présents.

SubmitJobResponse

Propriétés

  • jobId

    chaîne facultative

    ID du job d'impression créé. Il s'agit d'un identifiant unique parmi tous les travaux d'impression sur l'appareil. Si l'état n'est pas "OK", jobId sera nul.

  • État de la demande.

SubmitJobStatus

État de la demande submitJob.

Énumération

OK
La demande d'impression a été acceptée.

"USER_REJECTED"
La demande d'impression envoyée a été refusée par l'utilisateur.

Propriétés

MAX_GET_PRINTER_INFO_CALLS_PER_MINUTE

Nombre maximal d'appels de getPrinterInfo par minute.

Valeur

20

MAX_SUBMIT_JOB_CALLS_PER_MINUTE

Nombre maximal d'appels de submitJob par minute.

Valeur

40

Méthodes

cancelJob()

chrome.printing.cancelJob(
  jobId: string,
)
: Promise<void>

Annule la tâche précédemment envoyée.

Paramètres

  • jobId

    chaîne

    ID de la tâche d'impression à annuler. Il doit s'agir du même ID que celui reçu dans un SubmitJobResponse.

Renvoie

  • Promise<void>

    Chrome 100 et versions ultérieures

getJobStatus()

Chrome 135 et versions ultérieures
chrome.printing.getJobStatus(
  jobId: string,
)
: Promise<JobStatus>

Renvoie l'état du job d'impression. Cet appel échouera avec une erreur d'exécution si la tâche d'impression avec le jobId donné n'existe pas. jobId : ID du job d'impression dont vous souhaitez obtenir l'état. Il doit s'agir du même ID que celui reçu dans un SubmitJobResponse.

Paramètres

  • jobId

    chaîne

Renvoie

getPrinterInfo()

chrome.printing.getPrinterInfo(
  printerId: string,
)
: Promise<GetPrinterInfoResponse>

Renvoie l'état et les fonctionnalités de l'imprimante au format CDD. Cet appel échouera avec une erreur d'exécution si aucune imprimante avec l'ID donné n'est installée.

Paramètres

  • printerId

    chaîne

Renvoie

getPrinters()

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

Renvoie la liste des imprimantes disponibles sur l'appareil. Cela inclut les imprimantes ajoutées manuellement, celles de l'entreprise et celles détectées.

Renvoie

  • Promise<Printer[]>

    Chrome 100 et versions ultérieures

submitJob()

chrome.printing.submitJob(
  request: SubmitJobRequest,
)
: Promise<SubmitJobResponse>

Envoie le job pour impression. Si l'extension ne figure pas dans la règle PrintingAPIExtensionsAllowlist, l'utilisateur est invité à accepter la tâche d'impression. Avant Chrome 120, cette fonction ne renvoyait pas de promesse.

Paramètres

Renvoie

Événements

onJobStatusChanged

chrome.printing.onJobStatusChanged.addListener(
  callback: function,
)

Événement déclenché lorsque l'état du job est modifié. Cet événement n'est déclenché que pour les tâches créées par cette extension.

Paramètres

  • callback

    fonction

    Le paramètre callback se présente comme suit :

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