Descrição
Use a API chrome.printing
para enviar trabalhos de impressão para impressoras instaladas no Chromebook.
Permissões
printing
Disponibilidade
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 usandogetPrinterInfo()
. - 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 à estruturaticket
. - 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
eReverseOrderTicketItem
, 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.
- status
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.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
-
Promise<JobStatus>
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
-
Promise<GetPrinterInfoResponse>
Chrome 100 ou mais
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
- solicitação
Retorna
-
Promise<SubmitJobResponse>
Chrome 100 ou mais
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.