תיאור
אפשר להשתמש ב-API של chrome.printing
כדי לשלוח משימות הדפסה למדפסות שמותקנות ב-Chromebook.
הרשאות
printing
זמינות
בכל השיטות והאירועים של chrome.printing
, נדרשת הצהרה על ההרשאה "printing"
במניפסט של התוסף. לדוגמה:
{
"name": "My extension",
...
"permissions": [
"printing"
],
...
}
דוגמאות
הדוגמאות הבאות ממחישות את השימוש בכל אחת מהשיטות במרחב השמות להדפסה. הקוד הזה מועתק מהapi-samples/printing במאגר GitHub של דוגמאות תוספים, או מבוסס עליו.
cancelJob()
בדוגמה הזו נעשה שימוש ב-handler של onJobStatusChanged
כדי להסתיר 'ביטול'. כשהערך של jobStatus
הוא לא PENDING
או IN_PROGRESS
. שים לב: ברשתות מסוימות או כאשר ה-Chromebook מחובר ישירות למדפסת, המצבים האלה עשויים לעבור מהר מדי עד שלחצן הביטול יהיה גלוי למשך זמן ארוך מספיק כדי שניתן יהיה לקרוא אותו. זו דוגמה להדפסה פשוטה מאוד.
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()
דוגמה אחת משמשת לפונקציות האלה, כי כדי לקבל פרטי מדפסת צריך מזהה מדפסת, שמאוחזר על ידי קריאה ל-getPrinters()
. בדוגמה הזו, השם והתיאור של מדפסת ברירת המחדל נרשמים במסוף. זוהי גרסה פשוטה יותר של הדוגמה להדפסה.
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()
ל-method submitJob()
נדרשים שלושה דברים.
- מבנה
ticket
שמציין באילו יכולות של המדפסת יש להשתמש. אם המשתמש צריך לבחור מתוך יכולות זמינות, ניתן לאחזר אותן עבור מדפסת ספציפית באמצעותgetPrinterInfo()
. - מבנה של
SubmitJobRequest
, שמציין את המדפסת שבה צריך להשתמש ואת הקובץ או התאריך שיש להדפיס. המבנה הזה מכיל הפניה למבנהticket
. - blob של הקובץ או הנתונים להדפסה.
קריאה אל submitJob()
מפעילה תיבת דו-שיח שמבקשת מהמשתמש לאשר את ההדפסה. כדי לעקוף את האישור, משתמשים בPrintingAPIExtensionsAllowlist
.
זוהי גרסה פשוטה יותר של הדוגמה להדפסה. חשוב לשים לב שה-ticket
מצורף למבנה SubmitJobRequest
(שורה 8) ושהנתונים להדפסה מומרים ל-blob (שורה 10). קבלת מזהה המדפסת (שורה 1) מורכבת יותר בדוגמה ממה שמוצג כאן.
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);
}
});
הדפסה מגלגלת
בדוגמה הזו מוסבר איך לפתח כרטיס מדפסת עבור הדפסה רציפה (או גליל), שמשמש לעיתים קרובות בהדפסת קבלות. האובייקט submitJobRequest
להדפסת נתונים זהה לזה שמוצג בדוגמה submitJob()
.
אם צריך לשנות את ערך ברירת המחדל לחיתוך נייר, אפשר להשתמש במפתח vendor_ticket_item
. (ברירת המחדל משתנה בין מדפסות). כדי לשנות את הערך, צריך לספק מערך עם איבר אחד: אובייקט שה-id
שלו הוא 'finishings'
. הערך יכול להיות 'trim'
אם מדובר במדפסות שחותכות את הגלילה בסוף ההדפסה או 'none'
עבור מדפסות שמחייבות חיתוך של משימת ההדפסה.
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}
}
};
חלק מהמדפסות לא תומכות באפשרות "finishings"
. כדי לבדוק אם המדפסת שלכם פועלת, צריך להתקשר אל getPrinterInfo()
ולחפש "display_name"
של "finishings/11"
.
"vendor_capability": [
{
"display_name": "finishings/11",
"id": "finishings/11",
"type": "TYPED_VALUE",
"typed_value_cap": {
"value_type": "BOOLEAN"
}
},
...
]
הערכים במפתח media_size
של כרטיס הם ספציפיים לכל מדפסת. כדי לבחור גודל שיחה מתאים getPrinterInfo()
. הערך GetPrinterResponse
שמוחזר מכיל מערך של גודלי מדיה נתמכים בפורמט "media_size"."option"
. צריך לבחור אפשרות שהערך של "is_continuous_feed"
שלה הוא True. משתמשים בערכי הגובה והרוחב של הכרטיס.
"media_size": {
"option": [
{
"custom_display_name": "",
"is_continuous_feed": true,
"max_height_microns": 2000000,
"min_height_microns": 25400,
"width_microns": 50800
},
...
]
}
סוגים
GetPrinterInfoResponse
מאפיינים
-
יכולות
אובייקט אופציונלי
יכולות מדפסת בפורמט CDD. יכול להיות שהנכס חסר.
-
status
סטטוס המדפסת.
JobStatus
הסטטוס של משימת ההדפסה.
Enum
"בהמתנה"
משימת הדפסה התקבלה ב-Chrome אבל היא עדיין לא עברה עיבוד.
"IN_PROGRESS"
משימת ההדפסה נשלחה להדפסה.
"נכשל"
משימת ההדפסה הופסקה עקב שגיאה.
"בוטל"
המשתמש ביטל את משימת ההדפסה או באמצעות API.
'דפוס'
משימת ההדפסה הודפסה ללא שגיאות.
Printer
מאפיינים
-
תיאור
מחרוזת
תיאור המדפסת קריא לאנשים.
-
id [מזהה]
מחרוזת
מזהה המדפסת; להיות ייחודי מבין המדפסות שבמכשיר.
-
isDefault
בוליאני
הדגל שמציין אם המדפסת תואמת לכללי DefaultPrinterSelection. לתשומת ליבכם: ייתכן שמספר מדפסות סומנו.
-
שם
מחרוזת
שם המדפסת.
-
recentlyUsedRank
מספר אופציונלי
הערך שמציג את מידת השימוש האחרונה במדפסת לצורך הדפסה מ-Chrome. ככל שהערך נמוך יותר, כך השימוש במדפסת נעשה עדכני יותר. הערך המינימלי הוא 0. הערך חסר מציין שהמדפסת לא הייתה בשימוש לאחרונה. מובטח שהערך הזה יהיה ייחודי מבין המדפסות.
-
source
מקור המדפסת (מוגדר על ידי משתמש או מדיניות).
-
URI
מחרוזת
ה-URI של המדפסת. תוספים יכולים להגדיר את המדפסת בשביל המשתמש.
PrinterSource
מקור המדפסת.
Enum
"USER"
המדפסת נוספה על ידי המשתמש.
"POLICY"
המדפסת נוספה דרך המדיניות.
PrinterStatus
סטטוס המדפסת.
Enum
"DOOR_OPEN"
דלת המדפסת פתוחה. המדפסת עדיין מקבלת משימות הדפסה.
"TRAY_MISSING"
המגש של המדפסת חסר. המדפסת עדיין מקבלת משימות הדפסה.
"OUT_OF_INK"
חסר הדיו במדפסת. המדפסת עדיין מקבלת משימות הדפסה.
"OUT_OF_PAPER"
חסר נייר במדפסת. המדפסת עדיין מקבלת משימות הדפסה.
"OUTPUT_FULL"
אזור הפלט של המדפסת (למשל מגש) מלא. המדפסת עדיין מקבלת משימות הדפסה.
"PAPER_JAM"
במדפסת יש חסימת נייר. המדפסת עדיין מקבלת משימות הדפסה.
"GENERIC_ISSUE"
בעיה כללית מסוימת. המדפסת עדיין מקבלת משימות הדפסה.
"STOPPED"
המדפסת מופסקת, לא מדפיסה אבל עדיין מקבלת משימות הדפסה.
'לא ניתנת להתאמה'
לא ניתן לגשת למדפסת והיא לא מקבלת משימות הדפסה.
"EXPIRED_CERTIFICATE"
פג התוקף של אישור ה-SSL. המדפסת מקבלת משימות אבל הן נכשלות.
"AVAILABLE"
המדפסת זמינה.
SubmitJobRequest
מאפיינים
-
משימה
משימת ההדפסה שיש לשלוח. סוג התוכן היחיד שנתמך הוא 'application/pdf', וכרטיס ה-Cloud Job Ticket לא יכול לכלול את השדות
FitToPageTicketItem
,PageRangeTicketItem
,ReverseOrderTicketItem
ו-VendorTicketItem
כי הם לא רלוונטיים להדפסה במקור. כל שאר השדות צריכים להיכלל.
SubmitJobResponse
מאפיינים
-
jobId
מחרוזת אופציונלי
המזהה של משימת ההדפסה שנוצרה. זהו מזהה ייחודי בין כל משימות ההדפסה במכשיר. אם הסטטוס הוא לא בסדר, מזהה המשימה יהיה null.
-
status
סטטוס הבקשה.
SubmitJobStatus
הסטטוס של בקשת submitJob
.
Enum
"אישור"
הבקשה שנשלחה למשימת הדפסה אושרה.
"USER_REJECTED"
הבקשה של משימת ההדפסה שנשלחה נדחתה על ידי המשתמש.
מאפיינים
MAX_GET_PRINTER_INFO_CALLS_PER_MINUTE
מספר הפעמים המקסימלי שניתן לקרוא ל-getPrinterInfo
בדקה.
ערך
20
MAX_SUBMIT_JOB_CALLS_PER_MINUTE
מספר הפעמים המקסימלי שניתן לקרוא ל-submitJob
בדקה.
ערך
40
שיטות
cancelJob()
chrome.printing.cancelJob(
jobId: string,
callback?: function,
)
מבטל משרה שנשלחה בעבר.
פרמטרים
-
jobId
מחרוזת
המזהה של משימת ההדפסה שצריך לבטל. הוא צריך להיות זהה למזהה שהתקבל ב-
SubmitJobResponse
. -
קריאה חוזרת (callback)
פונקציה אופציונלית
הפרמטר
callback
נראה כך:() => void
החזרות
-
הבטחה<Empty>
Chrome 100+הבטחות נתמכות במניפסט מגרסה V3 ואילך, אבל ניתנות קריאות חוזרות (callback) בשביל תאימות לאחור. לא ניתן להשתמש בשתיהן באותה בקשה להפעלת פונקציה. ההבטחה הזו מצליחה לפתור את הבעיה באותו סוג שמועבר לקריאה החוזרת.
getPrinterInfo()
chrome.printing.getPrinterInfo(
printerId: string,
callback?: function,
)
הפונקציה מחזירה את הסטטוס והיכולות של המדפסת בפורמט CDD. השיחה תיכשל ותוצג שגיאת זמן ריצה אם לא מותקנות מדפסות עם המזהה הנתון.
פרמטרים
-
printerId
מחרוזת
-
קריאה חוזרת (callback)
פונקציה אופציונלית
הפרמטר
callback
נראה כך:(response: GetPrinterInfoResponse) => void
-
תשובה
-
החזרות
-
Promise<GetPrinterInfoResponse>
Chrome 100+הבטחות נתמכות במניפסט מגרסה V3 ואילך, אבל ניתנות קריאות חוזרות (callback) בשביל תאימות לאחור. לא ניתן להשתמש בשתיהן באותה בקשה להפעלת פונקציה. ההבטחה הזו מצליחה לפתור את הבעיה באותו סוג שמועבר לקריאה החוזרת.
getPrinters()
chrome.printing.getPrinters(
callback?: function,
)
מחזירה את רשימת המדפסות הזמינות במכשיר. זה כולל מדפסות שנוספו באופן ידני, מדפסות ארגוניות ומדפסות שנמצאו.
פרמטרים
החזרות
-
התחייבות<מדפסת[]>
Chrome 100+הבטחות נתמכות במניפסט מגרסה V3 ואילך, אבל ניתנות קריאות חוזרות (callback) בשביל תאימות לאחור. לא ניתן להשתמש בשתיהן באותה בקשה להפעלת פונקציה. ההבטחה הזו מצליחה לפתור את הבעיה באותו סוג שמועבר לקריאה החוזרת.
submitJob()
chrome.printing.submitJob(
request: SubmitJobRequest,
callback?: function,
)
המשימה תישלח להדפסה. אם התוסף לא מופיע במדיניות PrintingAPIExtensionsAllowlist
, המשתמש יתבקש לאשר את משימת ההדפסה.
לפני Chrome 120, הפונקציה הזו לא החזירה הבטחה.
פרמטרים
-
בקשה
-
קריאה חוזרת (callback)
פונקציה אופציונלית
הפרמטר
callback
נראה כך:(response: SubmitJobResponse) => void
-
תשובה
-
החזרות
-
Promise<SubmitJobResponse>
Chrome 100+הבטחות נתמכות במניפסט מגרסה V3 ואילך, אבל ניתנות קריאות חוזרות (callback) בשביל תאימות לאחור. לא ניתן להשתמש בשתיהן באותה בקשה להפעלת פונקציה. ההבטחה הזו מצליחה לפתור את הבעיה באותו סוג שמועבר לקריאה החוזרת.
אירועים
onJobStatusChanged
chrome.printing.onJobStatusChanged.addListener(
callback: function,
)
האירוע מופעל כשהסטטוס של המשימה משתנה. האפשרות הזו מופעלת רק עבור המשימות שנוצרו על ידי התוסף הזה.