chrome.printing

Descripción

Usa la API de chrome.printing para enviar trabajos de impresión a las impresoras instaladas en la Chromebook.

Permisos

printing

Disponibilidad

Chrome 81 y versiones posteriores Solo para ChromeOS

Todos los métodos y eventos de chrome.printing requieren que declares el permiso "printing" en el manifiesto de la extensión. Por ejemplo:

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

Ejemplos

En los siguientes ejemplos, se muestra el uso de cada uno de los métodos del espacio de nombres de impresión. Este código se copia de api-samples/printing o se basa en él en el repositorio de GitHub de extensions-samples.

cancelJob()

En este ejemplo, se usa el controlador onJobStatusChanged para ocultar un botón "Cancelar" cuando jobStatus no es PENDING ni IN_PROGRESS. Ten en cuenta que, en algunas redes o cuando una Chromebook está conectada directamente a la impresora, es posible que estos estados pasen demasiado rápido para que el botón de cancelación sea visible el tiempo suficiente para llamarlo. Este es un ejemplo de impresión muy simplificado.

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

Se usa un solo ejemplo para estas funciones porque obtener información de la impresora requiere un ID de impresora, que se recupera llamando a getPrinters(). En este ejemplo, se registra el nombre y la descripción de la impresora predeterminada en la consola. Esta es una versión simplificada del ejemplo de impresión.

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

El método submitJob() requiere tres elementos.

  • Una estructura ticket que especifica qué funciones de la impresora se deben usar. Si el usuario necesita seleccionar entre las capacidades disponibles, puedes recuperarlas para una impresora específica con getPrinterInfo().
  • Una estructura SubmitJobRequest, que especifica la impresora que se usará y el archivo o la fecha que se imprimirá. Esta estructura contiene una referencia a la estructura ticket.
  • Es un fragmento del archivo o los datos que se imprimirán.

Llamar a submitJob() activa un cuadro de diálogo en el que se le solicita al usuario que confirme la impresión. Usa PrintingAPIExtensionsAllowlist para omitir la confirmación.

Esta es una versión simplificada del ejemplo de impresión. Observa que ticket se adjunta a la estructura SubmitJobRequest (línea 8) y que los datos que se imprimirán se convierten en un blob (línea 10). Obtener el ID de la impresora (línea 1) es más complicado en el ejemplo que lo que se muestra aquí.

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

Impresión en rollo

En este ejemplo, se muestra cómo crear un ticket de impresora para la impresión continua (o en rollo), que se suele usar con la impresión de recibos. El objeto submitJobRequest para la impresión en rollo es el mismo que se muestra en el ejemplo de submitJob().

Si necesitas cambiar el valor predeterminado del corte de papel, usa la clave vendor_ticket_item. (El valor predeterminado varía de una impresora a otra). Para cambiar el valor, proporciona un array con un miembro: un objeto cuyo id sea 'finishings'. El valor puede ser 'trim' para las impresoras que cortan el rollo al final de la impresión o 'none' para las impresoras que requieren que se quite el trabajo de impresión.

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

Algunas impresoras no admiten la opción "finishings". Para determinar si tu impresora lo hace, llama a getPrinterInfo() y busca un "display_name" de "finishings/11".

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

Los valores de la clave media_size de un ticket son específicos de cada impresora. Para seleccionar un tamaño adecuado, llama a getPrinterInfo(). El GetPrinterResponse que se muestra contiene un array de tamaños de contenido multimedia compatibles en "media_size"."option". Elige una opción cuyo valor de "is_continuous_feed" sea verdadero. Usa los valores de altura y ancho para el boleto.

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

Tipos

GetPrinterInfoResponse

Propiedades

  • capabilities

    objeto opcional

    Funciones de la impresora en formato CDD Es posible que falte la propiedad.

  • estado

    El estado de la impresora.

JobStatus

Estado del trabajo de impresión.

Enum

"PENDIENTE"
El trabajo de impresión se recibió en Chrome, pero aún no se procesó.

"IN_PROGRESS"
El trabajo de impresión se envía para su impresión.

"FAILED"
El trabajo de impresión se interrumpió debido a un error.

"CANCELED"
El usuario canceló el trabajo de impresión o lo hizo a través de la API.

"PRINTED"
El trabajo de impresión se imprimió sin errores.

Printer

Propiedades

  • descripción

    string

    Es la descripción legible por humanos de la impresora.

  • id

    string

    Es el identificador de la impresora, que garantiza ser único entre las impresoras del dispositivo.

  • isDefault

    booleano

    Es la marca que muestra si la impresora cumple con las reglas de DefaultPrinterSelection. Ten en cuenta que se podrían marcar varias impresoras.

  • nombre

    string

    Es el nombre de la impresora.

  • recentlyUsedRank

    número opcional

    Es el valor que muestra la fecha en la que se usó la impresora para imprimir desde Chrome. Cuanto más bajo sea el valor, más reciente será el uso de la impresora. El valor mínimo es 0. Si falta el valor, significa que la impresora no se usó recientemente. Se garantiza que este valor sea único entre las impresoras.

  • source

    La fuente de la impresora (usuario o política configurada)

  • uri

    string

    Es el URI de la impresora. Las extensiones pueden usar esta función para elegir la impresora del usuario.

PrinterSource

Es la fuente de la impresora.

Enum

"USER"
El usuario agregó la impresora.

"POLICY"
La impresora se agregó a través de una política.

PrinterStatus

El estado de la impresora.

Enum

"DOOR_OPEN"
La puerta de la impresora está abierta. La impresora sigue aceptando trabajos de impresión.

"TRAY_MISSING"
Falta la bandeja de la impresora. La impresora sigue aceptando trabajos de impresión.

"OUT_OF_INK"
La impresora se quedó sin tinta. La impresora sigue aceptando trabajos de impresión.

"OUT_OF_PAPER"
La impresora se quedó sin papel. La impresora sigue aceptando trabajos de impresión.

"OUTPUT_FULL"
El área de salida de la impresora (p.ej., la bandeja) está llena. La impresora sigue aceptando trabajos de impresión.

"PAPER_JAM"
La impresora tiene un atasco de papel. La impresora sigue aceptando trabajos de impresión.

"GENERIC_ISSUE"
Algún problema genérico. La impresora sigue aceptando trabajos de impresión.

"STOPPED"
La impresora está detenida y no imprime, pero aún acepta trabajos de impresión.

"UNREACHABLE"
No se puede acceder a la impresora y no acepta trabajos de impresión.

"EXPIRED_CERTIFICATE"
El certificado SSL venció. La impresora acepta trabajos, pero fallan.

"DISPONIBLE"
La impresora está disponible.

SubmitJobRequest

Propiedades

  • trabajo

    Es el trabajo de impresión que se enviará. El único tipo de contenido admitido es "application/pdf", y el ticket de trabajo de Cloud no debe incluir los campos FitToPageTicketItem, PageRangeTicketItem, ReverseOrderTicketItem y VendorTicketItem, ya que son irrelevantes para la impresión nativa. Todos los demás campos deben estar presentes.

SubmitJobResponse

Propiedades

  • ID de tarea

    cadena opcional

    El ID del trabajo de impresión creado. Este es un identificador único entre todas las tareas de impresión del dispositivo. Si el estado no es OK, jobId será nulo.

  • Es el estado de la solicitud.

SubmitJobStatus

Es el estado de la solicitud de submitJob.

Enum

"Aceptar"
Se acepta la solicitud de trabajo de impresión enviada.

"USER_REJECTED"
El usuario rechaza la solicitud de trabajo de impresión enviada.

Propiedades

MAX_GET_PRINTER_INFO_CALLS_PER_MINUTE

Es la cantidad máxima de veces que se puede llamar a getPrinterInfo por minuto.

Valor

20

MAX_SUBMIT_JOB_CALLS_PER_MINUTE

Es la cantidad máxima de veces que se puede llamar a submitJob por minuto.

Valor

40

Métodos

cancelJob()

Promesa
chrome.printing.cancelJob(
  jobId: string,
  callback?: function,
)

Cancela el trabajo enviado anteriormente.

Parámetros

  • ID de tarea

    string

    Es el ID del trabajo de impresión que se cancelará. Debe ser el mismo ID que se recibió en un SubmitJobResponse.

  • callback

    función opcional

    El parámetro callback se ve de la siguiente manera:

    () => void

Muestra

  • Promise<void>

    Chrome 100 y versiones posteriores

    Las promesas son compatibles con el manifiesto V3 y versiones posteriores, pero se proporcionan devoluciones de llamada para la retrocompatibilidad. No puedes usar ambos en la misma llamada a función. La promesa se resuelve con el mismo tipo que se pasa a la devolución de llamada.

getJobStatus()

Promesa Pendiente
chrome.printing.getJobStatus(
  jobId: string,
  callback?: function,
)

Muestra el estado del trabajo de impresión. Esta llamada fallará con un error de tiempo de ejecución si no existe el trabajo de impresión con el jobId determinado. jobId: Es el ID del trabajo de impresión cuyo estado se mostrará. Debe ser el mismo ID que se recibió en un SubmitJobResponse.

Parámetros

  • ID de tarea

    string

  • callback

    función opcional

    El parámetro callback se ve de la siguiente manera:

    (status: JobStatus) => void

Muestra

  • Promise<JobStatus>

    Las promesas son compatibles con el manifiesto V3 y versiones posteriores, pero se proporcionan devoluciones de llamada para la retrocompatibilidad. No puedes usar ambos en la misma llamada a función. La promesa se resuelve con el mismo tipo que se pasa a la devolución de llamada.

getPrinterInfo()

Promesa
chrome.printing.getPrinterInfo(
  printerId: string,
  callback?: function,
)

Muestra el estado y las capacidades de la impresora en formato CDD. Esta llamada fallará con un error de tiempo de ejecución si no hay impresoras con el ID determinado instaladas.

Parámetros

Muestra

  • Chrome 100 y versiones posteriores

    Las promesas son compatibles con el manifiesto V3 y versiones posteriores, pero se proporcionan devoluciones de llamada para la retrocompatibilidad. No puedes usar ambos en la misma llamada a función. La promesa se resuelve con el mismo tipo que se pasa a la devolución de llamada.

getPrinters()

Promesa
chrome.printing.getPrinters(
  callback?: function,
)

Muestra la lista de impresoras disponibles en el dispositivo. Esto incluye las impresoras agregadas de forma manual, empresariales y descubiertas.

Parámetros

  • callback

    función opcional

    El parámetro callback se ve de la siguiente manera:

    (printers: Printer[]) => void

Muestra

  • Promise<Printer[]>

    Chrome 100 y versiones posteriores

    Las promesas son compatibles con el manifiesto V3 y versiones posteriores, pero se proporcionan devoluciones de llamada para la retrocompatibilidad. No puedes usar ambos en la misma llamada a función. La promesa se resuelve con el mismo tipo que se pasa a la devolución de llamada.

submitJob()

Promesa
chrome.printing.submitJob(
  request: SubmitJobRequest,
  callback?: function,
)

Envía el trabajo para imprimirlo. Si la extensión no aparece en la política PrintingAPIExtensionsAllowlist, se le solicita al usuario que acepte el trabajo de impresión. Antes de Chrome 120, esta función no mostraba una promesa.

Parámetros

Muestra

  • Chrome 100 y versiones posteriores

    Las promesas son compatibles con el manifiesto V3 y versiones posteriores, pero se proporcionan devoluciones de llamada para la retrocompatibilidad. No puedes usar ambos en la misma llamada a función. La promesa se resuelve con el mismo tipo que se pasa a la devolución de llamada.

Eventos

onJobStatusChanged

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

Se activa un evento cuando se cambia el estado del trabajo. Solo se activa para los trabajos creados por esta extensión.

Parámetros

  • callback

    función

    El parámetro callback se ve de la siguiente manera:

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