מאמר טכני

המרת PDF למרחב צבע אחד בדלפי

RecolorDocument מעביר PDF שלם למרחב צבע אחד, ו-RecolorPage עושה את אותו הדבר עבור עמוד בודד. שניהם מקבלים 1 לאפור, 2 ל-RGB ו-3 ל-CMYK, ומחזירים כמה צבעים הומרו. גאומטריה, טקסט ותמונות נשארים בדיוק היכן שהיו; רק הצבע משתנה

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

מה מומר, ובאיזה סדר

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

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

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

var
  Lib: TPDFlib;
  Converted: Integer;
begin
  Lib := TPDFlib.Create;
  try
    Lib.LoadFromFile('brochure.pdf', '');
    Converted := Lib.RecolorDocument(1);       // 1 grey, 2 RGB, 3 CMYK
    Log(Format('%d colours converted', [Converted]));
    Lib.SaveToFile('brochure-grey.pdf');
  finally
    Lib.Free;
  end;
end;

למה JPEG מושאר ללא שינוי?

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

מסכות רכות ומסכות שבלונה מושארות ללא שינוי מסיבה שונה. שתיהן נקראות ככיסוי ולא כצבע, והמרה של אחת מהן הייתה מותירה את העמוד מציג את המסכה כתמונה — מסכת שקיפות מעובדת כאמנות אפורה מעל התוכן שהיא אמורה הייתה לעצב. השארתן אינה מגבלה שיש לעקוף; זוהי התוצאה הנכונה

צבעים שמוגדרים דרך מרחב ICCBased, Separation, Indexed או Pattern מושארים אף הם כמות שהם ברמת האופרטור. המרתם ללא קריאת הפרופיל שלהם הייתה משנה כיצד העמוד נראה במקום לשמרו, ומעבר צביעה מחדש שכל הבטחתו היא שימור אינו יכול להתחיל לנחש פרופילים

גרדיאנטים מומרים עם העצירות שמאחוריהם

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

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

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

// Convert a single page - useful when only the cover needs to change
Lib.SelectPage(1);
Lib.RecolorPage(3);          // this page to CMYK
Lib.SaveToFile('cover-cmyk.pdf');

היכן צביעה מחדש משתלבת לפני הגשה לבית דפוס

יש להשתמש בזה כצעד נירמול, לא כניהול צבע. צביעה מחדש ממירה ערכים בין מרחבי מכשיר; היא אינה מחילה פרופיל ICC, אינה מכבדת rendering intent או מדמה תנאי דפוס. לעבודה שחייבת לפגוע הוכחת חוזה, זרימת העבודה מונעת-הפרופיל היא התשובה וצביעה מחדש היא לכל היותר הצעד שמכניס הכול למרחב אחד תחילה

היכן שזה משתלם הוא בעיית הייצור הרגילה: הגשה שחייבת להיות אפורה ומגיעה עם לוגו RGB, מסמך פנימי שאסור לו להיות מודפס בצבע, אצוות קבצים שחייבת להיות במרחב אחד לפני ששלב preflight יקבל אותם. יש לשלב את זה עם בדיקה — ההערות על preflight של PDF/A ו-PDF/UA ועל סדנת התאימות והחתימה מכסות הרצת פסק הדין כחלק מאותה עבודה

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

PDFlibPas היא ספריית PDF מקורית בפסקל לדלפי, C++Builder ו-Lazarus ללא סביבת ריצה חיצונית, כך שצעד נירמול צבע רץ בתוך השירות שלך עצמך במקום לבצע קריאה לממיר חיצוני — ראה את דף המוצר של PDFlibPas לממשק API המלא לעיבוד מסמכים