Mô tả
Sử dụng API chrome.printing
để gửi lệnh in đến máy in đã cài đặt trên Chromebook.
Quyền
printing
Phạm vi cung cấp
Tất cả các 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ụ dưới đây minh hoạ cách sử dụng từng phương thức trong không gian tên in. Đoạn mã này được sao chép từ hoặc dựa trên api-samples/printing trong kho lưu trữ extensions-samples trên GitHub.
cancelJob()
Ví dụ này sử dụng trình xử lý onJobStatusChanged
để ẩn nút "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ể chuyển đổi quá nhanh nên nút huỷ không xuất hiện đủ lâu để có thể được gọi. Đây là ví dụ in đơn giản hoá rất nhiều.
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()
Một ví dụ duy nhất được dùng cho các hàm này vì việc lấy thông tin máy in đòi hỏi phải có mã nhận dạng máy in. Mã nhận dạng này được truy xuất bằng cách gọi getPrinters()
. Ví dụ này 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ụ về hoạt động 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 kiện.
- 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 hiện có, bạn có thể truy xuất các chức năng đó cho một máy in cụ thể bằng cách sử dụnggetPrinterInfo()
. - Một cấu trúc
SubmitJobRequest
, chỉ định máy in cần sử dụng và tệp hoặc ngày cần in. Cấu trúc này chứa một 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 việc 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ụ về hoạt động in. Xin lưu ý rằng ticket
được đính kèm vào cấu trúc SubmitJobRequest
(dòng 8) và dữ liệu cần in được chuyển đổi thành một blob (dòng 10). Việc lấy mã nhận dạng của máy in (dòng 1) phức tạp hơn trong mẫu so với những gì được 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 minh hoạ cách tạo một vé máy in để in liên tục (hoặc in cuộn), thường được dùng để in biên nhận. Đối tượng submitJobRequest
để in cuộn giống với đối tượng được minh hoạ trong ví dụ về submitJob()
.
Nếu bạn cần thay đổi giá trị mặc định cho việc cắt giấy, hãy sử dụng phím vendor_ticket_item
. (Giá trị mặc định sẽ khác nhau tuỳ theo từng máy in.) Để thay đổi giá trị, hãy cung cấp một mảng có một thành phần: 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 giấy ở 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ợ lựa chọn "finishings"
. Để xác định xem máy in của bạn có hỗ trợ tính năng này hay không, hãy gọi đến số getPrinterInfo()
và 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 vé 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 các kích thước phương tiện được hỗ trợ tại "media_size"."option"
. Chọn một lựa chọn có giá trị "is_continuous_feed"
là true. Sử dụng các giá trị chiều cao và chiều rộng của 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ó thể thiếu thuộc tính.
-
trạng thái
Trạng thái của máy in.
JobStatus
Trạng thái của lệnh in.
Enum
"ĐANG CHỜ XỬ LÝ"
Lệnh in đã được nhận trên Chrome nhưng chưa được xử lý.
"IN_PROGRESS"
Đã gửi lệnh in để in.
"THẤT BẠI"
Lệnh in bị gián đoạn do xảy ra lỗi.
"ĐÃ HUỶ"
Người dùng đã huỷ lệnh in hoặc huỷ thông qua API.
"PRINTED"
Lệnh in đã được in mà không gặp lỗi.
Printer
Thuộc tính
-
mô tả
chuỗi
Nội dung mô tả máy in mà con người có thể đọc được.
-
id
chuỗi
Giá trị nhận dạng của máy in; đảm bảo là giá trị nhận dạng duy nhất trong số các máy in trên thiết bị.
-
isDefault
boolean
Cờ cho biết liệu máy in có phù hợp với các quy tắc DefaultPrinterSelection hay không. Xin lưu ý rằng có thể một số máy in sẽ bị gắn cờ.
-
tên
chuỗi
Tên của máy in.
-
recentlyUsedRank
number không bắt buộc
Giá trị cho biết thời gian gần đây nhất mà máy in được dùng để in từ Chrome. Giá trị càng thấp thì máy in được sử dụng càng gần đây. Giá trị tối thiểu là 0. Giá trị bị thiếu cho biết gần đây người dùng không sử dụng máy in. Giá trị này đảm bảo là duy nhất trong số các máy in.
-
source
Nguồn của máy in (người dùng hoặc chính sách đã định cấu hình).
-
uri
chuỗi
URI của máy in. Các tiện ích có thể sử dụng thông tin này để chọn máy in cho người dùng.
PrinterSource
Nguồn của máy in.
Enum
"NGƯỜI DÙNG"
Người dùng đã thêm máy in.
"CHÍNH SÁCH"
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 máy in đang mở. Máy in vẫn chấp nhận các lệnh in.
"TRAY_MISSING"
Máy in bị thiếu khay giấy. 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"
Khay giấy ra của máy in đã đầ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.
"DỪNG"
Máy in đã dừng và không in nhưng vẫn chấp nhận lệnh in.
"UNREACHABLE"
Không thể kết nối với máy in và máy in không chấp nhận lệnh in.
"EXPIRED_CERTIFICATE"
Chứng chỉ SSL đã hết hạn. Máy in chấp nhận lệnh in nhưng không thực hiện được.
"AVAILABLE"
Máy in đang hoạt động.
SubmitJobRequest
Thuộc tính
-
công việc
Lệnh in cần gửi. Các loại nội dung được hỗ trợ là "application/pdf" và "image/png". Cloud Job Ticket không được bao gồm các trường
FitToPageTicketItem
,PageRangeTicketItem
vàReverseOrderTicketItem
vì chúng không liên quan đến tính năng in gốc.VendorTicketItem
là không bắt buộc. Bạn phải cung cấp 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ả các lệnh in trên thiết bị. Nếu trạng thái không phải là OK, thì jobId sẽ là giá trị 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 gửi lệnh in đã được chấp nhận.
"USER_REJECTED"
Yêu cầu gửi lệnh in 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à bạn có thể gọi getPrinterInfo
mỗi phút.
Giá trị
20
MAX_SUBMIT_JOB_CALLS_PER_MINUTE
Số lần tối đa mà bạn có thể gọi submitJob
mỗi phút.
Giá trị
40
Phương thức
cancelJob()
chrome.printing.cancelJob(
jobId: string,
): Promise<void>
Huỷ công việc đã gửi trước đó.
Thông số
-
jobId
chuỗi
Mã nhận dạng của lệnh in cần huỷ. Đây phải là mã nhận dạng giống với mã nhận dạng nhận được trong
SubmitJobResponse
.
Giá trị trả về
-
Promise<void>
Chrome 100 trở lên
getJobStatus()
chrome.printing.getJobStatus(
jobId: string,
): Promise<JobStatus>
Trả về trạng thái của lệnh in. Lệnh gọi này sẽ không thành công và gây ra lỗi thời gian chạy nếu không có lệnh in nào có jobId
đã cho. jobId
: Mã nhận dạng của lệnh in để trả về trạng thái. Đây phải là mã nhận dạng giống với mã nhận dạng nhận được trong SubmitJobResponse
.
Thông số
-
jobId
chuỗi
Giá trị trả về
-
Promise<JobStatus>
getPrinterInfo()
chrome.printing.getPrinterInfo(
printerId: string,
): Promise<GetPrinterInfoResponse>
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ành công 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 đã cho được cài đặt.
Thông số
-
printerId
chuỗi
Giá trị trả về
-
Promise<GetPrinterInfoResponse>
Chrome 100 trở lên
getPrinters()
chrome.printing.getPrinters(): Promise<Printer[]>
Trả về danh sách máy in có sẵn trên thiết bị. Trong đó có máy in được thêm theo cách thủ công, máy in doanh nghiệp và máy in được phát hiện.
Giá trị trả về
-
Promise<Printer[]>
Chrome 100 trở lên
submitJob()
chrome.printing.submitJob(
request: SubmitJobRequest,
): Promise<SubmitJobResponse>
Gửi lệnh in. Nếu tiện ích 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ề một promise.
Thông số
-
request
Giá trị trả về
-
Promise<SubmitJobResponse>
Chrome 100 trở lên
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. Sự kiện này chỉ được kích hoạt cho những công việc do tiện ích này tạo.