browser.printing

Opis

Użyj interfejsu API chrome.printing, aby wysyłać zadania drukowania do drukarek zainstalowanych na Chromebooku.

Uprawnienia

printing

Dostępność

Chrome 81 lub nowsza browser.* od Chrome 148 Tylko ChromeOS

Wszystkie metody i zdarzenia browser.printing wymagają zadeklarowania uprawnienia "printing" w pliku manifestu rozszerzenia. Na przykład:

{
  "name": "My extension",
  ...
  "permissions": [
    "printing"
  ],
  ...
}

Przykłady

Przykłady poniżej pokazują, jak używać poszczególnych metod w przestrzeni nazw drukowania. Ten kod został skopiowany z repozytorium extensions-samples na GitHubie (api-samples/printing) lub jest na nim oparty.

cancelJob()

W tym przykładzie użyto modułu obsługi onJobStatusChanged, aby ukryć przycisk „Anuluj”, gdy jobStatus nie jest ani PENDING, ani IN_PROGRESS. Pamiętaj, że w niektórych sieciach lub gdy Chromebook jest podłączony bezpośrednio do drukarki, te stany mogą zmieniać się zbyt szybko, aby przycisk anulowania był widoczny wystarczająco długo. To bardzo uproszczony przykład drukowania.

browser.printing.onJobStatusChanged.addListener((jobId, status) => {
  const cancelButton = document.getElementById("cancelButton");
  cancelButton.addEventListener('click', () => {
    browser.printing.cancelJob(jobId).then((response) => {
      if (response !== undefined) {
        console.log(response.status);
      }
      if (browser.runtime.lastError !== undefined) {
        console.log(browser.runtime.lastError.message);
      }
    });
  });
  if (status !== "PENDING" && status !== "IN_PROGRESS") {
    cancelButton.style.visibility = 'hidden';
  } else {
    cancelButton.style.visibility = 'visible';
  }
}

getPrinters() and getPrinterInfo()

W przypadku tych funkcji używany jest pojedynczy przykład, ponieważ uzyskanie informacji o drukarce wymaga identyfikatora drukarki, który jest pobierany przez wywołanie getPrinters(). W tym przykładzie nazwa i opis drukarki domyślnej są rejestrowane w konsoli. To jest uproszczona wersja przykładu drukowania.

​​const printers = await browser.printing.getPrinters();
const defaultPrinter = printers.find((printer) => {
  const printerInfo = await browser.printing.getPrinterInfo(printer.id);
  return printerInfo.isDefault;
}
console.log(`Default printer: ${defaultPrinter.name}.\n\t${defaultPrinter.description}`);

submitJob()

Metoda submitJob() wymaga 3 elementów.

  • Struktura ticket, która określa, które funkcje drukarki mają być używane. Jeśli użytkownik musi wybrać jedną z dostępnych funkcji, możesz je pobrać dla konkretnej drukarki za pomocą getPrinterInfo().
  • Struktura SubmitJobRequest, która określa drukarkę, której należy użyć, oraz plik lub dane do wydrukowania. Ta struktura zawiera odwołanie do struktury ticket.
  • Obiekt blob pliku lub danych do wydrukowania.

Wywołanie submitJob() powoduje wyświetlenie okna z prośbą o potwierdzenie drukowania. Aby pominąć potwierdzenie, użyj PrintingAPIExtensionsAllowlist.

To jest uproszczona wersja przykładu drukowania. Zauważ, że ticket jest dołączony do struktury SubmitJobRequest (wiersz 8), a dane do wydrukowania są konwertowane na obiekt blob (wiersz 10). Uzyskanie identyfikatora drukarki (wiersz 1) jest w przykładzie bardziej skomplikowane niż pokazano tutaj.

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'
    });
  }
};

browser.printing.submitJob(submit>JobRequest, (response) = {
  if (response !== undefined) {
    console.log(response.status);
  }
  if (browser.runtime.lastError !== undefined) {
    console.log(browser.runtime.lastError.message);
  }
});

Drukowanie na rolce

Ten przykład pokazuje, jak utworzyć bilet drukarki do drukowania ciągłego (lub rolkowego), które jest często używane do drukowania paragonów. Obiekt submitJobRequest do drukowania z rolki jest taki sam jak w przykładzie submitJob().

Jeśli chcesz zmienić domyślną wartość cięcia papieru, użyj klawisza vendor_ticket_item. (Ustawienie domyślne różni się w zależności od drukarki). Aby zmienić wartość, podaj tablicę z jednym elementem: obiektem, którego id to 'finishings'. Wartość może wynosić 'trim' w przypadku drukarek, które odcinają rolkę po zakończeniu drukowania, lub 'none' w przypadku drukarek, które wymagają oderwania wydruku.

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}
  }
};

Niektóre drukarki nie obsługują opcji "finishings". Aby sprawdzić, czy Twoja drukarka obsługuje tę funkcję, wywołaj getPrinterInfo() i poszukaj "display_name" o wartości "finishings/11".

"vendor_capability": [
  {
    "display_name": "finishings/11",
    "id": "finishings/11",
    "type": "TYPED_VALUE",
    "typed_value_cap": {
      "value_type": "BOOLEAN"
    }
  },
  ...
]

Wartości w kluczu media_size zgłoszenia są specyficzne dla każdej drukarki. Aby wybrać odpowiedni rozmiar, zadzwoń pod numer getPrinterInfo(). Zwrócony obiekt GetPrinterResponse zawiera tablicę obsługiwanych rozmiarów multimediów w "media_size"."option". Wybierz opcję, której wartość "is_continuous_feed" jest prawdziwa. Użyj jego wartości wysokości i szerokości dla biletu.

"media_size": {
  "option": [
  {
    "custom_display_name": "",
    "is_continuous_feed": true,
    "max_height_microns": 2000000,
    "min_height_microns": 25400,
    "width_microns": 50800
  },
  ...
  ]
}

Typy

GetPrinterInfoResponse

Właściwości

  • możliwości

    object opcjonalny

    Możliwości drukarki w formacie CDD. Może brakować właściwości.

  • status

    Stan drukarki.

JobStatus

Stan zadania drukowania.

Typ wyliczeniowy

"PENDING"
Zadanie drukowania zostało odebrane po stronie Chrome, ale nie zostało jeszcze przetworzone.

"IN_PROGRESS"
Zadanie drukowania zostało wysłane do druku.

"FAILED"
Zadanie drukowania zostało przerwane z powodu błędu.

"CANCELED"
Zadanie drukowania zostało anulowane przez użytkownika lub za pomocą interfejsu API.

"PRINTED"
Zadanie drukowania zostało wydrukowane bez błędów.

Printer

Właściwości

  • opis

    tekst

    Zrozumiały dla człowieka opis drukarki.

  • id

    tekst

    Identyfikator drukarki; gwarantowany jako unikalny wśród drukarek na urządzeniu.

  • isDefault

    wartość logiczna

    Flaga wskazująca, czy drukarka jest zgodna z regułami DefaultPrinterSelection. Pamiętaj, że może zostać oznaczonych kilka drukarek.

  • nazwa

    tekst

    Nazwa drukarki.

  • recentlyUsedRank

    number optional

    Wartość wskazująca, jak niedawno drukarka była używana do drukowania z Chrome. Im niższa wartość, tym później drukarka była używana. Minimalna wartość to 0. Brak wartości oznacza, że drukarka nie była ostatnio używana. Ta wartość jest unikalna dla każdej drukarki.

  • źródło

    źródło drukarki (skonfigurowane przez użytkownika lub zasady);

  • uri

    tekst

    Identyfikator URI drukarki. Rozszerzenia mogą używać tej zasady do wybierania drukarki dla użytkownika.

PrinterSource

Źródło drukarki.

Typ wyliczeniowy

"USER"
Drukarka została dodana przez użytkownika.

„ZASADA”
Drukarka została dodana za pomocą zasady.

PrinterStatus

Stan drukarki.

Typ wyliczeniowy

"DOOR_OPEN"
Pokrywa drukarki jest otwarta. Drukarka nadal akceptuje zadania drukowania.

"TRAY_MISSING"
Brak podajnika drukarki. Drukarka nadal akceptuje zadania drukowania.

"OUT_OF_INK"
W drukarce skończył się tusz. Drukarka nadal akceptuje zadania drukowania.

"OUT_OF_PAPER"
W drukarce skończył się papier. Drukarka nadal akceptuje zadania drukowania.

"OUTPUT_FULL"
Obszar odbioru drukarki (np. taca) jest pełny. Drukarka nadal akceptuje zadania drukowania.

"PAPER_JAM"
W drukarce zaciął się papier. Drukarka nadal akceptuje zadania drukowania.

"GENERIC_ISSUE"
Ogólny problem. Drukarka nadal akceptuje zadania drukowania.

"STOPPED"
drukarka jest zatrzymana i nie drukuje, ale nadal akceptuje zadania drukowania.

"UNREACHABLE"
Drukarka jest nieosiągalna i nie akceptuje zadań drukowania.

"EXPIRED_CERTIFICATE"
Certyfikat SSL wygasł. Drukarka przyjmuje zadania, ale ich nie wykonuje.

"AVAILABLE"
Drukarka jest dostępna.

SubmitJobRequest

Właściwości

  • zadanie

    Zadanie drukowania, które ma zostać przesłane. Obsługiwane typy treści to „application/pdf” i „image/png”. Cloud Job Ticket nie powinien zawierać pól FitToPageTicketItem, PageRangeTicketItem i ReverseOrderTicketItem, ponieważ nie są one istotne w przypadku drukowania natywnego. VendorTicketItem jest opcjonalny. Wszystkie pozostałe pola muszą być obecne.

SubmitJobResponse

Właściwości

  • jobId

    ciąg znaków opcjonalny

    Identyfikator utworzonego zadania drukowania. Jest to unikalny identyfikator wśród wszystkich zadań drukowania na urządzeniu. Jeśli stan nie jest OK, jobId będzie mieć wartość null.

  • Stan żądania.

SubmitJobStatus

Stan prośby submitJob.

Typ wyliczeniowy

„OK”
Żądanie wysłania zadania drukowania zostało zaakceptowane.

"USER_REJECTED"
Żądanie wysłania zadania drukowania zostało odrzucone przez użytkownika.

Właściwości

MAX_GET_PRINTER_INFO_CALLS_PER_MINUTE

Maksymalna liczba wywołań metody getPrinterInfo na minutę.

Wartość

20

MAX_SUBMIT_JOB_CALLS_PER_MINUTE

Maksymalna liczba wywołań metody submitJob na minutę.

Wartość

40

Metody

cancelJob()

browser.printing.cancelJob(
  jobId: string,
)
: Promise<void>

Anuluje przesłane wcześniej zadanie.

Parametry

  • jobId

    tekst

    Identyfikator zadania drukowania, które chcesz anulować. Powinien być taki sam jak identyfikator otrzymany w SubmitJobResponse.

Zwroty

  • thought Promise<void>

    Chrome 100 lub nowsza browser.* od Chrome 148

getJobStatus()

Chrome 135 lub nowsza browser.* od Chrome 148
browser.printing.getJobStatus(
  jobId: string,
)
: Promise<JobStatus>

Zwraca stan zadania drukowania. Jeśli zadanie drukowania o podanym identyfikatorze jobId nie istnieje, to wywołanie zakończy się błędem środowiska wykonawczego. jobId: identyfikator zadania drukowania, którego stan ma zostać zwrócony. Powinien być taki sam jak identyfikator otrzymany w SubmitJobResponse.

Parametry

  • jobId

    tekst

Zwroty

getPrinterInfo()

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

Zwraca stan i możliwości drukarki w formacie CDD. Jeśli nie zainstalowano drukarek o podanym identyfikatorze, to wywołanie zakończy się błędem środowiska wykonawczego.

Parametry

  • printerId

    tekst

Zwroty

getPrinters()

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

Zwraca listę dostępnych drukarek na urządzeniu. Obejmuje to drukarki dodane ręcznie, drukarki firmowe i wykryte drukarki.

Zwroty

  • Promise<Printer[]>

    Chrome 100 lub nowsza browser.* od Chrome 148

submitJob()

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

Przesyła zadanie do drukowania. Jeśli rozszerzenia nie ma na liście w zasadzie PrintingAPIExtensionsAllowlist, użytkownik zostanie poproszony o zaakceptowanie zadania drukowania. W wersjach Chrome wcześniejszych niż 120 ta funkcja nie zwracała obietnicy.

Parametry

Zwroty

Wydarzenia

onJobStatusChanged

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

Zdarzenie wywoływane po zmianie stanu zadania. Jest ono wywoływane tylko w przypadku zadań utworzonych przez to rozszerzenie.

Parametry

  • callback

    funkcja

    Parametr callback wygląda tak:

    (jobId: string, status: JobStatus) =& gt;void