יצירת פריסת עמוד

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

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

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

converting-to-fixed-page-format-aspose-words-cpp-1

מאפיינים לא גיאומטריים

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

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

converting-to-fixed-page-format-aspose-words-cpp-2

ב Aspose.Words, משתמש יכול לבקש אם לבנות פריסת עמוד חדשה, או לעדכן פריסת עמוד קיימת. שני אלה יכולים להתבצע בשיטת UpdatePageLayout, המסופקת על ידי הכיתה Document. אם פריסת עמוד אינה קיימת, אך יש צורך בה (לדוגמה, כאשר המסמך מיוצא לפורמט של דף קבוע), Aspose.Words יתקשר אוטומטית לשיטה זו. עם זאת, אם פריסת עמוד אכן קיימת כבר, Aspose.Words ישתמש בפריסה הקיימת, על מנת להימנע מצריכת המשאבים הדרושים לעדכונה. במקרה זה, המשתמש צריך להתקשר לשיטת UpdatePageLayout, על מנת להבטיח כי פריסת הדף מעודכנת במודל המסמך.

מבנה דינמי

תהליך יצירת פריסת הדף כולל את השלבים הבאים:

  • Conversion - ספירת תוכן של מודל המסמך והכנת אובייקטי פריסה מתאימים.
  • Build - סידור אובייקטי פריסה לייצוג תוכן המסמך בדפים.
  • Reflow - עדכון הסדר אובייקטים כדי לספק אילוצי גיאומטריה.
  • Projecting layout objects into fixed page presentation and finalizing color information.
  • Building and reflowing of shape content - שלב נדרש אם המסמך מכיל צורות עם תוכן טקסט מקונן.

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

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

בעת יצירת פריסה, ניתן גם להגדיר LayoutOptions מאפיינים המשפיעים על פלט המסמך בדפים.