דלג לתוכן

להדפיס בלי חלון ההדפסה: לומדים איך Chrome עושה את זה

הרעיון הראשון היה למסור את ההדפסה למערכת ההפעלה ולתת לאנשים להסתדר עם האפשרויות. זו הייתה טעות. כך צמצמנו את הבחירות לשלוש, וכך עזרה לנו קריאת הקוד של Chromium.

5 דקות קריאה

מדפסת מוציאה ערימת דפים ריקים באור חם, ויד, שרואים אותה מאחור, מרימה את הדף העליון.

5 דקות קריאה

בגרסה מוקדמת של ההדפסה שלנו ב־Windows היה באג שיכולנו לשחזר: אחרי לחיצה על ביטול או אישור, חלון ההדפסה נפתח שוב ונערם מעל התוכנה.

הדפסה נשמעת כמו החלק הכי פשוט בתוכנת מבחנים: לוחצים, ויוצא נייר. אצלנו זה לקח שלושה שלבים וסיבוב אחד בקוד המקור של דפדפן נפוץ.

בקצרה

  • בגרסה מוקדמת של ההדפסה ב־Windows היה באג שיכולנו לשחזר: אחרי ביטול או אישור, חלון ההדפסה נפתח שוב ונערם מעל התוכנה.
  • חלון הדפסה כללי מציע בחירות שאצלנו אינן החלטה אמיתית. בנינו חלון משלנו עם שלוש בחירות: איזו מדפסת, צבע או שחור־לבן, ואיכות.
  • קראנו את קוד ההדפסה של Chromium כדי ללמוד את סדר הצעדים, לא כדי להעתיק אותו.
  • מסמך ההחלטה שלנו מסומן “Proposed” (עדיין לא “Accepted”), ושמות האפשרויות ב־Mac וב־Linux עדיין צריכים בדיקה מול מדפסות אמיתיות. לא מצאנו הערה שסוגרת את הנקודה הזו.

שלב ראשון: שהמערכת תטפל בזה

הרעיון הראשון היה המובן מאליו. מפיקים את ה־PDF, מוסרים אותו למערכת ההפעלה, ונותנים לחלון ההדפסה של המערכת להופיע. אנשים מכירים אותו. יש בו כל אפשרות שמדפסת יכולה לרצות, ולא היינו צריכים לבנות כלום.

בגרסת Wails (נפתח בלשונית חדשה) זה אומר דברים שונים בכל מערכת. ב־Windows, גרסה מוקדמת ביקשה מפקודת PowerShell (כלי מובנה ב־Windows שמריץ הוראות מוקלדות) להדפיס את הקובץ בעזרת “כל תוכנת PDF שרשומה” במחשב. ב־Mac פתחנו את הקובץ בתוכנת הצפייה של ברירת המחדל והשארנו את ההדפסה למורה. ב־Linux עשינו אותו דבר, עם פקודה אחרת.

הסתכלו על מה שעשינו באמת: השארנו למשתמש לשבור את הראש. כל אחת מהדרכים האלה הציבה מול המורה מסך אחר עם אפשרויות אחרות, ואף אחד מהם לא היה בשליטתנו.

מה השתבש

מסמך ההחלטה שלנו (פתק קצר שכתבנו כשבחרנו בין אפשרויות) מ־14 ביולי 2026 מונה את הבעיות:

  • ב־Windows היה באג שיכולנו לשחזר: אחרי לחיצה על ביטול או אישור, החלון נפתח שוב ונערם מעל התוכנה. הסיבה הייתה קטנה. לחלון לא היה חלון בעלים, ולכן הוא לא ידע למי הוא שייך.
  • ב־Mac וב־Linux לא הייתה לנו שליטה בכלל. הקובץ הלך לתוכנת צפייה, ומה שקרה אחר כך היה עניין של התוכנה ההיא.
  • האפשרויות היו הרבה מדי. חלון הדפסה כללי נותן לבחור עמודים, מספר עותקים, פריסה, גודל נייר, שוליים וקנה מידה. אצלנו אף אחת מהן אינה החלטה אמיתית. המבחן הוא כבר מסמך קבוע: העמודים, גודל הנייר והפריסה נקבעים בקוד ה־PDF שלנו, ועותקים מרובים מוכנים כבר קודם, בשלב הפקת המבחן.

אותו לקח שלמדנו בעבודה על הסורק חל גם כאן: אם התוכנה כבר יודעת את התשובה, לא שואלים את המשתמש את השאלה.

שלב שני: רק שלוש בחירות

החלטנו על חלון הדפסה משלנו עם שלוש בחירות:

  • איזו מדפסת
  • צבע או שחור־לבן
  • איכות, רגילה או גבוהה

שום דבר אחר. בלי טווח עמודים, בלי קנה מידה, בלי שוליים. החלטנו גם שהתוכנה תזכור את המדפסת האחרונה שבה השתמשו.

כדי שזה יתאפשר, היינו צריכים לבצע את ההדפסה בעצמנו: כשמוותרים על חלון המערכת, אנחנו אלה ששולחים את העבודה למדפסת.

מדפסת שולחנית עם שלושה כפתורים עגולים פשוטים בחזיתה וכמה דפים ריקים במגש.

איור: מדפסת, ורק שלוש בחירות.

שלב שלישי: איך תוכנות אמיתיות עושות את זה?

כאן עשינו משהו שהיה צריך לעשות מוקדם יותר: שאלנו איך תוכנה בוגרת עושה את זה. Chromium (נפתח בלשונית חדשה), פרויקט הקוד הפתוח שמאחורי Chrome, מדפיס ב־Windows, ב־Mac וב־Linux. יש לו דרך להדפיס ישירות עם הגדרות שנבחרו בחלון שלו, והקוד שלו פומבי.

ב־14 ביולי 2026 קראנו את קוד ההדפסה שלו: את החלק שבונה הגדרות מדפסת ב־Windows ואת החלק שמדבר עם מערכת ההדפסה ב־Linux וב־Mac. ההערות מאותו מפגש קריאה נשמרו אצלנו בפרויקט, והן מתעדות גם איך קראנו: דרך מציג הקוד המקוון של Chromium, בלי עותק מקומי, כי הקוד המלא גדול מאוד.

מה שלקחנו משם היה שיטה ולא קוד. הקוד של Chromium קשור היטב לשאר הקוד של Chromium ואי אפשר לשלוף אותו החוצה, ומסמך ההחלטה שלנו אומר ששקלנו להעתיק אותו ופסלנו. מה שלמדנו הוא הסדר הנכון של הצעדים ב־Windows: לגרום לדרייבר של המדפסת למלא את ברירות המחדל שלו, להניח מעליהן את הבחירות של המשתמש, ולתת לדרייבר לבדוק את התוצאה. כך אנחנו אף פעם לא מאמתים יכולות מדפסת ביד.

מה זה דרייבר?

דרייבר (Driver) הוא תוכנה קטנה שמלמדת את המחשב איך לדבר עם התקן מסוים, כמו מדפסת או סורק. הוא מתווך בין המחשב למכשיר, ובדרך כלל לכל דגם יש דרייבר משלו.

ב־Mac וב־Linux, Chromium מדבר עם מערכת ההדפסה ישירות. אנחנו בחרנו בדרך הפשוטה יותר: קוראים לפקודת ההדפסה הרגילה עם האפשרויות, וכך נחסכת משיכה של ספריות נוספות. במסמך ההחלטה רשמנו ששמות האפשרויות המדויקים עדיין צריכים להיבדק מול מדפסות אמיתיות.

מה השתנה בקוד

שמירות בהיסטוריית הפרויקט (commit) מאותם ימים, כולן מיולי 2026, מראות את הדרך:

  • הדפסה ב־Windows דרך כלי מובנה שמצייר קובצי PDF ושולח כל עמוד למדפסת, בלי תוכנת PDF חיצונית (14 ביולי).
  • החלון המובנה של Windows הוסר, וההגדרות של המדפסת נבנות ישירות.
  • ב־Mac וב־Linux עברנו לקרוא לפקודת ההדפסה ישירות, עם האפשרויות שנבחרו.
  • כל קוד ההדפסה הוצא למודול קטן משלו (14 ביולי), עם הערה איך מדפיסים PDF אמיתי ב־Windows. ההערה קובעת שהדרך הזו אומתה מקצה לקצה מול מדפסת פיזית אמיתית.

עוד פרט קטן: ב־20 באוגוסט 2026 רשימת המדפסות הבהבה לרגע בחלון קונסולה שחור ב־Windows, ותיקנו את זה.

מה זו היסטוריית פרויקט?

מאגר (Repository) הוא התיקייה שבה שמורים כל קובצי הפרויקט יחד עם תיעוד של כל שינוי. בכל פעם ששומרים קבוצת שינויים עם הערה קצרה, זה נקרא קומיט (Commit), ולכן ההיסטוריה נקראת כמו יומן עם תאריכים. אנחנו משתמשים בה כדי לראות מה עשינו ומתי.

הערה כנה

מסמך ההחלטה מסומן “Proposed” ולא “Accepted”, אף שהקוד ביצע אותה תוך ימים. הוא גם אומר ששמות האפשרויות ב־Mac וב־Linux עדיין צריכים להיבדק מול מדפסות אמיתיות. לא מצאנו הערה שסוגרת את הנקודה הזו, ולכן אנחנו לא יכולים לומר שזה נעשה.

מה למדנו

ראשית, הסרת אפשרויות היא החלטת עיצוב ולא תכונה חסרה. שנית, קוראים קוד של פרויקט קוד פתוח בוגר לא כדי להעתיק אותו, אלא כדי ללמוד את סדר הצעדים ואת המלכודות. ושלישית, היה עלינו להסתכל בו מוקדם יותר.

עוד סיפורי מקרה לקריאה

למצוא את הסורק, ולקחת על עצמנו את ההגדרות שלומורים יכולים ללחוץ על כפתור אחד ולקבל סריקה. מאחורי הכפתור יש חיפוש של הסורק, רשימת הגדרות שאף אחד לא צריך לגעת בהן, והפתעה מחומת האש של Windows.בונים תוכנת Windows מתוך Mac: מחשב שאול, מכונה וירטואלית ותמונה של שגיאהבתי הספר עובדים עם Windows. אנחנו עובדים על Mac ועל Ubuntu. כך למדנו לבנות ולבדוק את ציון ברגע ל־Windows, והתמונה שלימדה אותנו הכי הרבה.

יש לכם מה לבנות? בואו נדבר.

בלי מצגות מכירה. ספרו לנו מה העסק צריך, ונגיד לכם בכנות איך היינו ניגשים לזה, ואם בכלל צריך את זה.

9 סיפורים על ציון ברגע

כל 9 הסיפורים

“למה אי אפשר פשוט לסרוק?” איך התחילה ציון ברגעהכול התחיל במייל אחד, עם שאלה פשוטה. זה הסיפור כפי שבעל הפרויקט מספר אותו: החיפוש הראשון, השוואה ללוטו, זיכרון מילדות על מילוי עיגולים, ולמה בנינו קורא משלנו.איך בחרנו את הכלים: Tauri, Electron, ואז Wails ו־Goהתחלנו עם Rust ו־Tauri, חזרנו לכלים שאנחנו מכירים, והגענו ל־Go ול־Wails, שלא תכננו. הלקח: בוחרים כלים שאפשר לספק איתם מוצר.למה עזבנו את Electron: המבחן שזז על הדףציון ברגע הדפיסה מבחנים דרך חלון Chrome נסתר, והעמודים זזו. ניסינו LaTeX פעמיים, ואז מצאנו את Folio, את Go ואת Wails. היסטוריית הפרויקט מראה את הדרך.להדפיס בלי חלון ההדפסה: לומדים איך Chrome עושה את זהזה הסיפור שאתם קוראים עכשיו. הרעיון הראשון היה למסור את ההדפסה למערכת ההפעלה ולתת לאנשים להסתדר עם האפשרויות. זו הייתה טעות. כך צמצמנו את הבחירות לשלוש, וכך עזרה לנו קריאת הקוד של Chromium.למצוא את הסורק, ולקחת על עצמנו את ההגדרות שלומורים יכולים ללחוץ על כפתור אחד ולקבל סריקה. מאחורי הכפתור יש חיפוש של הסורק, רשימת הגדרות שאף אחד לא צריך לגעת בהן, והפתעה מחומת האש של Windows.בונים תוכנת Windows מתוך Mac: מחשב שאול, מכונה וירטואלית ותמונה של שגיאהבתי הספר עובדים עם Windows. אנחנו עובדים על Mac ועל Ubuntu. כך למדנו לבנות ולבדוק את ציון ברגע ל־Windows, והתמונה שלימדה אותנו הכי הרבה.סמן עכבר שנראה לא נכון ב־Windowsאותה תוכנה יכולה להיראות אחרת בכל מערכת הפעלה. יום אחד סמן העכבר השתנה ב־Windows, אז בחרנו סמן משלנו ולמדנו לבדוק גם את הדברים הקטנים.לראות מחשב של בית ספר מרחוק: מה היומנים לימדו אותנו על מחשבים קטניםציון ברגע שולחת הביתה את היומנים שלה כדי שנוכל לראות אותה עובדת במקומות שאי אפשר לבקר בהם. מחשב קטן בעיירה רחוקה הראה לנו שגודל המחשב, ובסופו של דבר המעבד שלו, קובע עד כמה התוכנה עובדת טוב.קודם כול בלי אינטרנט, אבל האם יש אינטרנט? מלמדים תוכנה לבדוקציון ברגע עובדת בלי אינטרנט, ובכל זאת כמה תכונות צריכות אותו. להבדיל בין שני המצבים התברר כקשה יותר מלשאול את הדפדפן או להסתכל על הכבל.
תפריט נגישות

קיצורי מקלדת

פתיחת תפריט נגישותAlt+A
הצהרת נגישות

ההגדרות נשמרות במכשיר שלכם בלבד ומשמשות להתאמת התצוגה. הן אינן משנות את תוכן האתר ואינן שולחות מידע לשרת.