Opis
Użyj interfejsu chrome.printing API, aby wysyłać zadania drukowania do drukarek zainstalowanych na Chromebooku.
Uprawnienia
printingDostępność
Plik manifestu
Wszystkie metody i zdarzenia chrome.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ć każdej z metod w przestrzeni nazw drukowania. Ten kod został skopiowany z repozytorium api-samples/printing w repozytorium GitHub extensions-samples lub na nim oparty.
cancelJob()
W tym przykładzie użyto funkcji obsługi onJobStatusChanged, aby ukryć przycisk „Anuluj”, gdy wartość jobStatus nie jest równa 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, aby można było go kliknąć. To bardzo uproszczony przykład drukowania.
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() and getPrinterInfo()
W przypadku tych funkcji używamy jednego przykładu, ponieważ uzyskanie informacji o drukarce wymaga identyfikatora drukarki, który jest pobierany przez wywołanie funkcji 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 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()
Metoda submitJob() wymaga 3 rzeczy.
- Struktura
ticketokreślająca, 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ą funkcjigetPrinterInfo(). SubmitJobRequeststruktura, która określa drukarkę, której należy użyć, oraz plik lub datę do wydrukowania; Ta struktura zawiera odwołanie do strukturyticket.- Blob pliku lub danych do wydrukowania.
Wywołanie submitJob() powoduje wyświetlenie okna dialogowego z prośbą o potwierdzenie drukowania. Użyj PrintingAPIExtensionsAllowlist, aby pominąć potwierdzenie.
To jest uproszczona wersja przykładu drukowania. Zwróć uwagę, że element ticket jest dołączony do struktury SubmitJobRequest (wiersz 8), a dane do wydrukowania są przekształcane w obiekt blob (wiersz 10). Pobieranie 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'
});
}
};
chrome.printing.submitJob(submitJobRequest, (response) => {
if (response !== undefined) {
console.log(response.status);
}
if (chrome.runtime.lastError !== undefined) {
console.log(chrome.runtime.lastError.message);
}
});
Drukowanie z rolki
Ten przykład pokazuje, jak utworzyć bilet drukarki do drukowania ciągłego (lub z rolki), 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. (Wartość domyślna różni się w zależności od drukarki). Jeśli ten klucz jest uwzględniony, musi być tablicą z 1 elementem: obiektem, którego klucz id ma wartość '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 ma taką funkcję, zadzwoń pod numer 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 klucza media_size w przypadku zgłoszenia są specyficzne dla każdej drukarki. Aby wybrać odpowiedni rozmiar, kliknij 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" to prawda. Użyj wartości wysokości i szerokości w przypadku 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,
obiekt opcjonalny
możliwości drukarki w formacie CDD; Właściwość może być nieobecna.
-
status
Stan drukarki.
JobStatus
Stan zadania drukowania.
Typ wyliczeniowy
„PENDING”
Zadanie drukowania zostało odebrane przez Chrome, ale nie zostało jeszcze przetworzone.
„IN_PROGRESS”
Zadanie drukowania zostało wysłane do drukowania.
„FAILED”
Zadanie drukowania zostało przerwane z powodu błędu.
„ANULOWANO”
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
ciąg znaków
Zrozumiały dla człowieka opis drukarki.
-
id
ciąg znaków
Identyfikator drukarki; gwarantowany jako unikalny wśród drukarek na urządzeniu.
-
isDefault
Wartość logiczna
Flaga wskazująca, czy drukarka spełnia reguły DefaultPrinterSelection. Pamiętaj, że może być oznaczonych kilka drukarek.
-
nazwa
ciąg znaków
Nazwa drukarki.
-
recentlyUsedRank
number opcjonalny
Wartość wskazująca, jak niedawno drukarka była używana do drukowania z Chrome. Im niższa wartość, tym niedawno drukarka była używana. Minimalna wartość to 0. Brak wartości oznacza, że drukarka nie była ostatnio używana. Ta wartość jest gwarantowana jako unikalna wśród drukarek.
-
źródło
Źródło drukarki (skonfigurowane przez użytkownika lub za pomocą zasad).
-
uri
ciąg znaków
Identyfikator URI drukarki. Rozszerzenia mogą używać tej wartości do wybierania drukarki dla użytkownika.
PrinterSource
Źródło drukarki.
Typ wyliczeniowy
„USER”
Drukarka została dodana przez użytkownika.
„POLICY”
Drukarka została dodana za pomocą zasady.
PrinterStatus
Stan drukarki.
Typ wyliczeniowy
„DOOR_OPEN”
Drzwiczki drukarki są otwarte. Drukarka nadal akceptuje zadania drukowania.
„TRAY_MISSING”
Brak tacy drukarki. Drukarka nadal akceptuje zadania drukowania.
„OUT_OF_INK”
W drukarce skończył się atrament. 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. zasobnik) 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.
„ZATRZYMANA”
Drukarka jest zatrzymana i nie drukuje, ale nadal akceptuje zadania drukowania.
„NIEDOSTĘPNA”
Drukarka jest niedostępna i nie akceptuje zadań drukowania.
„EXPIRED_CERTIFICATE”
Certyfikat SSL wygasł. Drukarka przyjmuje zadania, ale ich realizacja się nie udaje.
„DOSTĘPNA”
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”. Bilet zadania w chmurze nie powinien zawierać pól
FitToPageTicketItem,PageRangeTicketItemiReverseOrderTicketItem, ponieważ nie mają one znaczenia w przypadku drukowania natywnego. Opcjonalny składnik toVendorTicketItem. 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, identyfikator zadania będzie miał wartość null.
-
status
Stan żądania.
SubmitJobStatus
Stan prośby submitJob.
Typ wyliczeniowy
„OK”
Wysłane zadanie drukowania zostało zaakceptowane.
„USER_REJECTED”
Wysłane zadanie drukowania zostało odrzucone przez użytkownika.
Właściwości
MAX_GET_PRINTER_INFO_CALLS_PER_MINUTE
Maksymalna liczba wywołań funkcji getPrinterInfo na minutę.
Wartość
20
MAX_SUBMIT_JOB_CALLS_PER_MINUTE
Maksymalna liczba wywołań funkcji submitJob na minutę.
Wartość
40
Metody
cancelJob()
chrome.printing.cancelJob(
jobId: string,
callback?: function,
): Promise<void>
Anuluje wcześniej przesłane zadanie.
Parametry
-
jobId
ciąg znaków
Identyfikator zadania drukowania do anulowania. Powinien to być ten sam identyfikator, który został otrzymany w
SubmitJobResponse. -
callback
funkcja opcjonalna
Parametr
callbackwygląda tak:() => void
Zwroty
-
Promise<void>
Chrome 100 lub nowszaObietnice są obsługiwane tylko w przypadku platformy Manifest V3 i nowszych. Inne platformy muszą używać wywołań zwrotnych.
getJobStatus()
chrome.printing.getJobStatus(
jobId: string,
callback?: function,
): Promise<JobStatus>
Zwraca stan zadania drukowania. Jeśli zadanie drukowania o podanym identyfikatorze jobId nie istnieje, wywołanie zakończy się błędem wykonania. jobId: Identyfikator zadania drukowania, którego stan ma zostać zwrócony. Powinien to być ten sam identyfikator, który został otrzymany w SubmitJobResponse.
Parametry
-
jobId
ciąg znaków
-
callback
funkcja opcjonalna
Parametr
callbackwygląda tak:(status: JobStatus) => void
-
status
-
Zwroty
-
Promise<JobStatus>
Obietnice są obsługiwane tylko w przypadku platformy Manifest V3 i nowszych. Inne platformy muszą używać wywołań zwrotnych.
getPrinterInfo()
chrome.printing.getPrinterInfo(
printerId: string,
callback?: function,
): Promise<GetPrinterInfoResponse>
Zwraca stan i możliwości drukarki w formacie CDD. Jeśli nie ma zainstalowanych drukarek o podanym identyfikatorze, wywołanie zakończy się niepowodzeniem z błędem środowiska wykonawczego.
Parametry
-
printerId
ciąg znaków
-
callback
funkcja opcjonalna
Parametr
callbackwygląda tak:(response: GetPrinterInfoResponse) => void
-
odpowiedź
-
Zwroty
-
Promise<GetPrinterInfoResponse>
Chrome 100 lub nowszaObietnice są obsługiwane tylko w przypadku platformy Manifest V3 i nowszych. Inne platformy muszą używać wywołań zwrotnych.
getPrinters()
chrome.printing.getPrinters(
callback?: function,
): Promise<Printer[]>
Zwraca listę drukarek dostępnych na urządzeniu. Dotyczy to drukarek dodanych ręcznie, drukarek firmowych i drukarek wykrytych.
Parametry
Zwroty
-
Promise<Printer[]>
Chrome 100 lub nowszaObietnice są obsługiwane tylko w przypadku platformy Manifest V3 i nowszych. Inne platformy muszą używać wywołań zwrotnych.
submitJob()
chrome.printing.submitJob(
request: SubmitJobRequest,
callback?: function,
): Promise<SubmitJobResponse>
Przesyła zadanie do drukowania. Jeśli rozszerzenie nie jest wymienione 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
-
żądanie
-
callback
funkcja opcjonalna
Parametr
callbackwygląda tak:(response: SubmitJobResponse) => void
-
odpowiedź
-
Zwroty
-
Promise<SubmitJobResponse>
Chrome 100 lub nowszaObietnice są obsługiwane tylko w przypadku platformy Manifest V3 i nowszych. Inne platformy muszą używać wywołań zwrotnych.
Wydarzenia
onJobStatusChanged
chrome.printing.onJobStatusChanged.addListener(
callback: function,
)
Zdarzenie wywoływane po zmianie stanu zadania. Jest ona wywoływana tylko w przypadku zadań utworzonych przez to rozszerzenie.