Описание
Используйте API chrome.printing для отправки заданий на печать на принтеры, установленные на Chromebook.
Разрешения
printingДоступность
Манифест
Для всех методов и событий chrome.printing необходимо указать разрешение "printing" в манифесте расширения . Например:
{
"name": "My extension",
...
"permissions": [
"printing"
],
...
}
Примеры
Приведенные ниже примеры демонстрируют использование каждого из методов в пространстве имен printing. Этот код скопирован из репозитория api-samples/printing в репозитории extensions-samples на GitHub или основан на нем.
cancelJob()
В этом примере обработчик onJobStatusChanged используется для скрытия кнопки «Отмена», когда jobStatus не находится ни в PENDING , ни IN_PROGRESS . Обратите внимание, что в некоторых сетях или при прямом подключении Chromebook к принтеру эти состояния могут сменяться слишком быстро, чтобы кнопка «Отмена» оставалась видимой достаточно долго для вызова. Это значительно упрощенный пример печати.
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() и getPrinterInfo()
Для этих функций используется один пример, поскольку для получения информации о принтере требуется идентификатор принтера, который извлекается путем вызова функции getPrinters() . В этом примере в консоль выводятся имя и описание принтера по умолчанию. Это упрощенная версия примера с печатью.
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()
Для работы метода submitJob() требуются три вещи.
- Структура
ticketопределяющая, какие возможности принтера должны быть использованы. Если пользователю необходимо выбрать из доступных возможностей, вы можете получить их для конкретного принтера с помощьюgetPrinterInfo(). - Структура
SubmitJobRequest, указывающая используемый принтер и файл или дату для печати. Эта структура содержит ссылку на структуруticket. - Файл или данные для печати (в формате Blob).
Вызов метода submitJob() запускает диалоговое окно с запросом подтверждения печати. Используйте PrintingAPIExtensionsAllowlist , чтобы обойти подтверждение.
Это упрощенная версия примера с печатью. Обратите внимание, что ticket прикреплена к структуре SubmitJobRequest (строка 8), а данные для печати преобразуются в двоичный объект (строка 10). Получение идентификатора принтера (строка 1) в примере сложнее, чем показано здесь.
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);
}
});
Рулонная печать
В этом примере показано, как создать чек для непрерывной (или рулонной) печати, которая часто используется при печати чеков. Объект submitJobRequest для рулонной печати идентичен объекту, показанному в примере submitJob() .
Если вам нужно изменить значение по умолчанию для обрезки бумаги, используйте ключ vendor_ticket_item . (Значение по умолчанию различается для разных принтеров.) При включении этот ключ должен представлять собой массив с одним элементом: объектом с id 'finishings' . Значение может быть либо 'trim' для принтеров, которые обрезают рулон в конце печати, либо 'none' для принтеров, которые требуют отрыва рулона бумаги от бумаги после печати.
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}
}
};
Некоторые принтеры не поддерживают опцию "finishings" . Чтобы определить, поддерживает ли ваш принтер эту опцию, вызовите getPrinterInfo() и найдите значение параметра "display_name" равным "finishings/11" .
"vendor_capability": [
{
"display_name": "finishings/11",
"id": "finishings/11",
"type": "TYPED_VALUE",
"typed_value_cap": {
"value_type": "BOOLEAN"
}
},
...
]
Значения в ключе media_size для каждого принтера специфичны для каждого принтера. Чтобы выбрать подходящий размер, вызовите getPrinterInfo() . Возвращаемый объект GetPrinterResponse содержит массив поддерживаемых размеров носителей в поле "media_size"."option" . Выберите параметр, значение "is_continuous_feed" которого равно true. Используйте его значения высоты и ширины для печати чека.
"media_size": {
"option": [
{
"custom_display_name": "",
"is_continuous_feed": true,
"max_height_microns": 2000000,
"min_height_microns": 25400,
"width_microns": 50800
},
...
]
}
Типы
GetPrinterInfoResponse
Характеристики
- возможности
объект необязательный
Возможности принтера в формате CDD . Возможно, это свойство отсутствует.
- статус
Состояние принтера.
JobStatus
Статус задания на печать.
Перечисление
"В ОЖИДАНИИ" "В ХОДЕ ВЫПОЛНЕНИЯ" "НЕУСПЕШНЫЙ" «ОТМЕНЕНО» "ПЕЧАТАНО"
Задание на печать получено в Chrome, но еще не обработано.
Задание на печать отправлено на печать.
Печать была прервана из-за ошибки.
Задание на печать было отменено пользователем или через API.
Печать прошла без ошибок.
Printer
Характеристики
- описание
нить
Удобочитаемое описание принтера.
- идентификатор
нить
Идентификатор принтера; гарантированно является уникальным среди всех принтеров, подключенных к устройству.
- isDefault
логический
Флаг, указывающий, соответствует ли принтер правилам DefaultPrinterSelection . Обратите внимание, что флаг может быть установлен для нескольких принтеров.
- имя
нить
Название принтера.
- recentlyUsedRank
число необязательно
Значение, показывающее, как давно принтер использовался для печати из Chrome. Чем ниже значение, тем раньше использовался принтер. Минимальное значение — 0. Отсутствие значения указывает на то, что принтер не использовался в последнее время. Гарантируется уникальность этого значения среди всех принтеров.
- источник
Источник принтера (настроенный пользователем или политикой).
- ури
нить
URI принтера. Расширения могут использовать его для выбора принтера пользователем.
PrinterSource
Источник питания принтера.
Перечисление
"ПОЛЬЗОВАТЕЛЬ" "ПОЛИТИКА"
Принтер был добавлен пользователем.
Принтер был добавлен посредством политики.
PrinterStatus
Состояние принтера.
Перечисление
"ДВЕРЬ_ОТКРЫТА" "ЛОТОК ОТСУТСТВУЕТ" "Чернила закончились" "Вне_бумаги" "OUTPUT_FULL" "PAPER_JAM" "ОБЩИЙ_ВЫПУСК" "ОСТАНОВЛЕНО" "Недостижимо" "Сертификат просрочен" "ДОСТУПНЫЙ"
Дверца принтера открыта. Принтер по-прежнему принимает задания на печать.
Лоток для бумаги в принтере отсутствует. Принтер по-прежнему принимает задания на печать.
В принтере закончились чернила. Принтер по-прежнему принимает задания на печать.
В принтере закончилась бумага. Принтер по-прежнему принимает задания на печать.
Выходное поле принтера (например, лоток) заполнено. Принтер по-прежнему принимает задания на печать.
В принтере застряла бумага. Принтер продолжает принимать задания на печать.
Какая-то общая проблема. Принтер по-прежнему принимает задания на печать.
Принтер остановлен и не печатает, но при этом продолжает принимать задания на печать.
Принтер недоступен и не принимает задания на печать.
Срок действия SSL-сертификата истёк. Принтер принимает задания, но они завершаются с ошибкой.
Принтер доступен.
SubmitJobRequest
Характеристики
- работа
Задание на печать, которое необходимо отправить. Поддерживаемые типы содержимого: "application/pdf" и "image/png". В облачном задании на печать не следует включать поля
FitToPageTicketItem,PageRangeTicketItemиReverseOrderTicketItemпоскольку они не имеют отношения к стандартной печати.VendorTicketItemявляется необязательным. Все остальные поля должны присутствовать.
SubmitJobResponse
Характеристики
- jobId
строка необязательный
Идентификатор созданного задания печати. Это уникальный идентификатор среди всех заданий печати на устройстве. Если статус не "OK", jobId будет равен null.
- статус
Статус запроса.
SubmitJobStatus
Статус запроса submitJob .
Перечисление
"ХОРОШО" "USER_REJECTED"
Запрос на печать отправлен и принят.
Запрос на отправку задания на печать отклонен пользователем.
Характеристики
MAX_GET_PRINTER_INFO_CALLS_PER_MINUTE
Максимальное количество вызовов функции getPrinterInfo в минуту.
Ценить
20
MAX_SUBMIT_JOB_CALLS_PER_MINUTE
Максимальное количество вызовов функции submitJob в минуту.
Ценить
40
Методы
cancelJob()
chrome.printing.cancelJob(
jobId: string,
callback?: function,
): Promise<void>
Отменяет ранее отправленное задание.
Параметры
- jobId
нить
Идентификатор задания печати, которое нужно отменить. Этот идентификатор должен совпадать с идентификатором, полученным в ответе на запрос
SubmitJobResponse. - перезвонить
функция необязательна
Параметр
callbackвыглядит следующим образом:() => void
Возвраты
Обещание<пустота>
Chrome 100+Поддержка промисов доступна только для Manifest V3 и более поздних версий; для других платформ необходимо использовать колбэки.
getJobStatus()
chrome.printing.getJobStatus(
jobId: string,
callback?: function,
): Promise<JobStatus>
Возвращает статус задания печати. Этот вызов завершится ошибкой времени выполнения, если задание печати с указанным jobId не существует. jobId : Идентификатор задания печати, статус которого необходимо вернуть. Этот идентификатор должен совпадать с идентификатором, полученным в SubmitJobResponse .
Параметры
- jobId
нить
- перезвонить
функция необязательна
Параметр
callbackвыглядит следующим образом:(status: JobStatus) => void
- статус
Возвраты
Promise< JobStatus >
Поддержка промисов доступна только для Manifest V3 и более поздних версий; для других платформ необходимо использовать колбэки.
getPrinterInfo()
chrome.printing.getPrinterInfo(
printerId: string,
callback?: function,
): Promise<GetPrinterInfoResponse>
Возвращает состояние и возможности принтера в формате CDD . Этот вызов завершится ошибкой во время выполнения, если принтеры с указанным идентификатором не установлены.
Параметры
- printerId
нить
- перезвонить
функция необязательна
Параметр
callbackвыглядит следующим образом:(response: GetPrinterInfoResponse) => void
- ответ
Возвраты
Promise< GetPrinterInfoResponse >
Chrome 100+Поддержка промисов доступна только для Manifest V3 и более поздних версий; для других платформ необходимо использовать колбэки.
getPrinters()
chrome.printing.getPrinters(
callback?: function,
): Promise<Printer[]>
Возвращает список доступных принтеров на устройстве. Сюда входят принтеры, добавленные вручную, корпоративные и обнаруженные принтеры.
Параметры
Возвраты
Обещание< Принтер []>
Chrome 100+Поддержка промисов доступна только для Manifest V3 и более поздних версий; для других платформ необходимо использовать колбэки.
submitJob()
chrome.printing.submitJob(
request: SubmitJobRequest,
callback?: function,
): Promise<SubmitJobResponse>
Отправляет задание на печать. Если расширение не указано в политике PrintingAPIExtensionsAllowlist , пользователю предлагается принять задание на печать. До Chrome 120 эта функция не возвращала промис.
Параметры
- перезвонить
функция необязательна
Параметр
callbackвыглядит следующим образом:(response: SubmitJobResponse) => void
- ответ
Возвраты
Promise< SubmitJobResponse >
Chrome 100+Поддержка промисов доступна только для Manifest V3 и более поздних версий; для других платформ необходимо использовать колбэки.
События
onJobStatusChanged
chrome.printing.onJobStatusChanged.addListener(
callback: function,
)
Событие срабатывает при изменении статуса задания. Оно срабатывает только для заданий, созданных этим расширением.
Параметры
- перезвонить
функция
Параметр
callbackвыглядит следующим образом:(jobId: string, status: JobStatus) => void
- jobId
нить
- статус