хром.печать

Описание

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

Разрешения

printing

Доступность

Chrome 81+ (только ChromeOS)

Манифест

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

Promise Chrome 135+
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

Возвраты

  • Chrome 100+

    Поддержка промисов доступна только для Manifest V3 и более поздних версий; для других платформ необходимо использовать колбэки.

getPrinters()

Обещать
chrome.printing.getPrinters(
  callback?: function,
)
: Promise<Printer[]>

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

Параметры

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

    функция необязательна

    Параметр callback выглядит следующим образом:

    (printers: Printer[]) => void

Возвраты

  • Обещание< Принтер []>

    Chrome 100+

    Поддержка промисов доступна только для Manifest V3 и более поздних версий; для других платформ необходимо использовать колбэки.

submitJob()

Обещать
chrome.printing.submitJob(
  request: SubmitJobRequest,
  callback?: function,
)
: Promise<SubmitJobResponse>

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

Параметры

Возвраты

  • Promise< SubmitJobResponse >

    Chrome 100+

    Поддержка промисов доступна только для Manifest V3 и более поздних версий; для других платформ необходимо использовать колбэки.

События

onJobStatusChanged

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

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

Параметры

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

    функция

    Параметр callback выглядит следующим образом:

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