תיאור
אפשר להשתמש ב-API chrome.printing
כדי לשלוח משימות הדפסה למדפסות שמותקנות ב-Chromebook.
הרשאות
printing
זמינות
מניפסט
כדי להשתמש בכל השיטות והאירועים של chrome.printing
, צריך להצהיר על ההרשאה "printing"
במניפסט של התוסף. לדוגמה:
{
"name": "My extension",
...
"permissions": [
"printing"
],
...
}
דוגמאות
בדוגמאות הבאות מוסבר איך משתמשים בכל אחת מהשיטות במרחב השמות של ההדפסה. הקוד הזה מועתק מ-api-samples/printing או מבוסס עליו במאגר GitHub של extensions-samples.
cancelJob()
בדוגמה הזו נעשה שימוש במטפל 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()
כדי להשתמש בשיטה 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"
המשימה להדפסה נשלחה להדפסה.
"FAILED"
משימה להדפסה הופסקה בגלל שגיאה כלשהי.
"CANCELED"
משימת ההדפסה בוטלה על ידי המשתמש או דרך ה-API.
"PRINTED"
משימת ההדפסה הושלמה ללא שגיאות.
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'
המדפסת מושבתת ולא מדפיסה, אבל עדיין מקבלת משימות להדפסה.
"UNREACHABLE"
לא ניתן להתחבר למדפסת והיא לא מקבלת משימות הדפסה.
"EXPIRED_CERTIFICATE"
פג התוקף של אישור ה-SSL. המדפסת מקבלת משימות אבל הן נכשלות.
'זמינה'
המדפסת זמינה.
SubmitJobRequest
מאפיינים
-
משימה
משימת ההדפסה שרוצים לשלוח. סוג התוכן היחיד שנתמך הוא 'application/pdf', וכרטיס המשימה ב-Cloud לא צריך לכלול את השדות
FitToPageTicketItem
, PageRangeTicketItem
, ReverseOrderTicketItem
ו-VendorTicketItem
כי הם לא רלוונטיים להדפסה מקומית. כל שאר השדות חייבים להופיע.
SubmitJobResponse
מאפיינים
-
jobId
מחרוזת אופציונלי
המזהה של עבודת ההדפסה שנוצרה. זהו מזהה ייחודי מבין כל משימות ההדפסה במכשיר. אם הסטטוס לא OK, הערך של 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
Methods
cancelJob()
chrome.printing.cancelJob(
jobId: string,
callback?: function,
)
ביטול של משימה שנשלחה בעבר.
פרמטרים
-
jobId
מחרוזת
המזהה של משימת ההדפסה שרוצים לבטל. זה צריך להיות אותו מזהה שקיבלתם ב-
SubmitJobResponse
. -
קריאה חוזרת (callback)
פונקציה אופציונלי
הפרמטר
callback
נראה כך:() => void
החזרות
-
Promise<void>
Chrome מגרסה 100 ואילךיש תמיכה ב-Promises רק ב-Manifest V3 ואילך. בפלטפורמות אחרות צריך להשתמש ב-callbacks.
getJobStatus()
chrome.printing.getJobStatus(
jobId: string,
callback?: function,
)
הפונקציה מחזירה את הסטטוס של משימת ההדפסה. הקריאה הזו תיכשל עם שגיאת זמן ריצה אם משימה ההדפסה עם jobId
הנתון לא קיימת. jobId
: המזהה של עבודת ההדפסה שעבורה רוצים לקבל את הסטטוס. זה צריך להיות אותו מזהה שקיבלתם ב-SubmitJobResponse
.
פרמטרים
-
jobId
מחרוזת
-
קריאה חוזרת (callback)
פונקציה אופציונלי
הפרמטר
callback
נראה כך:(status: JobStatus) => void
-
status
-
החזרות
-
Promise<JobStatus>
יש תמיכה ב-Promises רק ב-Manifest V3 ואילך. בפלטפורמות אחרות צריך להשתמש ב-callbacks.
getPrinterInfo()
chrome.printing.getPrinterInfo(
printerId: string,
callback?: function,
)
הפונקציה מחזירה את הסטטוס והיכולות של המדפסת בפורמט CDD. הקריאה הזו תיכשל עם שגיאת זמן ריצה אם לא מותקנות מדפסות עם המזהה הנתון.
פרמטרים
-
printerId
מחרוזת
-
קריאה חוזרת (callback)
פונקציה אופציונלי
הפרמטר
callback
נראה כך:(response: GetPrinterInfoResponse) => void
-
תשובה
-
החזרות
-
Promise<GetPrinterInfoResponse>
Chrome מגרסה 100 ואילךיש תמיכה ב-Promises רק ב-Manifest V3 ואילך. בפלטפורמות אחרות צריך להשתמש ב-callbacks.
getPrinters()
chrome.printing.getPrinters(
callback?: function,
)
הפונקציה מחזירה את רשימת המדפסות הזמינות במכשיר. הרשימה הזו כוללת מדפסות שנוספו באופן ידני, מדפסות ארגוניות ומדפסות שזוהו.
פרמטרים
החזרות
-
Promise<Printer[]>
Chrome מגרסה 100 ואילךיש תמיכה ב-Promises רק ב-Manifest V3 ואילך. בפלטפורמות אחרות צריך להשתמש ב-callbacks.
submitJob()
chrome.printing.submitJob(
request: SubmitJobRequest,
callback?: function,
)
שליחת המשימה להדפסה. אם התוסף לא מופיע במדיניות של PrintingAPIExtensionsAllowlist
, המשתמש יתבקש לאשר את משימת ההדפסה.
לפני Chrome 120, הפונקציה הזו לא החזירה הבטחה (promise).
פרמטרים
-
בקשה
-
קריאה חוזרת (callback)
פונקציה אופציונלי
הפרמטר
callback
נראה כך:(response: SubmitJobResponse) => void
-
תשובה
-
החזרות
-
Promise<SubmitJobResponse>
Chrome מגרסה 100 ואילךיש תמיכה ב-Promises רק ב-Manifest V3 ואילך. בפלטפורמות אחרות צריך להשתמש ב-callbacks.
אירועים
onJobStatusChanged
chrome.printing.onJobStatusChanged.addListener(
callback: function,
)
האירוע מופעל כשהסטטוס של המשימה משתנה. האירוע הזה מופעל רק לגבי המשימות שנוצרו על ידי התוסף הזה.