Описание
Используйте API chrome.printing
для отправки заданий печати на принтеры, установленные на Chromebook.
Разрешения
printing
Доступность
Для всех методов и событий chrome.printing
требуется объявить разрешение "printing"
в манифесте расширения . Например:
{ "name": "My extension", ... "permissions": [ "printing" ], ... }
Примеры
Примеры ниже демонстрируют использование каждого из методов пространства имён print. Этот код скопирован из файла 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
. - Часть файла или данных для печати.
Вызов 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
Состояние принтера.
Перечисление
"ДВЕРЬ_ОТКРЫТА" "TRAY_MISSING" "OUT_OF_INK" "OUT_OF_PAPER" "OUTPUT_FULL" "PAPER_JAM" "GENERIC_ISSUE" «ОСТАНОВЛЕНО» «НЕДОСТУПНЫЙ» "EXPIRED_CERTIFICATE" "ДОСТУПНЫЙ"
Дверца принтера открыта. Принтер продолжает принимать задания на печать.
Лоток принтера отсутствует. Принтер по-прежнему принимает задания на печать.
В принтере закончились чернила. Принтер всё ещё принимает задания на печать.
В принтере закончилась бумага. Принтер всё ещё принимает задания на печать.
Выходной лоток принтера (например, лоток) заполнен. Принтер продолжает принимать задания на печать.
В принтере застряла бумага. Принтер продолжает принимать задания на печать.
Какая-то общая проблема. Принтер по-прежнему принимает задания на печать.
Принтер остановлен и не печатает, но продолжает принимать задания на печать.
Принтер недоступен и не принимает задания на печать.
Срок действия SSL-сертификата истёк. Принтер принимает задания, но они не выполняются.
Принтер доступен.
SubmitJobRequest
Характеристики
- работа
Задание на печать, которое необходимо отправить. Поддерживаемые типы содержимого: "application/pdf" и "image/png". В тикете задания Cloud не должно быть полей
FitToPageTicketItem
,PageRangeTicketItem
иReverseOrderTicketItem
так как они не имеют отношения к встроенной печати.VendorTicketItem
не является обязательным. Все остальные поля должны быть заполнены.
SubmitJobResponse
Характеристики
- jobId
строка необязательная
Идентификатор созданного задания печати. Это уникальный идентификатор среди всех заданий печати на устройстве. Если статус не «OK», jobId будет равен нулю.
- статус
Статус запроса.
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,
): Promise<void>
Отменяет ранее отправленную работу.
Параметры
- jobId
нить
Идентификатор задания печати, которое необходимо отменить. Он должен совпадать с идентификатором, полученным в ответе
SubmitJobResponse
.
Возврат
Обещание<void>
Хром 100+
getJobStatus()
chrome.printing.getJobStatus(
jobId: string,
): Promise<JobStatus>
Возвращает статус задания печати. Этот вызов завершится ошибкой выполнения, если задание печати с заданным jobId
не существует. jobId
: идентификатор задания печати, статус которого необходимо вернуть. Этот идентификатор должен совпадать с идентификатором, полученным в ответе SubmitJobResponse
.
Параметры
- jobId
нить
Возврат
Обещание< Статус работы >
getPrinterInfo()
chrome.printing.getPrinterInfo(
printerId: string,
): Promise<GetPrinterInfoResponse>
Возвращает состояние и возможности принтера в формате CDD . Этот вызов завершится ошибкой выполнения, если принтеры с указанным идентификатором не установлены.
Параметры
- идентификатор принтера
нить
Возврат
Обещание< GetPrinterInfoResponse >
Хром 100+
getPrinters()
chrome.printing.getPrinters(): Promise<Printer[]>
Возвращает список доступных принтеров на устройстве. Включает добавленные вручную, корпоративные и обнаруженные принтеры.
Возврат
Обещание< Принтер []>
Хром 100+
submitJob()
chrome.printing.submitJob(
request: SubmitJobRequest,
): Promise<SubmitJobResponse>
Отправляет задание на печать. Если расширение не указано в политике PrintingAPIExtensionsAllowlist
, пользователю предлагается принять задание на печать. До Chrome 120 эта функция не возвращала обещание.
Параметры
- запрос
Возврат
Обещание< ОтправитьОтветНаЗадание >
Хром 100+
События
onJobStatusChanged
chrome.printing.onJobStatusChanged.addListener(
callback: function,
)
Событие срабатывает при изменении статуса задания. Срабатывает только для заданий, созданных этим расширением.