Mô tả
Sử dụng API chrome.printing
để gửi lệnh in đến máy in được cài đặt trên Chromebook.
Quyền
printing
Phạm vi cung cấp
Tệp kê khai
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ụ dưới đây 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 extensions-samples.
cancelJob()
Ví dụ này sử dụng trình xử lý onJobStatusChanged
để ẩn nút "cancel" (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 kết nối trực tiếp với máy in, các trạng thái này có thể trôi qua quá nhanh khiến nút huỷ không hiển thị đủ lâu để được gọi. Đâ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()
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 cần có mã máy in, được truy xuất bằng cách gọi getPrinters()
. Ví dụ này ghi 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 cần sử dụng và tệp hoặc ngày cần 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. 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 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 phiếu in cho máy in để in liên tục (hoặc 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 hiển thị cho ví dụ submitJob()
.
Nếu bạn cần thay đổi giá trị mặc định cho thao tác cắt giấy, hãy sử dụng phím vendor_ticket_item
. (Chế độ mặc định sẽ khác nhau tuỳ theo máy in.) Khi được đưa vào, khoá này phải là 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ó hỗ trợ hay không, hãy gọi 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é là 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 công việc 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.
"KHÔNG THÀNH CÔNG"
Công việc 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 gặp 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 các 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 thời điểm gần đây nhất bạn sử dụng máy in để in từ Chrome. 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. Giá trị bị thiếu cho biết máy in không được sử dụng gần đây. Giá trị này được đảm bảo là duy nhất giữa 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 máy in. 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
"USER"
Máy in do 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"
Khay giấy 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.
"ĐÃ DỪNG"
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 công việc nhưng không thực hiện được.
"CÓ"
Máy in có sẵn.
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 (Phiếu công việc trên đám mây) không được chứa các trường
FitToPageTicketItem
,PageRangeTicketItem
,ReverseOrderTicketItem
vàVendorTicketItem
vì các trường này không liên quan đến tính năng 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_REJECTED"
Người dùng từ chối yêu cầu công việc in đã gửi.
Thuộc tính
MAX_GET_PRINTER_INFO_CALLS_PER_MINUTE
Số lần tối đa có thể gọi getPrinterInfo
mỗi phút.
Giá trị
20
MAX_SUBMIT_JOB_CALLS_PER_MINUTE
Số lần tối đa có thể gọi submitJob
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 đó.
Thông số
-
jobId
string
Mã của 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
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 chỉ được hỗ trợ cho Manifest V3 trở lên, các nền tảng khác cần sử dụng lệnh gọi lại.
getPrinterInfo()
chrome.printing.getPrinterInfo(
printerId: string,
callback?: function,
)
Trả về trạng thái và 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.
Thông 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 chỉ được hỗ trợ cho Tệp kê khai V3 trở lên, các nền tảng khác cần sử dụng lệnh gọi lại.
getPrinters()
chrome.printing.getPrinters(
callback?: function,
)
Trả về danh sách máy in có sẵn trên thiết bị. Danh sách này bao gồm 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.
Thông số
Giá trị trả về
-
Cam kết<Printer[]>
Chrome 100 trở lênLời hứa chỉ được hỗ trợ cho Tệp kê khai V3 trở lên, các nền tảng khác cần sử dụng lệnh gọi lại.
submitJob()
chrome.printing.submitJob(
request: SubmitJobRequest,
callback?: function,
)
Gửi công việc để 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ề một lời hứa.
Thông số
-
request
-
lệnh 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 chỉ được hỗ trợ cho Manifest V3 trở lên, các nền tảng khác cần sử dụng 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. Lệnh này chỉ được kích hoạt cho các công việc do tiện ích này tạo ra.