יכולות מספור ומעבר עמודים של wkhtmltopdf

יצירת PDF באתר אינטרנט

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

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

אני כבר כמה שנים משתמש בכלי צד שרת שנקרא wkhtmltopdf.

ההתקנה על windows קלה ביותר.

ההתקנה על linux , עם עברית – עשויה להיות מורכבת, ולא פשוטה כלל.

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

כמובן , שצריך לבצע התאמות CSS וכו',

בפוסט הזה אראה 2 יכולות שלו בנוגע למעבר עמוד, ובנוגע למיספור:

מעברי עמוד ב- wkhtmltopdf

  • יש אנשים שפשוט ידאגו שכל העמודים יהיו בגודל של A4, וגם זו שיטה.
  • אני פחות אוהב, ולכן אני מגדיר 3 קלאסים של CSS ומשתמש בהם לפי הצורך.
  • אין צורך לשים את זה ב-media של print, כי זה פשוט לא יעבוד.
.keep-together {

    page-break-inside: avoid;

}

.break-before {

    page-break-before: always;

}

.break-after {

    page-break-after: always;

}

מספרי עמודים ב-wkhtmltopdf

  • אני מדגים את מספרי העמודים בהנחה שיש לכם עמוד \ route נפרד עבור ה- footer
  • אבל…זה אפשרי כמובן לשלב בעמוד של ה-content העיקרי.
  • הרעיון פשוט – מגדירים פונקצית JS שמעבירה את העמודים
  • בתגית ה- body  – נפעיל אותה
  • ואז במקום שנרצה נשים את הערכים הרלוונטים עבור עמוד…מתוך….
<script>
  function subst() {
      var vars = {};
      var query_strings_from_url = document.location.search.substring(1).split('&');
      for (var query_string in query_strings_from_url) {
          if (query_strings_from_url.hasOwnProperty(query_string)) {
              var temp_var = query_strings_from_url[query_string].split('=', 2);
              vars[temp_var[0]] = decodeURI(temp_var[1]);
          }
      }
      var css_selector_classes = ['page', 'frompage', 'topage', 'webpage', 'section', 'subsection', 'date', 'isodate', 'time', 'title', 'doctitle', 'sitepage', 'sitepages'];
      for (var css_class in css_selector_classes) {
          if (css_selector_classes.hasOwnProperty(css_class)) {
              var element = document.getElementsByClassName(css_selector_classes[css_class]);
              for (var j = 0; j < element.length; ++j) {
                  element[j].textContent = vars[css_selector_classes[css_class]];
              }
          }
      }
  }
</script>
<body  onload="subst()">

 

עמוד <span class="page"></span> מתוך <span class="topage"></span>

כמה מסקנות מהעסקת פרילנסרים במזרח הרחוק בפיתוח תוכנה / אתרים (Odesk & Elance)

האם הפרילנסרים במזרח יחליפו אותנו ? לא בטוח...
האם הפרילנסרים במזרח יחליפו אותנו ? לא בטוח…
Photo by aq-photography.com

כבר כמה שנים, שאני נעזר בפרילנסרים מהמזרח הרחוק

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

אני אפרט כאן את המסקנות האישיות שלי

בתקווה שיועילו לאנשים אחרים.

  1. בדברים פשוטים (בעיני, כמפתח) כמו חיתוך PSD ל- HTML/CSS

ועבודות גרפיקה ווידאו, בסופו של דבר – יצאתי מרוצה.

אומנם בחלק מהמקרים, הייתי צריך לתת לבנאדם הרבה מאוד הנחיות

והערות בלי סוף, עד שהגענו לתוצאה סבירה

אבל, המחיר השתלם למרות זאת.

אני אתן דוגמאות :

חיתוך 12 דפים ארוכים יחסית, ל-html/css רספונסיבי, מבוסס bootstrap 3 בעברית

עלה לי בהודו 218$, ובארץ דבר כזה היה עולה לפחות 3000 ש"ח להערכתי.

החיסכון (1$=4ש"ח) הוא כ : 2,128 ש"ח

עלות חיסכון : היו פה יותר מ-10 סבבים של תיקונים,

כולם בכתיבה מייגעת  באנגלית.

 

דוגמא נוספת : חיתוך דף בודד – 28$ (בנגלדש, Elance)

דוגמא נוספת : חיתוך דף בודד , רספונסיבי – 60$ (הודו)

גרפיקה + חיתוך , 3 דפים שונים – 48$ (הודו, 3 סקיצות כמקובל).

 

  1. בדברים בהם היה צורך למצוא מתכנת , ולא רק עיצוב או חיתוך – יצאתי ב-"שן ועין"

או ברווח נמוך.

דוגמא : חיפשתי מתכנת VBA בזול, שילמתי 15$ לשעה לבחור הודי,  שזה היה מחיר יקר משאר המציעים ב-Elance

קיבלתי עבודה מאוד מאוד גרועה, שהייתי צריך לשכתב את כל הקוד בעצמי , אל תוך הלילה.

ובנוסף שילמתי לו 550$.

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

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

הוא טען שהוא מוכן לפתור את זה עד הסוף… עניתי לו שזה לא רלוונטי

כי הקוד כתוב מתחת לכל רמה סבירה.

פתחנו dispute ב-elance , הוא זכה חלקית, והייתי צריך לשלם על חלק משעות העבודה הנותרות (חלק שולמו לפני כן).

 

מקרה אחר – למדתי את הלקח, שילמתי 25$ לבחור רוסי, שעשה עבודה יפה מאוד.

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

במקרה זה חסכתי זמן, אך לא כסף, כי בישראל יכולתי למצוא מישהו במחיר זה

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

 

  1. מקרים שאינם קשורים לפיתוח –

היו לי כמה מקרים נוספים, שבהם ניסיתי

חלקם רק לקבלת עצה מקצועית "באופן מיידי"

שלא מצאתי לה מענה בגוגל.

וחלקם – לפרויקטים של אדמיניסטרציה / עבודה שחורה.

במקרים של העצות – שילמתי מחיר סביר (כ-30$ לשעה, בדרך כלל לא יותר משעה-שעתיים והעניין נפתר)

באמת היה ידע בצד השני, והייתה מוכנות לעזור,

ובמקרים מסויימים גם היתה הוגנות (קרו לי כמה מקרים

שבהם האנשים ששכרתי לא ידעו לפתור את הבעיה

ולמרות שלפי הכללים, היו אמורים לחייב אותי על הזמן שהשקיעו – לא חויבתי בפועל).

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

העברית – מהווה בעיה, שלא תמיד קל להתגבר עליה.

כלומר לפעמים הייתי צריך לכתוב כל כך הרבה הנחיות באנגלית

שזמן הצאט / הכתיבה – היה סוג של הפסד (כי לישראלי, הייתי פשוט מסיים ב-5 דקות הסבר טלפוני).

בנוסף , היה מקרה שבו פירסמתי פרויקט גדול לפי שעות

ובסופו של דבר הפרויקט הסתיים הרבה יותר מהר מהצפוי.

והבנאדם בצד השני (הודו) , פתח dispute (תביעה נגדי) ב-elance

בטענה שעלי לשלם לו לפי הצפי המקורי, כי הוא "התכונן לזה".

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

כי לא ידעתי מה הם יחליטו בסופו של דבר.

 

מסקנות :

  1. דברים פשוטים – אפשר לשלוח בכיף.

  2. יש לקחת בחשבון שזמן ההתנהלות מולם כפול ומכופל לפחות פי 6 אם לא יותר לעומת מישהו בעברית.

  3. בדברים מורכבים – היתרון שאני מצאתי, הוא מהירות הביצוע

אבל אין חיסכון מבחינת עלות – המחיר  דומה מאוד לישראלי.

  1. חשוב להשתמש בכל האמצעים שמעמידים לרשותכם האתרים, כדי לבטח את עצמכם.

כי טעויות קורות, ואף אחד לא רוצה לשלם על טעות.

אז אם הפרויקט לפי שעות – תדרשו עבודה עם time tracker שמתעד את צילומי המסך שלהם.

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

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

  1. בפרויקטים גדולים, יש לקחת בחשבון עלויות מימון

כי התשלום מבוצע בחלקו מראש (ל-"כספת" של האתר, עד לסיום אבני הדרך הרלוונטיות)

  1. ומסקנה אחרונה – מעודדת – לפחות כרגע, אין מצב לדעתי

שההודים יחליפו אותנו. 🙂

 

בהצלחה!

מצרף סרטון שנתקלתי בו, ועזר לי בזמנו.