chrome.printing

Descrição

Use a API chrome.printing para enviar trabalhos de impressão para impressoras instaladas no Chromebook.

Permissões

printing

Disponibilidade

Chrome 81 ou mais recente Somente no ChromeOS

Todos os métodos e eventos chrome.printing exigem que você declare a permissão "printing" no manifesto da extensão. Exemplo:

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

Exemplos

Os exemplos abaixo mostram como usar cada um dos métodos no namespace de impressão. Esse código é copiado ou baseado em api-samples/printing no repositório extensions-samples do GitHub.

cancelJob()

Este exemplo usa o manipulador onJobStatusChanged para ocultar um botão "cancelar" quando o jobStatus não é PENDING nem IN_PROGRESS. Em algumas redes ou quando um Chromebook está conectado diretamente à impressora, esses estados podem passar muito rápido para que o botão "Cancelar" fique visível por tempo suficiente para ser chamado. Este é um exemplo de impressão muito 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()

Um único exemplo é usado para essas funções porque a obtenção de informações da impressora requer um ID, que é recuperado chamando getPrinters(). Este exemplo registra o nome e a descrição da impressora padrão no console. Esta é uma versão simplificada do exemplo de impressão.

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

O método submitJob() requer três coisas.

  • Uma estrutura ticket que especifica quais recursos da impressora serão usados. Se o usuário precisar selecionar entre os recursos disponíveis, recupere-os para uma impressora específica usando getPrinterInfo().
  • Uma estrutura SubmitJobRequest, que especifica a impressora a ser usada e o arquivo ou a data a ser impressa. Essa estrutura contém uma referência à estrutura ticket.
  • Um blob do arquivo ou dos dados a serem impressos.

Chamar submitJob() aciona uma caixa de diálogo pedindo que o usuário confirme a impressão. Use PrintingAPIExtensionsAllowlist para ignorar a confirmação.

Esta é uma versão simplificada do exemplo de impressão. Observe que o ticket está anexado à estrutura SubmitJobRequest (linha 8) e que os dados a serem impressos são convertidos em um blob (linha 10). Receber o ID da impressora (linha 1) é mais complicado na amostra do que mostrado aqui.

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

Impressão em rolo

Este exemplo mostra como criar um tíquete de impressora para impressão contínua (ou em rolo), que geralmente é usada para impressão de recibos. O objeto submitJobRequest para impressão em rolo é o mesmo mostrado no exemplo de submitJob().

Se você precisar mudar o valor padrão para corte de papel, use a tecla vendor_ticket_item. O padrão varia de impressora para impressora. Para mudar o valor, forneça uma matriz com um membro: um objeto cujo id é 'finishings'. O valor pode ser 'trim' para impressoras que cortam o rolo no final da impressão ou 'none' para impressoras que exigem que o trabalho de impressão seja rasgado.

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

Algumas impressoras não são compatíveis com a opção "finishings". Para determinar se a sua impressora faz isso, chame getPrinterInfo() e procure um "display_name" de "finishings/11".

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

Os valores na chave media_size de um tíquete são específicos para cada impressora. Para selecionar um tamanho adequado, chame getPrinterInfo(). O GetPrinterResponse retornado contém uma matriz de tamanhos de mídia compatíveis em "media_size"."option". Escolha uma opção cujo valor "is_continuous_feed" seja verdadeiro. Use os valores de altura e largura para o ingresso.

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

Tipos

GetPrinterInfoResponse

Propriedades

  • capabilities

    objeto opcional

    Recursos da impressora no formato CDD. A propriedade pode estar ausente.

  • status

    O status da impressora.

JobStatus

Status do trabalho de impressão.

Enumeração

"PENDING"
O trabalho de impressão foi recebido no lado do Chrome, mas ainda não foi processado.

"IN_PROGRESS"
O trabalho de impressão é enviado para impressão.

FALHOU
O trabalho de impressão foi interrompido devido a um erro.

"CANCELED"
O trabalho de impressão foi cancelado pelo usuário ou por uma API.

"PRINTED"
O job de impressão foi impresso sem erros.

Printer

Propriedades

  • descrição

    string

    A descrição legível da impressora.

  • ID

    string

    O identificador da impressora, que é exclusivo entre as impressoras no dispositivo.

  • isDefault

    booleano

    A flag que mostra se a impressora atende às regras de DefaultPrinterSelection. Várias impressoras podem ser sinalizadas.

  • nome

    string

    O nome da impressora.

  • recentlyUsedRank

    number optional

    O valor que mostra a frequência com que a impressora foi usada para imprimir no Chrome. Quanto menor o valor, mais recente foi o uso da impressora. O valor mínimo é 0. Um valor ausente indica que a impressora não foi usada recentemente. Esse valor é exclusivo entre as impressoras.

  • source

    A origem da impressora (usuário ou política configurada).

  • uri

    string

    O URI da impressora. Isso pode ser usado por extensões para escolher a impressora para o usuário.

PrinterSource

A origem da impressora.

Enumeração

"USER"
A impressora foi adicionada pelo usuário.

"POLICY"
A impressora foi adicionada por uma política.

PrinterStatus

O status da impressora.

Enumeração

"DOOR_OPEN"
A porta da impressora está aberta. A impressora ainda aceita trabalhos de impressão.

"TRAY_MISSING"
A bandeja da impressora está ausente. A impressora ainda aceita trabalhos de impressão.

"OUT_OF_INK"
A impressora está sem tinta. A impressora ainda aceita trabalhos de impressão.

"OUT_OF_PAPER"
A impressora está sem papel. A impressora ainda aceita trabalhos de impressão.

"OUTPUT_FULL"
A área de saída da impressora (por exemplo, a bandeja) está cheia. A impressora ainda aceita trabalhos de impressão.

"PAPER_JAM"
A impressora está com um atolamento de papel. A impressora ainda aceita trabalhos de impressão.

"GENERIC_ISSUE"
Algum problema genérico. A impressora ainda aceita trabalhos de impressão.

"STOPPED"
A impressora está parada e não imprime, mas ainda aceita trabalhos de impressão.

"INACESSÍVEL"
A impressora está inacessível e não aceita trabalhos de impressão.

"EXPIRED_CERTIFICATE"
O certificado SSL expirou. A impressora aceita jobs, mas eles falham.

"AVAILABLE"
A impressora está disponível.

SubmitJobRequest

Propriedades

  • job

    O trabalho de impressão a ser enviado. Os tipos de conteúdo aceitos são "application/pdf" e "image/png". O Cloud Job Ticket não deve incluir os campos FitToPageTicketItem, PageRangeTicketItem e ReverseOrderTicketItem, porque eles são irrelevantes para a impressão nativa. VendorTicketItem é opcional. Todos os outros campos precisam estar presentes.

SubmitJobResponse

Propriedades

  • jobId

    string opcional

    O ID do trabalho de impressão criado. É um identificador exclusivo entre todos os trabalhos de impressão no dispositivo. Se o status não for OK, o jobId será nulo.

  • O status da solicitação.

SubmitJobStatus

O status da solicitação submitJob.

Enumeração

"OK"
O pedido de impressão enviado foi aceito.

"USER_REJECTED"
O usuário rejeitou a solicitação de trabalho de impressão enviada.

Propriedades

MAX_GET_PRINTER_INFO_CALLS_PER_MINUTE

O número máximo de vezes que getPrinterInfo pode ser chamado por minuto.

Valor

20

MAX_SUBMIT_JOB_CALLS_PER_MINUTE

O número máximo de vezes que submitJob pode ser chamado por minuto.

Valor

40

Métodos

cancelJob()

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

Cancela o job enviado anteriormente.

Parâmetros

  • jobId

    string

    O ID do trabalho de impressão a ser cancelado. Ele precisa ser o mesmo ID recebido em um SubmitJobResponse.

Retorna

  • Promise<void>

    Chrome 100 ou mais

getJobStatus()

Chrome 135 ou mais recente
chrome.printing.getJobStatus(
  jobId: string,
)
: Promise<JobStatus>

Retorna o status do job de impressão. Essa chamada vai falhar com um erro de tempo de execução se o job de impressão com o jobId especificado não existir. jobId: o ID do job de impressão para retornar o status. Ele precisa ser o mesmo ID recebido em um SubmitJobResponse.

Parâmetros

  • jobId

    string

Retorna

getPrinterInfo()

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

Retorna o status e as funcionalidades da impressora no formato CDD. Essa chamada vai falhar com um erro de tempo de execução se nenhuma impressora com o ID especificado estiver instalada.

Parâmetros

  • printerId

    string

Retorna

getPrinters()

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

Retorna a lista de impressoras disponíveis no dispositivo. Isso inclui impressoras adicionadas manualmente, corporativas e descobertas.

Retorna

  • Promise<Printer[]>

    Chrome 100 ou mais

submitJob()

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

Envia o job para impressão. Se a extensão não estiver listada na política PrintingAPIExtensionsAllowlist, o usuário vai precisar aceitar o trabalho de impressão. Antes do Chrome 120, essa função não retornava uma promessa.

Parâmetros

Retorna

Eventos

onJobStatusChanged

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

Evento disparado quando o status do job é alterado. Isso só é acionado para os jobs criados por essa extensão.

Parâmetros

  • callback

    função

    O parâmetro callback tem esta aparência:

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