хром.печать

Описание

Используйте API chrome.printing для отправки заданий печати на принтеры, установленные на Chromebook.

Разрешения

printing

Доступность

Только Chrome OS 81+

Для всех методов и событий 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()

Хром 135+
chrome.printing.getJobStatus(
  jobId: string,
)
: Promise<JobStatus>

Возвращает статус задания печати. Этот вызов завершится ошибкой выполнения, если задание печати с заданным jobId не существует. jobId : идентификатор задания печати, статус которого необходимо вернуть. Этот идентификатор должен совпадать с идентификатором, полученным в ответе SubmitJobResponse .

Параметры

  • jobId

    нить

Возврат

getPrinterInfo()

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

Возвращает состояние и возможности принтера в формате CDD . Этот вызов завершится ошибкой выполнения, если принтеры с указанным идентификатором не установлены.

Параметры

  • идентификатор принтера

    нить

Возврат

getPrinters()

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

Возвращает список доступных принтеров на устройстве. Включает добавленные вручную, корпоративные и обнаруженные принтеры.

Возврат

submitJob()

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

Отправляет задание на печать. Если расширение не указано в политике PrintingAPIExtensionsAllowlist , пользователю предлагается принять задание на печать. До Chrome 120 эта функция не возвращала обещание.

Параметры

Возврат

События

onJobStatusChanged

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

Событие срабатывает при изменении статуса задания. Срабатывает только для заданий, созданных этим расширением.

Параметры

  • перезвонить

    функция

    Параметр callback выглядит так:

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