Mô tả
Dùng API chrome.printing
để gửi lệnh in tới các máy in đã cài đặt trên Chromebook.
Quyền
printing
Phạm vi cung cấp
Mọi phương thức và sự kiện chrome.printing
đều yêu cầu bạn khai báo quyền "printing"
trong tệp kê khai tiện ích. Ví dụ:
{
"name": "My extension",
...
"permissions": [
"printing"
],
...
}
Ví dụ
Các ví dụ bên dưới minh hoạ cách sử dụng từng phương thức trong không gian tên in. Mã này được sao chép từ hoặc dựa trên api-samples/printing trong kho lưu trữ GitHub của tiện ích mẫu.
cancelJob()
Ví dụ này sử dụng trình xử lý onJobStatusChanged
để ẩn thông báo "huỷ" khi jobStatus
không phải là PENDING
hoặc IN_PROGRESS
. Xin lưu ý rằng trên một số mạng hoặc khi Chromebook được kết nối trực tiếp với máy in, các trạng thái này có thể vượt qua quá nhanh khiến nút huỷ hiển thị đủ lâu để gọi được. Đây là ví dụ in được đơn giản hoá đáng kể.
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()
Các hàm này có một ví dụ duy nhất vì việc nhận thông tin máy in yêu cầu mã nhận dạng máy in được truy xuất bằng cách gọi getPrinters()
. Ví dụ này sẽ ghi nhật ký tên và nội dung mô tả của máy in mặc định vào bảng điều khiển. Đây là phiên bản đơn giản của ví dụ in.
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()
Phương thức submitJob()
yêu cầu 3 điều.
- Cấu trúc
ticket
chỉ định những chức năng của máy in sẽ được sử dụng. Nếu người dùng cần chọn trong số các chức năng có sẵn, bạn có thể truy xuất các chức năng đó cho một máy in cụ thể bằnggetPrinterInfo()
. - Cấu trúc
SubmitJobRequest
chỉ định máy in để sử dụng và tệp hoặc ngày để in. Cấu trúc này chứa tham chiếu đến cấu trúcticket
. - Một blob của tệp hoặc dữ liệu cần in.
Việc gọi submitJob()
sẽ kích hoạt một hộp thoại yêu cầu người dùng xác nhận in. Sử dụng PrintingAPIExtensionsAllowlist
để bỏ qua bước xác nhận.
Đây là phiên bản đơn giản của ví dụ in. Vui lòng lưu ý ticket
được gắn với cấu trúc SubmitJobRequest
(dòng 8) và dữ liệu cần in được chuyển đổi thành blob (dòng 10). Việc lấy mã nhận dạng máy in (dòng 1) trong mẫu sẽ phức tạp hơn so với cách minh hoạ ở đây.
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);
}
});
In cuộn
Ví dụ này cho biết cách tạo vé máy in để in liên tục (hoặc in theo cuộn), thường dùng với tính năng in hoá đơn. Đối tượng submitJobRequest
để in dạng cuộn giống như đối tượng được thể hiện trong ví dụ submitJob()
.
Nếu bạn cần thay đổi giá trị mặc định để cắt giấy, hãy dùng phím vendor_ticket_item
. (Chế độ mặc định sẽ khác nhau tuỳ theo máy in.) Để thay đổi giá trị, hãy cung cấp một mảng có một phần tử: một đối tượng có id
là 'finishings'
. Giá trị có thể là 'trim'
đối với máy in cắt cuộn ở cuối quá trình in hoặc 'none'
đối với máy in yêu cầu xé lệnh in.
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}
}
};
Một số máy in không hỗ trợ tuỳ chọn "finishings"
. Để xác định xem máy in của bạn có hoạt động hay không, hãy gọi getPrinterInfo()
rồi tìm "display_name"
của "finishings/11"
.
"vendor_capability": [
{
"display_name": "finishings/11",
"id": "finishings/11",
"type": "TYPED_VALUE",
"typed_value_cap": {
"value_type": "BOOLEAN"
}
},
...
]
Các giá trị trong khoá media_size
của phiếu yêu cầu hỗ trợ là giá trị dành riêng cho từng máy in. Để chọn kích thước phù hợp, hãy gọi getPrinterInfo()
. GetPrinterResponse
được trả về chứa một mảng kích thước nội dung nghe nhìn được hỗ trợ tại "media_size"."option"
. Chọn một tuỳ chọn có giá trị "is_continuous_feed"
là true. Sử dụng giá trị chiều cao và chiều rộng cho vé.
"media_size": {
"option": [
{
"custom_display_name": "",
"is_continuous_feed": true,
"max_height_microns": 2000000,
"min_height_microns": 25400,
"width_microns": 50800
},
...
]
}
Loại
GetPrinterInfoResponse
Thuộc tính
-
chức năng
đối tượng không bắt buộc
Các chức năng của máy in ở định dạng CDD. Cơ sở lưu trú này có thể bị thiếu.
-
trạng thái
Trạng thái của máy in.
JobStatus
Trạng thái của lệnh in.
Enum
"PENDING"
Lệnh in đã nhận được trên Chrome nhưng chưa được xử lý.
"IN_PROGRESS"
Lệnh in đã được gửi để in.
"FAILED"
Lệnh in bị gián đoạn do một số lỗi.
"CANCELED"
Lệnh in đã bị người dùng hoặc API huỷ.
"PrintED"
Lệnh in đã được in mà không có lỗi nào.
Printer
Thuộc tính
-
description
string
Nội dung mô tả mà con người có thể đọc được về máy in.
-
id
string
Giá trị nhận dạng của máy in; đảm bảo là duy nhất trong số các máy in trên thiết bị.
-
isDefault
boolean
Cờ cho biết máy in có phù hợp với quy tắc DefaultPrinterSelection hay không. Lưu ý rằng có nhiều máy in có thể bị gắn cờ.
-
tên
string
Tên máy in.
-
recentlyUsedRank
số không bắt buộc
Giá trị cho biết lần gần đây máy in được sử dụng để in từ Chrome như thế nào. Giá trị càng thấp thì máy in càng được sử dụng gần đây. Giá trị tối thiểu là 0. Thiếu giá trị cho biết máy in không được sử dụng gần đây. Giá trị này đảm bảo là riêng biệt trong số các máy in.
-
nguồn
Nguồn của máy in (người dùng hoặc chính sách đã định cấu hình).
-
uri
string
URI của máy in. Tiện ích có thể sử dụng lựa chọn này để chọn máy in cho người dùng.
PrinterSource
Nguồn của máy in.
Enum
"USER"
Máy in đã được người dùng thêm.
"POLICY"
Máy in đã được thêm thông qua chính sách.
PrinterStatus
Trạng thái của máy in.
Enum
"DOOR_OPEN"
Cửa của máy in đang mở. Máy in vẫn chấp nhận các lệnh in.
"TRAY_MISSING"
Khay của máy in bị thiếu. Máy in vẫn chấp nhận các lệnh in.
"OUT_OF_INK"
Máy in đã hết mực. Máy in vẫn chấp nhận các lệnh in.
"OUT_OF_PAPER"
Máy in đã hết giấy. Máy in vẫn chấp nhận các lệnh in.
"OUTPUT_FULL"
Khu vực đầu ra của máy in (ví dụ: khay) đã đầy. Máy in vẫn chấp nhận các lệnh in.
"PAPER_JAM"
Máy in bị kẹt giấy. Máy in vẫn chấp nhận các lệnh in.
"GENERIC_ISSUE"
Một số vấn đề chung. Máy in vẫn chấp nhận các lệnh in.
"STOPPED"
Máy in đã dừng và không in nhưng vẫn chấp nhận lệnh in.
"UNREACHABLE"
Máy in không kết nối được và không nhận lệnh in.
"EXPIRED_CERTIFICATE"
Chứng chỉ SSL đã hết hạn. Máy in chấp nhận lệnh nhưng không thực hiện được.
"AVAILABLE"
Có máy in.
SubmitJobRequest
Thuộc tính
-
việc làm
Lệnh in cần gửi. Loại nội dung duy nhất được hỗ trợ là "application/pdf" và Cloud Job Ticket không được bao gồm các trường
FitToPageTicketItem
,PageRangeTicketItem
,ReverseOrderTicketItem
vàVendorTicketItem
vì các trường này không liên quan đến dịch vụ in gốc. Bạn phải điền vào tất cả các trường khác.
SubmitJobResponse
Thuộc tính
-
jobId
chuỗi không bắt buộc
Mã của lệnh in đã tạo. Đây là giá trị nhận dạng duy nhất trong số tất cả lệnh in trên thiết bị. Nếu trạng thái không OK, JobId sẽ là rỗng.
-
trạng thái
Trạng thái của yêu cầu.
SubmitJobStatus
Trạng thái của yêu cầu submitJob
.
Enum
"OK"
Yêu cầu về lệnh in đã gửi đã được chấp nhận.
"USER_}"
Yêu cầu lệnh in đã gửi đã bị người dùng từ chối.
Thuộc tính
MAX_GET_PRINTER_INFO_CALLS_PER_MINUTE
Số lần tối đa mà getPrinterInfo
có thể được gọi mỗi phút.
Giá trị
20
MAX_SUBMIT_JOB_CALLS_PER_MINUTE
Số lần tối đa mà submitJob
có thể được gọi mỗi phút.
Giá trị
40
Phương thức
cancelJob()
chrome.printing.cancelJob(
jobId: string,
callback?: function,
)
Huỷ công việc đã gửi trước đó.
Tham số
-
jobId
string
Mã lệnh in cần huỷ. Đây phải là mã nhận dạng giống với mã nhận được trong
SubmitJobResponse
. -
số gọi lại
hàm không bắt buộc
Tham số
callback
sẽ có dạng như sau:() => void
Giá trị trả về
-
Lời hứa<vô hiệu>
Chrome 100 trở lênLời hứa được hỗ trợ trong Manifest V3 trở lên nhưng lệnh gọi lại được cung cấp cho khả năng tương thích ngược. Bạn không thể sử dụng cả hai trong cùng một lệnh gọi hàm. Chiến lược phát hành đĩa đơn Promise phân giải cùng loại được truyền đến lệnh gọi lại.
getPrinterInfo()
chrome.printing.getPrinterInfo(
printerId: string,
callback?: function,
)
Trả về trạng thái và các chức năng của máy in ở định dạng CDD. Lệnh gọi này sẽ không thực hiện được kèm theo lỗi thời gian chạy nếu không có máy in nào có mã nhận dạng nhất định được cài đặt.
Tham số
-
printerId
string
-
số gọi lại
hàm không bắt buộc
Tham số
callback
sẽ có dạng như sau:(response: GetPrinterInfoResponse) => void
-
phản hồi
-
Giá trị trả về
-
Promise<GetPrinterInfoResponse>
Chrome 100 trở lênLời hứa được hỗ trợ trong Manifest V3 trở lên nhưng lệnh gọi lại được cung cấp cho khả năng tương thích ngược. Bạn không thể sử dụng cả hai trong cùng một lệnh gọi hàm. Chiến lược phát hành đĩa đơn Promise phân giải cùng loại được truyền đến lệnh gọi lại.
getPrinters()
chrome.printing.getPrinters(
callback?: function,
)
Trả về danh sách các máy in hiện có trên thiết bị. Điều này bao gồm cả máy in được thêm, máy in Enterprise và máy in được khám phá theo cách thủ công.
Tham số
Giá trị trả về
-
Cam kết<Printer[]>
Chrome 100 trở lênLời hứa được hỗ trợ trong Manifest V3 trở lên nhưng lệnh gọi lại được cung cấp cho khả năng tương thích ngược. Bạn không thể sử dụng cả hai trong cùng một lệnh gọi hàm. Chiến lược phát hành đĩa đơn Promise phân giải cùng loại được truyền đến lệnh gọi lại.
submitJob()
chrome.printing.submitJob(
request: SubmitJobRequest,
callback?: function,
)
Gửi lệnh in. Nếu tiện ích này không có trong chính sách PrintingAPIExtensionsAllowlist
, thì người dùng sẽ được nhắc chấp nhận lệnh in.
Trước Chrome 120, hàm này không trả về lời hứa hẹn.
Tham số
-
request
-
số gọi lại
hàm không bắt buộc
Tham số
callback
sẽ có dạng như sau:(response: SubmitJobResponse) => void
-
phản hồi
-
Giá trị trả về
-
Promise<SubmitJobResponse>
Chrome 100 trở lênLời hứa được hỗ trợ trong Manifest V3 trở lên nhưng lệnh gọi lại được cung cấp cho khả năng tương thích ngược. Bạn không thể sử dụng cả hai trong cùng một lệnh gọi hàm. Chiến lược phát hành đĩa đơn Promise phân giải cùng loại được truyền đến lệnh gọi lại.
Sự kiện
onJobStatusChanged
chrome.printing.onJobStatusChanged.addListener(
callback: function,
)
Sự kiện được kích hoạt khi trạng thái của công việc thay đổi. Điều này chỉ được kích hoạt cho các công việc do tiện ích này tạo ra.