Descrição
Use a API chrome.printing
para enviar trabalhos de impressão às impressoras instaladas no Chromebook.
Permissões
printing
Disponibilidade
Todos os métodos e eventos de 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 demonstram o uso de cada um dos métodos no namespace de impressão. Esse código é copiado de ou baseado em api-samples/printing no repositório extensions-samples do GitHub.
cancelJob()
Este exemplo usa o gerenciador onJobStatusChanged
para ocultar um valor "cancel". quando o jobStatus
não for PENDING
nem IN_PROGRESS
. Em algumas redes ou quando um Chromebook está conectado diretamente à impressora, esses estados podem passar rápido demais para que o botão de cancelamento fique visível por tempo suficiente para ser chamado. Este é um exemplo de impressão bastante 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 coleta de informações da impressora requer um ID da impressora, 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 um dos recursos disponíveis, usegetPrinterInfo()
para buscar uma impressora específica. - 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 solicitando 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 a ticket
está anexada à estrutura SubmitJobRequest
(linha 8) e que os dados a serem mostrados são convertidos em um blob (linha 10). Encontrar o ID da impressora (linha 1) é mais complicado no exemplo 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
Neste exemplo, mostramos como criar um tíquete de impressora para impressão contínua (ou em rolo), que geralmente é usada com a impressão de recibos. O objeto submitJobRequest
para a impressão em rolo é o mesmo mostrado no exemplo submitJob()
.
Se você precisar alterar o valor padrão para cortar papel, use a tecla vendor_ticket_item
. O padrão varia de acordo com a impressora. Para alterar o valor, forneça uma matriz com um membro: um objeto em que id
seja 'finishings'
. O valor pode ser 'trim'
para impressoras que cortam o rolo ao final da impressão ou 'none'
para impressoras que exigem a remoção do trabalho de impressão.
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 ela 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 de 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 em que o valor de "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
Status da impressora.
JobStatus
Status do trabalho de impressão.
Enumeração
"PENDENTE"
O trabalho de impressão é recebido pelo Chrome, mas ainda não foi processado.
"IN_PROGRESS"
O trabalho de impressão é enviado para impressão.
"FALHA"
O trabalho de impressão foi interrompido devido a um erro.
"CANCELED"
O trabalho de impressão foi cancelado pelo usuário ou por meio de uma API.
"IMPRESSO"
A tarefa de impressão foi impressa sem erros.
Printer
Propriedades
-
descrição
string
A descrição legível da impressora.
-
id
string
O identificador da impressora. é exclusiva entre as impressoras do dispositivo.
-
isDefault
booleano
A sinalização que mostra se a impressora se encaixa nas regras DefaultPrinterSelection. É possível que várias impressoras sejam sinalizadas.
-
nome
string
O nome da impressora.
-
recentlyUsedRank
número opcional
O valor que indica há quanto tempo a impressora foi usada para impressão no Chrome. Quanto menor o valor, mais recente a impressora foi usada. O valor mínimo é 0. O 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 fonte da impressora.
Enumeração
"USER"
A impressora foi adicionada pelo usuário.
"POLICY"
A impressora foi adicionada usando a política.
PrinterStatus
Status da impressora.
Enumeração
"DOOR_OPEN"
A porta da impressora está aberta. Ela ainda aceita trabalhos de impressão.
"TRAY_MISSING"
A bandeja da impressora está ausente. Ela ainda aceita trabalhos de impressão.
"OUT_OF_INK"
A impressora está sem tinta. Ela ainda aceita trabalhos de impressão.
"OUT_OF_PAPER"
A impressora está sem papel. Ela ainda aceita trabalhos de impressão.
"OUTPUT_FULL"
A área de saída da impressora (por exemplo, a bandeja) está cheia. Ela ainda aceita trabalhos de impressão.
"PAPER_JAM"
A impressora tem um atolamento de papel. Ela ainda aceita trabalhos de impressão.
"GENERIC_ISSUE"
Algum problema genérico. Ela ainda aceita trabalhos de impressão.
"STOPPED"
A impressora foi interrompida e não imprime, mas ainda aceita trabalhos de impressão.
"UNREACHABLE"
A impressora está inacessível e não aceita trabalhos de impressão.
"EXPIRED_CERTIFICATE"
O certificado SSL expirou. A impressora aceita os trabalhos, mas eles falham.
"DISPONÍVEL"
A impressora está disponível.
SubmitJobRequest
Propriedades
-
job
A tarefa de impressão a ser enviada. O único tipo de conteúdo aceito é "application/pdf", e o Cloud Job Ticket não pode incluir os campos
FitToPageTicketItem
,PageRangeTicketItem
,ReverseOrderTicketItem
eVendorTicketItem
porque eles são irrelevantes para a impressão nativa. Todos os outros campos precisam estar presentes.
SubmitJobResponse
Propriedades
-
jobId
string opcional
O ID do trabalho de impressão criado. Esse é um identificador exclusivo entre todos os trabalhos de impressão do 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"
A solicitação de trabalho de impressão enviada foi aceita.
"USER_REJECTED"
A solicitação de trabalho de impressão enviada foi rejeitada pelo usuário.
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,
callback?: function,
)
Cancela o job enviado anteriormente.
Parâmetros
-
jobId
string
O ID do trabalho de impressão a ser cancelado. Precisa ser o mesmo ID recebido em uma
SubmitJobResponse
. -
callback
função opcional
O parâmetro
callback
tem esta aparência:() => void
Retorna
-
Promessa<void>
Chrome 100 ou mais recenteO Manifesto V3 e versões mais recentes oferecem suporte a promessas, mas callbacks são fornecidos para a compatibilidade com versões anteriores. Não é possível usar ambos na mesma chamada de função. A promessa é resolvida com o mesmo tipo passado ao retorno de chamada.
getPrinterInfo()
chrome.printing.getPrinterInfo(
printerId: string,
callback?: function,
)
Retorna o status e os recursos da impressora no formato CDD. Esta chamada falhará com um erro de tempo de execução se nenhuma impressora com determinado ID estiver instalada.
Parâmetros
-
printerId
string
-
callback
função opcional
O parâmetro
callback
tem esta aparência:(response: GetPrinterInfoResponse) => void
-
resposta
-
Retorna
-
Promise<GetPrinterInfoResponse>
Chrome 100 ou mais recenteO Manifesto V3 e versões mais recentes oferecem suporte a promessas, mas callbacks são fornecidos para a compatibilidade com versões anteriores. Não é possível usar ambos na mesma chamada de função. A promessa é resolvida com o mesmo tipo passado ao retorno de chamada.
getPrinters()
chrome.printing.getPrinters(
callback?: function,
)
Retorna a lista de impressoras disponíveis no dispositivo. Isso inclui impressoras novas, corporativas e adicionadas manualmente.
Parâmetros
-
callback
função opcional
O parâmetro
callback
tem esta aparência:(printers: Printer[]) => void
-
impressoras
-
Retorna
-
Promessa<Printer[]>
Chrome 100 ou mais recenteO Manifesto V3 e versões mais recentes oferecem suporte a promessas, mas callbacks são fornecidos para a compatibilidade com versões anteriores. Não é possível usar ambos na mesma chamada de função. A promessa é resolvida com o mesmo tipo passado ao retorno de chamada.
submitJob()
chrome.printing.submitJob(
request: SubmitJobRequest,
callback?: function,
)
Envia o trabalho para impressão. Se a extensão não estiver listada na política PrintingAPIExtensionsAllowlist
, o usuário receberá uma solicitação para aceitar o trabalho de impressão.
Antes do Chrome 120, essa função não retornava uma promessa.
Parâmetros
-
solicitação
-
callback
função opcional
O parâmetro
callback
tem esta aparência:(response: SubmitJobResponse) => void
-
resposta
-
Retorna
-
Promise<SubmitJobResponse>
Chrome 100 ou mais recenteO Manifesto V3 e versões mais recentes oferecem suporte a promessas, mas callbacks são fornecidos para a compatibilidade com versões anteriores. Não é possível usar ambos na mesma chamada de função. A promessa é resolvida com o mesmo tipo passado ao retorno de chamada.
Eventos
onJobStatusChanged
chrome.printing.onJobStatusChanged.addListener(
callback: function,
)
Evento disparado quando o status do trabalho é alterado. Isso só é disparado para as vagas criadas por essa extensão.