PDFiumPas הערות גרסה
היסטוריית גרסאות של תכונות, תיקונים, שיפורי מציג, יצירת מסמכים, פלט PDF/A, רינדור ועדכוני תיעוד הנראים למשתמש
גרסה אחרונה
- גרסה אחרונה: 2.57.0; תאריך שחרור:
Version 2.57.0
נוסף (Added)
TPdfThumbnailView.Orientationתומך בפריסות תצוגות ממוזערות אנכיות ואופקיות תוך שמירת ברירת המחדל האנכית הקיימתFirstVisiblePageIndex,LastVisiblePageIndexו־EnsureCurrentPageVisibleחושפים ושולטים באזור התצוגה של התצוגות הממוזערות באמצעות אינדקסי עמודים מבוססי־אחד
שונה (Changed)
- שינוי
CurrentPageIndexגולל כעת את התצוגה הממוזערת הנבחרת לתצוגה בכל אחד מהכיוונים - בדיקות Delphi, Lazarus ו־C++Builder מכסות כעת ברירות מחדל של כיוון, החלפה, טווחים גלויים ונראות עמוד נבחר
TPdf.AboutInfo, נתוני העל של חבילת Lazarus ונתוני העל של המתקין מדווחים כעת בעקביות על Version 2.57.0
Version 2.56.2
שונה (Changed)
HighlightSearchText,AddSearchTextHighlightו־ClearHighlightמבטלים כעת רק את מלבני המכשיר עבור טווחי חיפוש שנוספו או הוסרו במקום לצבוע מחדש את המציג כולו- החלפת הדגשות באותן התאמות או הוספת התאמות כפולות אינה מתזמנת עוד צביעה־מחדש מיותרת
- בדיקות Delphi, Lazarus ו־C++Builder מכסות כעת ביטול חסום, עדכונים אידמפוטנטיים, ניקוי ובטיחות תצוגה לא־פעילה
TPdf.AboutInfo, נתוני העל של חבילת Lazarus ונתוני העל של המתקין מדווחים כעת בעקביות על Version 2.56.2
Version 2.56.1
שונה (Changed)
TPdfThumbnailViewמשתמש כעת מחדש במפות סיביות מעובדות עבור עמודים שנשארים גלויים בין צביעות־מחדש ועמדות גלילה סמוכות- המטמון שומר רק את טווח העמודים הגלוי הנוכחי ומשחרר ערכים במדויק כאשר עמודים עוזבים טווח זה, המסמך שהוקצה משתנה, או ממדי התצוגה הממוזערת משתנים
- בדיקות Delphi, Lazarus ו־C++Builder מכסות כעת שימוש־חוזר במטמון, גיזום אזור תצוגה, ביטול גודל, החלפת מסמך והריסת רכיב
TPdf.AboutInfo, נתוני העל של חבילת Lazarus ונתוני העל של המתקין מדווחים כעת בעקביות על Version 2.56.1
Version 2.56.0
נוסף (Added)
TPdfView.CutSelectedFormTextToClipboardו־TPdfView.PasteFormTextFromClipboardמספקים עריכת לוח Unicode עבור הווידג'ט הניתן לעריכה הממוקד של הטופס
שונה (Changed)
- עורכי טפסים ממוקדים מטפלים כעת בקיצורי המקלדת הסטנדרטיים של copy, cut, paste ו־select-all לפני העברת קלט הטקסט ל־PDFium
- cut ו־paste דוחים שדות לקריאה־בלבד וסשנים ללא הרשאת מילוי או שינוי טופס, בעוד ש־cut מעתיק בהצלחה לפני הסרת הטקסט הנבחר
- בדיקות Delphi, Lazarus ו־C++Builder מכסות כעת התנהגות ללא־מיקוד, נתיב קיצור הלוך־ושוב ודחיית קריאה־בלבד
TPdf.AboutInfo, נתוני העל של חבילת Lazarus ונתוני העל של המתקין מדווחים כעת בעקביות על Version 2.56.0
Version 2.55.0
נוסף (Added)
TPdfView.AddSearchTextHighlightמוסיף התאמות ייחודיות עבור מונח חיפוש נוסף לשכבת־העל של העמוד הנוכחי, מה שמאפשר למספר שאילתות להישאר מודגשות יחד
שונה (Changed)
HighlightSearchTextנשאר נקודת הכניסה להחלפה ומשתף כעת את הסורק המצטבר, בעוד שטווחי תווים כפולים מתעלמים ו־ClearHighlightמסיר את מלוא הערכה המצטברת- בדיקות Delphi, Lazarus ו־C++Builder מכסות כעת צבירה של שאילתות נבדלות ודיכוי טווחים כפולים
TPdf.AboutInfo, נתוני העל של חבילת Lazarus ונתוני העל של המתקין מדווחים כעת בעקביות על Version 2.55.0
Version 2.54.0
נוסף (Added)
TPdfחושף כעת תצלומי מצב מלאים של אובייקטי עמוד, עדכוני סגנון אצווה, התמרות אובייקט affine, מקטעי נתיב, נתיבי חיתוך וילדי Form XObject- בדיקת תווים כוללת כעת צבעי מילוי וקו, שם דגל ומאפייני גופן, גבולות glyph רופפים, מטריצות אפקטיביות, מאחזי אובייקטי טקסט והמרת אינדקס תו־לטקסט
- הערות כעת מבצעות round-trip של גאומטריית גבול וזרמי מראה normal, rollover ו־down
- אקססורים חדשים של תצוגות ממוזערות גולמיות ומפוענחות, התמרות תוכן־עמוד והערות, ו־
RenderPageWithMatrixמספקים נתיבי עיבוד ועריכה מתקדמים ישירים
שונה (Changed)
- שינויי סגנון של אובייקטי־עמוד יכולים כעת להישלח כאצווה אחת כך ש־PDFium מחדש את תוכן העמוד רק פעם אחת
- עיבוד מטריצה משתמש בנתיב מפת הסיביות הקיים ללא־העתקה כאשר פריסת מפת הסיביות של היעד תואמת
Version 2.53.1
תוקן (Fixed)
- הכיתוב המובנה של תפריט Copy בסינית משתמש כעת בנקודות קוד Unicode בלתי־תלויות־בקידוד ומוצג נכון בבניות Lazarus
- שרשראות כלים ישנות יותר של Delphi יכולות להדר את
FPdfAsyncכאשר היחידהWinapi.Windowsשלהן משמיטה את הצהרתGetTickCount64
Version 2.53.0
נוסף (Added)
- מבחן
Tests.ApiCoverageחדש המכסה ממשקי API ציבוריים של TPdf שלא היו להם קודם כיסוי בדיקות end-to-end כלל:GetPageBox/SetPageBox(קריאה/כתיבה של MediaBox/CropBox, שגיאות תיבה־חסרה ו־round-trip שמירה),FlattenPage/FlattenAllPages(ערך החזרה ושימור מספר עמודים),GenerateFormAppearances(no-op על מסמכים ללא טפסים),SaveAsEncrypted/SaveAsEncryptedToStream(AES-256 עם round-trip סיסמה — מוודא שהקובץ המוצפן מסרב להיפתח ללא הסיסמה ונפתח איתה), אימות גבולותDeletePage(עמוד 0 ומחוץ־לטווח מעליםEPdfError), וערכי הסנטינל של הערותHasContents/HasAuthorשהוכנסו ב־v2.38.0 (מוודא ש־Default(TPdfAnnotation)משאיר אותםFalse)
Version 2.52.0
נוסף (Added)
TPdfView.CopySelectedFormTextToClipboardמעתיק את בחירת הטקסט בתוך ווידג'ט ה־AcroForm הממוקד אל לוח Windows כ־CF_UNICODETEXT
שונה (Changed)
- פעולות העתקת טקסט־עמוד וטופס ממוקד משתפות כעת את אותו כותב לוח Unicode הגנתי ומשאירות את הלוח ללא שינוי כאשר הבחירה שלהן ריקה
- בדיקות Delphi, Lazarus ו־C++Builder מכסות כעת קריאות העתקת טופס לא־פעילות או לא־ממוקדות ו־round-trip של בחירת טופס ממוקד דרך לוח Windows
TPdf.AboutInfo, נתוני העל של חבילת Lazarus ונתוני העל של המתקין מדווחים כעת בעקביות על Version 2.52.0
Version 2.51.0
נוסף (Added)
TPdfView.SelectLineAtבוחר את שורת הטקסט החזותית המכילה עמוד מבוסס־אחד ואינדקס תווים מבוסס־אפס ללא דרישת קלט עכבר
שונה (Changed)
- בחירת שורה תכנותית, בחירת הקלקה־משולשת ו־
Shift+HomeאוShift+Endמשתפות כעת מודל גבול שורה אחד מבוסס־תיבת־תווים - בדיקות Delphi, Lazarus ו־C++Builder מכסות כעת בחירת שורה יציבה ואינדקסי עמוד או תווים לא־תקפים
TPdf.AboutInfo, נתוני העל של חבילת Lazarus ונתוני העל של המתקין מדווחים כעת בעקביות על Version 2.51.0
Version 2.50.0
נוסף (Added)
TPdf.LoadDocumentמקבל כעת חלוןIndexמבוסס־אפס ו־Countאל תוך מאגרTBytes, מה שמאפשר ל־PDF מוטמעים להיטען מבלי להקצות פרוסת מערך־בתים זמנית
שונה (Changed)
- טעינת טווח־בתים דוחה חלונות שליליים או מחוץ־לטווח לפני שינוי מצב המסמך ומשמרת את אפשרויות אורך־החיים של המאגר המאוחסן והמאגר המושאל הקיימות
- בדיקות Delphi, Lazarus ו־C++Builder מכסות כעת חלונות PDF מוטמעים וארגומנטי טווח־בתים לא־תקפים
TPdf.AboutInfo, נתוני העל של חבילת Lazarus ונתוני העל של המתקין מדווחים כעת בעקביות על Version 2.50.0
Version 2.49.1
נוסף (Added)
TPdfView.FitModeתומך כעת ב־pfmFitHeightלהתאמת העמוד הנוכחי לגובה התצוגה הנראה תוך אפשור גלילה אופקית בעת הצורך
תוקן (Fixed)
- מצבי התאמה מתכנסים כעת לאחר ששינוי נראות פס הגלילה משנה את אזור הלקוח, מה ששומר על עקביות תוצאות fit-page, fit-width ו־fit-height בין VCL ו־LCL
- בדיקות המציג של Delphi, Lazarus ו־C++Builder מכסות כעת בחירת
pfmFitHeightומעברי הלוך־ושוב של enum TPdf.AboutInfo, נתוני העל של חבילת Lazarus ונתוני העל של המתקין מדווחים כעת בעקביות על Version 2.49.1
Version 2.49.0
נוסף (Added)
- שטח הקישור הציבורי של PDFium מכסה כעת את כל 470 הפונקציות המיוצאות בכותרות שנסקרו, כולל גישה לתיאורי קבצים מצורפים באמצעות
FPDFAttachment_SetDescriptionו־FPDFAttachment_GetDescription TPdfחושף כעת תיאורי קבצים מצורפים, תקפות הפניות צולבות, היסטי סוף trailer, גרסת security-handler, טעינת זיכרון 64-סיביות, טווחי בתים של חתימה, טווחי טקסט של קישורי אינטרנט ותצלומי מצב מורחבים של נתוני תמונה, מסנן, נתוני על ופרופיל ICC- עוזרי טפסים תומכים כעת במיקוד שדה מקורי, שאילתות ועדכוני אפשרות בחירה ממוקדת, העברת גלגל עכבר, קווי דיו הניתנים לכתיבה ושכבות־על של טפסים לאחר עיבוד מתקדם
שונה (Changed)
FormFieldCount, אינדקסי שדות טופס וסדר טאב מתארים כעת רק הערות widget במקום לכלול הערות עמוד לא קשורות- עמודי
TPdfללא ממשק נכנסים ויוצאים כעת ממחזור חיי עמוד מילוי טפסים כך שמיקוד מקורי וממשקי API של שדות ממוקדים עובדים ללאTPdfView - ייצוא תיאורי קבצים מצורפים מוגבל על־ידי יכולות כך שיישומים המשתמשים בבניית PDFium ישנה יותר עדיין יכולים לטעון את הספרייה ולזהות את התכונה הלא זמינה
תוקן (Fixed)
- עיבוד עמוד מתקדם מצייר כעת פקדי טופס כאשר מילוי טפסים מופעל
- בדיקות Delphi, Lazarus ו־C++Builder מכסות כעת את אבחון המסמכים החדש, תיאורי קבצים מצורפים, נתיבי דיו, התנהגות טפסים, טווחי בתים של חתימה, טווחי קישורי אינטרנט ונתוני על של תמונות
TPdf.AboutInfo, נתוני העל של חבילת Lazarus ונתוני העל של המתקין מדווחים כעת בעקביות על Version 2.49.0
Version 2.48.0
נוסף (Added)
TPdfMatrixחושף כעת מפעלים, שיבוט והשמה, אבחון מצב סופי והפיכות, השוואה מבוססת סובלנות, גישת תרגום, דיווח דטרמיננטה ופירוק אפיני- הרכבת prepend, סיבוב מודע לנקודת ציר, קנה מידה, הטיה והיפוכים, בתוספת מיפוי מלבנים stretch, contain ו־cover תומכים בזרימות עבודה של מרחב מקומי ופריסות מותאמות ללא אריתמטיקת מקדמים ידנית
- גישה הפוכה לא משנה, מיפוי נקודות הפוך, טרנספורמציות וקטור ומרובע, מנות נקודה ומלבן דינמיות, וריאנטים במקום וגבולות מותמרים במעבר אחד מרחיבים את שטח הגאומטריה העשיר בשימוש חוזר
שונה (Changed)
- תרגום, קנה מידה והיפוכי ציר מעדכנים כעת רק את המקדמים המושפעים במקום לנתב דרך כפל אפיני כללי
- טרנספורמציית מלבן מנרמלת את הקלט שלה פעם אחת, משתמשת בנתיב מדויק מתמחה מיושר צירים כאשר אפשר, ומחשבת גבולות מסובבים כלליים ללא רשומות נקודה זמניות
- טרנספורמציות מנות נקודה ומלבן מקצים מערך תוצאה אחד או משתמשים חוזרים באחסון הקורא, בעוד גבולות נקודה מותמרים מצטברים במעבר אחד ללא מערך ביניים
תוקן (Fixed)
- מיפוי מלבנים דוחה תוצאות בגודל אפס, לא סופיות ובגלישת
Singleלפני פרסום מטריצה לא שמישה - בדיקות Delphi, Lazarus ו־C++Builder מאמתות כעת סדר הרכבה, אי־שונוּת נקודת ציר, מעברי הלוך־ושוב הפוכים, מלבנים מותאמים, פירוק והתנהגות גאומטריה בתפזורת
TPdf.AboutInfo, נתוני העל של חבילת Lazarus ונתוני העל של המתקין מדווחים כעת בעקביות על Version 2.48.0
Version 2.47.0
נוסף (Added)
FPdfAsyncמספק כעת סיבות והודעות ביטול מובנות, רישומי callback ניתנים להסרה, מקורות מבוססי פס־זמן, המתנת ביטול ופעולות try-cancel אטומיות באמצעות ממשקים מורחבים השומרים על ה־API המקוריTPdfFuture<T>.RunExמוסיף משלוח תגובה ניתן להגדרה ועדיפות עובד בעוד מעטפות תוצאה חושפות מזהי פעולה, תקפות ערך, שמות מחלקת חריגה, תזמון השלמה ועוזרי השלמה עשירים בשימוש חוזרTPdfAsyncExecutorמוסיף מאגר עובדים קבוע עשיר בשימוש חוזר עם ארבעה נתיבי עדיפות FIFO, לחץ־חוזר תור מוגבל אופציונלי, ידיות משימה ניתנות לביטול, המתנה מודעת פס־זמן, תצלומי מצב של משימה, סטטיסטיקה מצרפית וכיבוי מהודר
שונה (Changed)
- משימות אסינכרוניות חוזרות יכולות לעשות שימוש חוזר בתתי־הליכי עובד ופעולות תור O(1) במקום ליצור תת־הליך לכל משימה, בעוד השלמה מסונכרנת נשארת זמינה למארחי UI
- כשלי executor ו־future שומרים על אבחון מחלקת חריגה והודעה, ביטול שומר על סיבתו המקורית, וחריגות callback נשארות מבודדות ממחזור חיי העובד והכיבוי
- בדיקות Delphi, Lazarus ו־C++Builder מכסות כעת את שטח הביטול המורחב, נתוני־העל של future, בקרת משימה, לחץ־חוזר, סדר עדיפות, סטטיסטיקה, כשל וכיבוי
תוקן (Fixed)
- בעלים ביטול מקבילים מקבלים כעת תוצאת כותב־ראשון דטרמיניסטית במקום להסתמך על רצף תצפית וביטול נפרד
- המתנת חוסר־פעילות של תת־הליך ראשי מעבדת תגובות משימה מסונכרנות, מונעת מעובד שהושלם להשאיר את ה־executor במצב לא פעיל לצמיתות במהלך כיבוי מתואם
TPdf.AboutInfo, נתוני העל של חבילת Lazarus ונתוני העל של המתקין מדווחים כעת בעקביות על Version 2.47.0
Version 2.46.0
נוסף (Added)
FPdfAsn1חושף כעת מחלקות מזהה, קידוד ופענוח מספר תג גבוה 64-סיביות, רשומות TLV מנותחות, חלונות קורא ילד העתק־אפס, מפענחים פרימיטיביים מוקלדים ופרוסות תוכן או ערכים מקודדים- כותבי DER תומכים כעת בטווח INTEGER 64-סיביות ללא סימן מלא, תוכן INTEGER שרירותי מאומת, ENUMERATED, בחירת UTCTime או GeneralizedTime אוטומטית, תגי application ו־private, SEQUENCE רב־ערכי ופלט SET OF ממוין קנונית
ValidateDerמחזיר שגיאות אימות מודעות היסט תוך אכיפת מגבלות קינון, ספירת צמתים, אורך תוכן, ספירת שגיאות, שורש ומיון SET אופציונלי ניתנים להגדרה
שונה (Changed)
- שרשור DER והרכבה רב־ערכית משתמשים בהקצאת פלט אחת, מאגרי כותב חושפים פעולות reserve, count, capacity והעברת בעלות, ומיון SET OF משתמש כעת במיון מיזוג
O(n log n) - ערכי BOOLEAN, INTEGER, BIT STRING, OBJECT IDENTIFIER, NULL, UTF8String, PrintableString, IA5String, UTCTime ו־GeneralizedTime מקבלים בדיקות צורה קנונית במהלך קידוד, פענוח מוקלד או אימות
- חבילת זמן־הריצה של Lazarus מייצאת כעת את
FPdfAsn1, וחבילות בדיקה של Delphi, Lazarus ו־C++Builder מתרגלות את אותו שטח DER ציבורי
תוקן (Fixed)
- מספרי תג תלויי־הקשר גדולים מ־30 אינם מקוצרים עוד לחמשת הסיביות הנמוכות של המזהה
- מזהי תג גבוה מעוותים, אורכים מוגדרים לא מינימליים, UTF-8 לא תקין, ריפוד BIT STRING שאינו אפס, שדות זמן לא תקינים, שורשים עוקבים והפרות מגבלת משאבים נדחים באופן דטרמיניסטי
TPdf.AboutInfo, נתוני העל של חבילת Lazarus ונתוני העל של המתקין מדווחים כעת בעקביות על Version 2.46.0
Version 2.45.0
נוסף (Added)
FPdfPreflightReportמקצה כעת חומרה Info, Warning או Error לכל בעיה וחושף ממשקי API של חומרה, מצב, קטגוריה, קוד בעיה, lookup, search, flattening וסינון ברמת תקן ודוח- דוחות preflight מייצאים כעת SARIF 2.1.0, JUnit XML, NDJSON ו־XML מקורי באמצעות שיטות
To*ו־Save*ToFileתואמות עבור צינורות CI, אוטומציה וזרימה - טביעות אצבע דוח SHA-256 יציבות מזהות תוצאות אימות שקולות באופן בלתי תלוי בנתיבי מקור וחותמות זמן יצירה
שונה (Changed)
- דוחות JSON, CSV, text, Markdown ו־HTML כוללים כעת חומרה וסיכומי מצב מורחבים; HTML מוסיף כיתובי טבלה נגישים וסיכום מצב
- בניית אוספי בעיה ותקן משתמשת בצמיחת קיבולת גאומטרית, תוצאות שאילתה ממומדות מראש, בריחת JSON כותבת למאגר פלט אחד מוגבל, וכל קובצי הדוחות משתמשים בכותב UTF-8 ישיר אחד
- סיכומי קטגוריית בעיה משתמשים בסדר דטרמיניסטי, חותמות זמן כוללות מילישניות, JSON נושא
formatVersion: 2, ותאי CSV מנטרלים נוסחאות גיליון אלקטרוני
תוקן (Fixed)
- ייצוא JSON שומר כעת על זוגות Unicode משלימים תקינים ומחליף יחידות קוד surrogate UTF-16 מבודדות במקום לפלוט נתונים סקלריים מעוותים
- ייצוא HTML חומק כעת אפוסטרופים, ותצוגות דוח מסוננות בעלות מערכי בעיה עצמאיים במקום לשתף אחסון תוצאות ניתן לשינוי
TPdf.AboutInfo, נתוני העל של חבילת Lazarus ונתוני העל של המתקין מדווחים כעת בעקביות על Version 2.45.0
Version 2.44.0
נוסף (Added)
- סימניות ויעדים חושפים כעת מצב פתיחה, ספירת צאצאים, יעדי פעולה, מצבי תצוגת יעד, ועד ארבעה פרמטרי תצוגה
- הפונקציות
Metadata,GrantedPermissions,UserGrantedPermissions,HasPermissionו־UserHasPermissionמספקות תצלומי מצב מוקלדים של בחינת מסמך ושאילתות הרשאה ExtractThumbnail(PageNumber)מבצע רינדור של עמוד מבוקש מבלי לשנות את העמוד הפעיל, ותוצאות חותמת זמן של RFC 3161 חושפות מדיניות, זמן יצירה ופרטי nonce
שונה (Changed)
- נתיבי סימניות, JavaScript, מטא־נתונים, יעדים ותמונות ממוזערות משתמשים במאגרי שני מעברים מאומתים, גידול גיאומטרי של אוספים ומעבר מוגן מפני מעגלים
- עיבוד־לאחר שמירה מבצע פתרון של הקטלוג הפעיל, עץ העמודים והפעולה הפתוחה דרך מהדורת ה־xref הנוכחית, שומר במטמון זרמי אובייקט מפוענחים, וסורק מילוני PDF עם גבולות לקסיקליים
- ניתוח PDF משותף אוכף כעת כותרות אובייקט מדויקות, דורות, מפתחות מילון, אורכי זרם, גיאומטריית מנבא, טווחי מספרים שלמים, וגבולות הערה, מחרוזת מילולית ומחרוזת הקסדצימלית
- אימות תגובת RFC 3161 קושר כעת גם nonce וגם
messageImprintמסוג SHA-256, דורש חותם מבנית תקין, ומחיל כללי DER, OID, INTEGER ו־GeneralizedTime קפדניים לאורך
תוקן (Fixed)
- מסמכים אינקרמנטליים אינם בוחרים עוד קטלוגים כפולים לא פעילים או סיומות הפניה פגומות בעת הוספת פעולה פתוחה המוגדרת כברירת מחדל
- אסימוני חותמת זמן עם אורכי DER מהצורה הארוכה שומרים את האסימון המקודד המלא, בעוד שסדר שדות אופציונליים פגום של CMS וקבוצות חותם ריקות נדחים
- בניות Delphi נקיות כותבות כעת שדות זרע nonce של PAdES באמצעות העתקות בתים מוגנות־יישור ומעבירות בתי תגובה של XFA בסוג המצביע המקורי המדויק
Version 2.43.0
נוסף (Added)
- רשומות שדה והערה של XFDF חושפות כעת דגלי נוכחות המבחינים בין ערך XML מושמט לבין ערך ריק מפורש
שונה (Changed)
- ייבוא XFDF מקבל אלמנטים ותכונות עם קידומת מרחב־שם, תוכן מעורב מסוג טקסט ו־CDATA, הפניות ישויות וערכים רגישים לרווחים לצד דחיית הפניות סקלאר Unicode לא תקינות
- ייבוא וייצוא XFDF משתמשים בהתאמת שדות ממופת ובמאגרים גיאומטריים חסומים, המשפרים תפוקה והתנהגות שיא הקצאה עבור טפסים מקוננים עמוק, אוספי הערות גדולים, רשימות דיו, קודקודים ומרובעי סימון
- תיקוף PDF/A ו־PDF/UA משתמש בגידול חסום עבור אוספי עמוד, זרם, שם־מבנה ו־RoleMap גדולים; פתרון RoleMap של PDF/UA עוקב כעת אחר מערכים ישירים ואובייקטי שם או מערך עקיפים בדור מדויק
תוקן (Fixed)
- מחזורי הלוך־ושוב של XFDF משמרים כעת נתיבי שדה מקוננים עמוק, ערכי שדה ריקים מפורשים, תוכן הערה ריקים מפורשים, ואת ההבחנה בין תוכן נעדר לריק
- טעינות מאגר זיכרון לא תקינות והקצאות עמוד מחוץ לטווח נדחות מבלי להשאיר מצב מסמך או עמוד חלקי, וטעינה מחדש של עמוד מקורי שנכשלה משמרת את העמוד שהיה פעיל קודם
- מזהי תוכן מסומן גדולים ומאגרי מטא־נתוני חתימה מוגבלים ומאומתים לפני הקצאה או גישה מקורית
Version 2.42.0
נוסף (Added)
- הטיפוס
TPdfMatrixמספק כעת אתInvert,TryInvert,TransformPointו־TransformRectעבור מיפוי קואורדינטות, בדיקת פגיעה, גבולות מנורמלים וטיפול מפורש במטריצה סינגולרית TPdf.WrapTextקיבל עומס (overload)BreakLongWordsשפיצל טקסט מסוג CJK וטקסט אחר ללא רווחים תוך שמירת זוגות תחליף תקינים של UTF-16 יחדTPdfAnnotation.AttachmentPointSetsחושף כל מרובע בהערות סימון מרובות־שורות בעוד שהשדה הקייםAttachmentPointsנותר כינוי לקבוצה הראשונה
שונה (Changed)
- חילוץ טקסט, בניית תוכן קריא, איתור מילים ומיפוי היסט טקסט מדובר משתמשים כעת בהקצאה חסומה ובנתיבי חיפוש בינאריים, המפחיתים הקצאות חוזרות וסריקות לינאריות על עמודים גדולים
- סריאליזציה של ASN.1 ויצירת PDF מוצפן משתמשים כעת במאגרי פלט גיאומטריים; סדר אובייקטים מוצפנים משתמש במיון
O(n log n)ושורות xref נכתבות ישירות אל המאגר הסופי WrapTextמשמר גבולות שורה מסוג CR, LF ו־CRLF ומשתמש מחדש באובייקט מדידה מקורי אחד לכל אורך הפעולה- ייבוא וייצוא XFDF משמרים כל מרובע סימון; הייבוא גם מחיל צבעי RGB/פנים ומנתח קואורדינטות עשרוניות באופן בלתי־תלוי בלוקאל של התהליך
תוקן (Fixed)
- קוראים מדור קודם יכולים שוב לעדכן תוכן ומחבר של הערה על־ידי השמת מחרוזות לא ריקות מבלי להגדיר את הזקיפים החדשים יותר
HasContentsו־HasAuthor - מחרוזות הערה ריקות מפורש כעת משתמשות במאגר מקורי תקין עם סיומת אפס, כך שפינוי
/Contents,/Tומפתחות טקסט אופציונליים אחרים אינו מעביר עוד מצביע nil אל PDFium
Version 2.41.0
שונה (Changed)
- דוחות Preflight של
SaveJsonToFile,SaveMarkdownToFileו־SaveTextToFileכותבים כעת UTF-8 ב־Delphi (בדומה ל־SaveHtmlToFileהקיים), במקום דף קוד ANSI של המערכת; תווים שאינם ASCII בנתיבי קבצים, המלצות והערות היקף שובשו ב־Delphi בעת שמירה באמצעות שיטות אלו SaveCsvToFileכותב כעת UTF-8 עם תחילית BOM, כך ש־Excel עבור Windows מזהה אוטומטית את הקידוד; ללא ה־BOM, Excel מתייחס ל־CSV בקידוד UTF-8 כאל דף קוד 1252 ומשבש תווים שאינם ASCII
תוקן (Fixed)
- הדגמת
ExtractImagesהדליפה אובייקטיTBitmapבמטמון בתוךFExtractedImagesכאשר הטופס נסגר מבלי לנקות אותם במפורש תחילה; הטופס דורס כעת אתDestroyכדי לקרוא ל־ClearExtractedImages, ובכך משחרר כל מפת סיביות במטמון
Version 2.40.0
שונה (Changed)
TPdf.RenderPage(HDC, ...)ממסך כעת חריגות FPU/SSE סביב הקריאה ל־FPDF_RenderPage, בדומה ל־TPdfView.RenderPage(HDC)(תוקן בגרסה v2.25.0) ולכל נקודת כניסה של רינדור המחזירה מפת סיביות; טעינת היתר הישירה ל־DC ברמתTPdfהותירה בעבר חריגות FPU ללא מסכה במהדרים שקדמו ל־D12
תוקן (Fixed)
ColorToARGBמחזיר כעת פיקסל שקוף לחלוטין (אלפא 0) עבורclNoneו־clDefaultבמקום להתייחס לערך הזקיף כצבע RGB מילולי; ההתנהגות הקודמת הפיקה מילוי כהה, כמעט אטום, כאשר הקורא העביר אתclNoneבציפייה ל"ללא צבע"
Version 2.39.1
תוקן (Fixed)
- שמירות מפורשות של PDF 1.3 מסירות כעת רשומות
/SMask /None,/AIS falseו־/TK trueשרק חוזרות על מצב הגרפיקה הראשוני תוך המשך דחיית מצבי שקיפות שאינם ברירת מחדל
Version 2.39.0
שונה (Changed)
CreatePDFו־ImageToPDFמשתמשים כעת ביעדי שמירה מאושרים ומדווחים על הצלחה רק כאשרSaveAsמסתיים בהצלחהBatchExport,PDFtoJpgו־SplitPDFמקצים כעת ספריות פלט ייחודיות כך שהרצות חוזרות וקלטים בעלי שם זהה ישמרו על תוצאות קודמותSplitViewעוטף כעת את החיפוש פעם אחת מבלי להשאיר מצב עמוד מוסתר מאחור לאחר ביטול או אי־התאמה, ומבטל עבודות הדפסה לא שלמות במקום להגיש פלט חלקי
תוקן (Fixed)
MergePDFדוחה כעת אסימוני טווח עמודים פגומים ונתיבי פלט הדורסים את המקור, סופר את העמודים שיובאו בפועל ומסרב לשמור תוצאה ריקה- הדגמות
Attachmentב־Delphi וב־C++Builder מבצעות כעת שמירות באותו נתיב באמצעות החלפת קבצים בטוחה לשחזור (rollback-safe) כך ששינוי שם שנכשל לא יוכל להסיר את ה־PDF המקורי
Version 2.38.0
שונה (Changed)
SetAnnotationDataמגן כעת על כתיבת/Contentsו־/Authorמאחורי זקיפיHasContents/HasAuthorב־TPdfAnnotation, בדומה לתבניתHasName/HasSubject/HasIconהקיימת; בעבר שני שדות אלו נכתבו ללא תנאי, כך ששיוך של רשומתDefault(TPdfAnnotation)לעדכון צבע או דגלים בלבד דרס בחשאי את התוכן והמחבר הקיימים של ההערה במחרוזות ריקות;GetPageAnnotationמגדיר כעת את הזקיפים כך שמחזור קריאה־שינוי־כתיבה ישמור על הערכים המקוריים
תוקן (Fixed)
GenerateFormAppearancesקורא כעת את ערך תיבת הסימון/כפתור הרדיו באמצעותFPDFAnnot_GetFormFieldValue(הפונה למילון השדה ההורה לפי ISO 32000-1 §12.7.5) במקוםFPDFAnnot_GetStringValue(Annot, 'V', ...)(הקורא ממילון הווידג'ט); הווידג'ט בדרך כלל אינו נושא/V, ולכן/ASמעולם לא סונכרן למצב המסומן ותיבת סימון/כפתור רדיו שטוחים רונדרו כלא מסומנים
Version 2.37.0
שונה (Changed)
ParseTsaUrlמגביל כעת את הפורט לטווח1..65535לאחר הניתוח; ערך פורט גדול מדי היה עלול אחרת להסתובב עקב קיטוםDWORDולהסתיים בפורט חוקי- XFDF
ParseFieldמקבל כעת פרמטר עומק (ברירת מחדל 0, מוגבל ל־64) ומחזיר שדה ריק בגבול המגבלה, כך ששרשרת<field>קינון זדוני בעומק 100 000 לא תוכל עוד לגרום לגלישת מחסנית
תוקן (Fixed)
- בקשת TSA HTTP מגנה כעת מפני גוף בקשה ריק לפני העברת
@ReqDer[0]ל־WinHttpSendRequest; דה-רפרנס של מערך דינמי באורך אפס היה ניגש למצביע לא מעוגן;BuildTimeStampReqתמיד מחזיר SEQUENCE שאינו ריק, אך אתר הקריאה מגן כעת על החוזה
הערות (Notes)
- הערת הכותרת של
FPdfTsaWinלגבי בדיקת ביטול HTTPS תוקנה: WinHttp מאמת את שרשרת תעודות השרת כברירת מחדל אך אינו מבצע בדיקת ביטול CRL/OCSP אלא אם כן הופעלה במפורש באמצעותWinHttpSetOption; הניסוח הקודם טען כי בדיקת הביטול "מגיעה בחינם", מה שהיה מטעה
Version 2.36.0
שונה (Changed)
- בקשות TSA HTTP שולחות כעת כותרת
Content-Lengthמפורשת בנוסף לכותרותContent-Typeו־Accept; WinHttp מסנתז אותה מהאורך הכולל, אך כמה פרוקסי RFC 3161 דורשים כותרת מפורשת ודוחים את הבקשה עם השגיאה411 Length Requiredבלעדיה - ייצוא XFDF משמיט כעת תווי בקרה C0 (למעט TAB/LF/CR שכבר עברו אסקייפ) במקום לפלוט רצף לוכסן אחורי-הקסדצימלי לא חוקי; האסקייפ הקודם
\-01Fאינו XML תקין (ללוכסן אחוריאין משמעות מיוחדת ב־XML), ולכן כל קורא תואם היה דוחה את המסמך כפגום InjectAssociatedFilesכותב כעת/Subtypeבמילון זרם EmbeddedFile כאשר הקורא מספקTAssociateFile.MIMEType; השדה הוצהר ותועד אך המזרק קודד בעבר קשיח/Type /EmbeddedFileוהתעלם ממנו (ISO 32000-2 §7.11.4 מאפשר/Subtypeבזרם)
תוקן (Fixed)
- ייבוא XFDF דילג על בית התוכן הראשון לאחר UTF-8 BOM ועל הבית הראשון כאשר לא היה BOM נוכח:
BytesToAnsi(Bytes, 4, ...)(עבור BOM) ו־BytesToAnsi(Bytes, 1, ...)(ללא BOM) השתמשו בהיסט התחלה שגוי בגלל ש־BytesToAnsiמקבל אינדקס מערך המבוסס על 0; הקריאות משתמשות כעת ב־3ו־0 ExtractSignatureValueהיו שני באגים של הזחה תלויה ב־ifשבהםR.Position:= CNרץ ללא תנאי עבור ענפיcertificates [0]ו־signedAttrs [0]האופציונליים; הענפים עטופים כעת ב־begin/endכך שהמיקום מקודם רק כאשר ה־TLV האופציונלי אכן נקרא בפועל (אותה מחלקת באגים תוקנה ב־AddSignatureTimestampToCmsבגרסה v2.22.0)
Version 2.35.0
שונה (Changed)
TFPDFAvail_IsDocAvail,TFPDFAvail_IsPageAvailו־TFPDFAvail_IsFormAvailמקבלים כעתhints: PFX_DOWNLOADHINTSבמקוםvar hints: FX_DOWNLOADHINTS, כך שמצב שאילתה בלבד המתועד כ־nullptr(בדיקת זמינות נוכחית ללא בקשת נתונים נוספים) נגיש מ־Delphi; כותרת PDFium מאפשרת במפורש ל־hintsלהיות null; הקישור הקודם באמצעותvarמנע זאתTFPDF_SetSystemFontInfoמקבל כעתpFontInfo: PFPDF_SYSFONTINFOבמקוםvar pFontInfo: FPDF_SYSFONTINFO, כך שקוראים יכולים להעבירnilכדי להורות ל־PDFium להפסיק להשתמש בממשק גופן מערכת שנרשם בעבר (נתיב ההשבתה המתועד)TPdfThumbnailView.Paintמחשב כעת אתVisibleRowsלפי אותה נוסחה שלUpdateScrollBarRange (ClientHeight div RowHeight), כך שמספר השורות המצוירות תואם לגודל עמוד פס הגלילה; הנוסחה הקודמת לציור בלבד ((ClientHeight - FMarginY) div RowHeight + 1) הייתה עלולה להיות שונה בשורה אחת בגבהי קצה, מה שגרם לבזבוז רינדור בשורה מחוץ לעמוד או להחמצת השורה הגלויה האחרונה
Version 2.34.0
נוסף (Added)
TPdf.SaveAsEncrypted/SaveAsEncryptedToStream— ממשק API ברמה גבוהה השומר את המסמך ואז מצפין אותו באמצעות PDF 2.0 AES-256-CBC (V=5/R=5/R=6); מקבלTPdfEncryptOptionsעם סיסמת משתמש/בעלים, הרשאות וגרסה; מאציל ל־EncryptDocumentBytes- הצפנת מחרוזת מילולית StrF:
EncryptDocumentBytesמצפין כעת מחרוזות מילוליות(...)באובייקטים שאינם זרם (מילון Info וכדומה) למחרוזות הקסדצימליות AES-256-CBC, בהתאמה לפורמט הצפנת הזרם (16-byte IV + PKCS7 ciphertext); מחרוזות הקסדצימליות<...>נותרות ללא שינוי
Version 2.33.0
נוסף (Added)
- מזרק הצפנה של מסמך מלא AES-256-CBC ביחידה
FPdfEncrypt.pas;EncryptDocumentBytesמקבל PDF בטקסט פשוט וסיסמה, מצפין כל אובייקט זרם עקיף (16-byte IV + AES-256-CBC PKCS7 תחת מפתח הקובץ), מתקן את/Length, מצרף את אובייקט מילון/Encrypt, ומבנה מחדש טבלת הצלבה קלאסית מלאה + טריילר עם/Encryptו־/ID; משלים את מחסנית ההצפנה של PDF 2.0 (בלוק AES + GCM + SHA-512/384 + גזירת מפתח R6 + מילון + סריקת מסמכים) - עוזר
EncryptStreamPayload— פורמט זרם PDF 2.0 AES-256 (עם IV בראש ה־AES-CBC-PKCS7 ciphertext), ניתן לשימוש חוזר על ידי קוראים המנהלים פריסת אובייקטים משלהם
Version 2.32.0
נוסף (Added)
- גיבוב SHA-512 / SHA-384 (FIPS 180-4) ביחידה החדשה
FPdfSha512.pas; קוד Pascal טהור, הועבר מ־HotPDF; נדרש עבור איטרציית גיבוב סיסמה של PDF 2.0 R6, המסתעפת לפי ערך mod-3 של 128 סיביות לבחירת SHA-256/384/512 בכל סבב; מאומת מול תשובות ידועות של FIPS-180-4 B.1 - גזירת מפתח הצפנה של PDF 2.0 ובונה מילון Encrypt ביחידה החדשה
FPdfEncrypt.pas; מיישם את אלגוריתם 2.B של ISO 32000-2 §7.6.4.3 (תהליך גיבוב R6: AES-128-CBC + בחירה איטרטיבית של SHA-256/384/512), גוזר את מפתח הצפנת הקובץ בגודל 32 בתים פלוס רשומות/O,/U,/OE,/UEו־/Perms, ומבנה את מילון ההצפנה V=5/R=5/R=6 עם/CFM /AESV3; הועבר מ־PDFlibPas והותאם לסגנון TBytes
Version 2.31.0
נוסף (Added)
- יסודות הצפנת בלוקים AES (FIPS 197) ביחידה החדשה
FPdfAes.pas; הצפנת בלוקים AES-128 ו־AES-256 בקוד Pascal טהור בתוספת עוזרי מצב CBC ומנוע CSPRNG, הועבר מ־HotPDF; בדיקות תשובות ידועות של FIPS-197 נספח C.2 / C.3 מאמתות את התקינות; זהו היסוד הקריפטוגרפי עבור מחסנית ההצפנה של PDF 2.0 - הצפנה מאומתת AES-GCM (NIST SP 800-38D) ביחידה החדשה
FPdfAesGcm.pas; מיישם את GHASH (כפל GF(2^128)), GCTR ומבנה GCM AEAD על גבי יסודות הבלוקים של AES; מקרי בדיקה 1 ו־3 של NIST GCM (עבור AES-128) תואמים בדיוק לטקסט המוצפן ולתג המוסמכים; מקרה בדיקה 13 (עבור AES-256) מבצע סבב מלא בהצלחה; GCM הוא מצב ISO/TS 32003 עבור PDF 2.0 - אימות תקינות של ParentTree ו־ClassMap עבור PDF/A Level A (ISO 19005-1 §6.8.3);
pvaiParentTreeMissingמסמן StructTreeRoot ללא עץ המספרים /ParentTree;pvaiClassMapUnresolvedמסמן הפניית מחלקת /C ללא /ClassMap
Version 2.30.0
נוסף (Added)
- הזרקת קבצים נלווים (
InjectAssociateFiles/TPdf.SaveAsWithAssociateFiles, לפי ISO 32000-2 §7.11.4); היחידה החדשהFPdfAssocFilesמצרפת מערכי/AFשל הפניות filespec לקטלוג או לכל מילון עמוד, ומכסה את כל שמונת ערכי/AFRelationshipשל ISO 32000-2 טבלה 45; עושה שימוש חוזר בתבנית העדכון ההדרגתי שהוכחה על ידיInjectPadesDssMarkers - תמיכה ב־PDF/X-6 (ISO 15930-9:2020);
TPdfXConformanceמוסיף אתpxc6; המזרק והמאמת מעבירים זאת דרך זיהויpdfxid:GTS_PDFXVersion; PDF/X-6 הוא היורש המבוסס על PDF 2.0 של PDF/X-4 לצורך חילופים מלאים - PDF/A אוסר על פעולת
/Thread(פער ברשימת ההיתרים של ISO 19005-1 §6.6.1); רשימת הפעולות האסורות מכסה כעת את Thread לצד Launch, ResetForm, ImportData, SetOCGState, SetState, GoTo3DView, Rendition ו־Hide
תוקן (Fixed)
- נתיב האימות של PDF/A-4e מכבד כעת את אותן בדיקות מבנה תיוג, MarkInfo ומעברי מילים כמו Level A; הורדת הדרגה בצד השמירה בגרסה v2.29.0 כיסתה את
PdfAIsLevelE, אך שלושה שערים שלValidatePdfAComplianceבדקו אתPdfAIsLevelAלבדו, כך שמסמך PDF/A-4e חסר מבנה תיוג עבר בשתיקה - סטיית בדיקת OCG
/BaseState: מעבר ה־PostProcess של גרסה v2.28.0 הרחיב נכון את הקבלה ל־/ONאו/OFF(ISO 32000-1 טבלה 8.70), אך בדיקות Delphi ו־C++ עדיין ציפו ש־/OFFיידחה; הבדיקות משתמשות כעת בערך לא חוקי באמת (/Undefined) ובדיקה חיובית חדשה נועלת את קבלת ה־/OFF - התאמת יתר של גאו-מרחבי
/Subtype /GEO:ContainsDictionarySubtype('GEO')התאים לכל מילון הנושא את האסימון, כולל מילונים לא קשורים כמו/ViewerPreferences << /Subtype /GEO >>תועה;ContainsMeasureDictionarySubtypeהחדש דורש בנוסף/Type /Measureאו מפתח אח ייחודי ל־Measure, כך שמילונים שאינם Measure אינם מפעילים עוד את דרישת ADBE ExtensionLevel 3
Version 2.29.0
נוסף (Added)
- תמיכה ב־PDF/A-4 (ISO 19005-4:2020) לרוחב המאמת, מזרק ה־XMP ושכבת מודל האובייקטים של Pdfium;
TPdfAConformanceמוסיף אתpac4base,pac4fו־pac4e; רמת הבסיס היא PDF 2.0 (ISO 32000-2) והיא מחליפה את רמות ה־A/B/U המיושנות בבסיס + F (טופס) + E (נגישות);ValidatePdfAקורא חבילת XMP מסוגpdfaid:part=4(רמת הבסיס משמיטה את רכיב התאימות),SaveAsPdfAפולט אותה, ו־SignPadesWithPdfAמקבל אתpac4baseכמכל ארכיון ארוך טווח - קישור
FPDFBookmark_GetColor— הייצוא הציבורי האחרון של PDFium שלא היה מקושר (469/469);TBookmarkמקבל שדותHasColorו־Colorהמאוכלסים מתוך מערך ה־/Cשל הסימניה (ISO 32000-1 §12.3.3); הקישור משתמש בטעינה סובלנית כך שקובצי DLL ישנים יותר שקדמו לייצוא ממשיכים לעבוד - בדיקת גרסת כותרת PDF/E-1 (ISO 24517-1 §5) בשם
pveiBadPdfVersion— PDF/E-1 מבוסס על PDF 1.6 וכותרת שאינה 1.6 מסומנת כעת -
pvriEncryptVersionMismatchשל PDF/R-1 (ISO 23504-1) — הצפנה מותרת רק בכותרת%PDF-2.0; גוף 1.x הנושא/Encryptמסומן כעת (בעבר זו הייתה הצהרה ללא השפעה) -
pvriBadMediaBoxשל PDF/R-1 — ה־MediaBoxשל כל עמוד יהיה[0 0 w h];PdfRHasNonZeroMediaBoxOriginהוא סורק ASCII שאינו תלוי מקום המדלג על תיבות MediaBoxes של הפניה עקיפה -
pvaiRoleMapUnresolvedשל PDF/A Level A (ISO 19005-1 §6.8.3.4) — RoleMap נוכח אך לא שלם המותיר סוגי מבנה/Sמותאמים אישית ללא מיפוי מסומן כעת, ובכך סוגר את הפער שהותיר הבדיקה הקיימתpvaiRoleMapMissingשבדקה נוכחות בלבד
תוקן (Fixed)
-
PdfVersionToName(20)החזיר"1.0"במקום"2.0", מה שגרם לשיבוש רשומת ה־/Versionשל הקטלוג והודעות המאמת עבור כל שמירה של PDF 2.0; המעצב מפצל כעת major.minor במפורש עבור קודי גרסה>= 20 - מקודד negative-INTEGER ב־
FPdfAsn1.pasנכשל בהידור תחת Delphi 12 (שגיאהE2015בשורהInteger(-(V<0))), ובכך חסם את כל פרויקט הבדיקות; תוקן על ידי שימוש ב־Int64(-Ord(V<0))עבור מסכת הרחבת הסימן - רשימת ההערות האסורות של PDF/A כוללת כעת את
/RichMediaבכל החלקים (הוחמצה בעבר; ISO 32000-1 §12.5.6.35 אוסר זאת ב־PDF/A)
Version 2.28.0
נוסף (Added)
-
TPdfVersionכולל כעת אתpv20עבור PDF 2.0 (ISO 32000-2);DecodePdfVersion(20)מחזיר אתpv20במקוםpvUnknown, ו־EncodePdfVersion(pv20)פולט 20 כך שגרסת מסמך PDF 2.0 אינה הולכת לאיבוד עוד בקריאה חוזרת וניתן לכתוב אותה במפורש
שונה (Changed)
-
DecodeDateמנתח כעת מחרוזות תאריך של PDF עם שדות נגררים אופציונליים לפי PDF Reference 3.8.3, במקום לדרוש את התבנית המלאה בת 23 התוויםD:YYYYMMDDHHmmSSOHH'mm'; תאריכים מקוטעים תואמים כגוןD:20260712,D:20260712153000ו־D:20260712153000Zמתקבלים כעת; בעבר הם נדחו על ידי שער קשיח שלLength=23; היסט שעות אזור הזמן מאומת כעת מול הטווח האמיתי UTC-12..UTC+14 במקום> 23 -
FPdfMeasure.MeasureTextמקודד כעת את שם הגופן כ־FPCAnsiString/ DelphiUTF8Encode, בדומה לאתרי קריאה אחרים של FPDF_BYTESTRING בספרייה, במקום המרה פשוטה ל־AnsiStringששיבשה שמות משפחות גופנים שאינם ASCII דרך דף הקוד הנוכחי
תוקן (Fixed)
- נתיב ערך שלילי של
TDerWriter.Integerקרס או הפיק DER פגום: הלולאהwhile V <> -1 do V := V shr 8הותירה אתInnerריק עבורValue = -1(שגיאת טווח ב־Inner[Length(Inner)-1]העוקב) והפיקה עודף בתים עבור ערכים שליליים אחרים; המקודד מחלץ כעת בתים של משלים לשתיים עם הזזות מרחיבות סימן ועוצר כהלכה כאשר השארית היא הרחבת סימן טהורה; שדות INTEGER ב־CMS/PAdES הם חיוביים, כך שזה משפיע רק על קוראים המעבירים ערכים שליליים, אך הנתיב תוקן כעת -
TPdf.GetCharacterOriginו־TPdfView.GetCharacterOriginהתעלמו מערך ההחזרה שלFPDFText_GetCharOriginוהחזירו נקודה לא מאותחלת בכשל; התוצאה כעת מאותחלת לאפס וקריאה שנכשלה מחזירה את נקודת המוצא (בהתאם לחוזה שלGetCharacterRectangle)
Version 2.27.0
שונה (Changed)
- הדגמות
PDFViewerו־MultiPageViewerמטפלות בחיפוש,Enter/F3לתוצאה הבאה ו־Escלביטול - הדפסה עוקבת אחר סיבוב הצופה ובוחרת לאורך או לרוחב
- הדגמות
ViewerInteractionLabתומכות בקיצוריםCtrl+A,Ctrl+C,Enter,F3ו־Esc
תוקן (Fixed)
- ביטול הדפסה ב־C++Builder וב־Lazarus עוצר את משימת המדפסת
Version 2.26.0
שונה (Changed)
- שיטות bitmap משתמשות כעת ב־render lock סביב
FPDFImageObj_GetBitmapו־FPDFPage_GetThumbnailAsBitmap TPdf.RenderPageThumbnailמכבדת את/Rotate
תוקן (Fixed)
GetCharacterRectangleמחזירהRect(0,0,0,0)בכשל
Version 2.25.0
שונה (Changed)
- פעולות עריכת טקסט וקישורים מבטלות cache לפני יצירה מחדש
RenderPage(HDC, ...)משתמשת ב־lock וממסכת חריגות FPU/SSE
תוקן (Fixed)
- נקודות מעל U+FFFF מחזירות U+FFFD
TPdf.Destroyמנקה אתPassword
Version 2.24.0
נוסף (Added)
- אינדקסים של דפים וקבצים מצורפים נבדקים ומעלים
EPdfError
תוקן (Fixed)
- דליפות page-object תוקנו ו־
UpdatePageנקראת לאחר הוספת Form XObject
Version 2.23.0
תוקן (Fixed)
- האימות מקבל
/OFF,/Designומערכים מותרים - זיהוי Geospatial Measure אינו דורש
/Type /Measure
Version 2.22.0
שונה (Changed)
- fit zoom משתמש ב־
ClientWidth/ClientHeight AddSignatureTimestampToCmsמעלהExceptionמפורש ומתקנת בלוקbegin/end
תוקן (Fixed)
- Handle CNG משתחרר באמצעות
NCryptFreeObject EcDsaP1363ToDerדוחהr/sאפסיים במקוםINTEGER 0
תוקן (Fixed)
- שמירות מפורשות של PDF 1.5 עד PDF 1.7 דוחות כעת מבני קטלוג
/OCPropertiesפגומים, כולל ערכי/OCGsאו/Dנדרשים חסרים, ערכי תצורת ברירת מחדל לא-חוקיים, ורשומות מצב שאינן מערכים
Version 2.21.12
תוקן (Fixed)
- שמירות PDF 1.5 עד PDF 1.7 דוחות כעת מבני
/OCPropertiesפגומים
Version 2.21.11
תוקן (Fixed)
- שמירות מפורשות עם גרסת PDF דוחות כעת ערכי
/Annotsישירים או עקיפים של עמוד שמילוני ההערות שלהם מחסירים את ערך/Subtypeאו/Rectהנדרש
Version 2.21.10
תוקן (Fixed)
- שמירות מפורשות של PDF 1.7 דורשות כעת שמילוני גאו-מרחבי
/Type /Measure /Subtype /GEOוהערות Projection יצהירו על/Extensions /ADBEעם/BaseVersion /1.7ו-/ExtensionLevel 3או חדש יותר
Version 2.21.9
תוקן (Fixed)
- שמירות מפורשות של PDF 1.7 דורשות כעת שהערות RichMedia ופעולות
RichMediaExecuteיצהירו על/Extensions /ADBEעם/BaseVersion /1.7ו-/ExtensionLevel 3או חדש יותר
Version 2.21.8
תוקן (Fixed)
- שמירות מפורשות של PDF 1.7 דורשות כעת שזרמי PRC תלת-ממד יצהירו על
/Extensions /ADBEעם/BaseVersion /1.7ו-/ExtensionLevel 1או חדש יותר, במקום לטפל ב-PRC כתכונת ליבה של PDF 1.7
Version 2.21.7
תוקן (Fixed)
- שמירות מפורשות של PDF 1.4 וישנות יותר דוחות כעת ערכי
/SMaskInDataשל XObject תמונה, כולל ערך מפורש של0, מאחר שערוצי מסכה-רכה מוטמעים של JPEG 2000 דורשים PDF 1.5 או חדש יותר
Version 2.21.6
תוקן (Fixed)
- שמירות מפורשות של PDF 1.4 וישנות יותר דוחות כעת XObjects תמונה בעלי 16 סיביות, הדורשים PDF 1.5 או חדש יותר, בעוד שיעדי PDF 1.5 עד PDF 1.7 שומרים את נתוני התמונה
/BitsPerComponent 16שלהם
Version 2.21.5
תוקן (Fixed)
- שמירות מפורשות של PDF 1.4 וישנות יותר דוחות כעת ערכי קטלוג המסמך
/PageLayout /TwoPageLeftו-/TwoPageRight, הדורשים PDF 1.5 או חדש יותר, בעוד שיעדי PDF 1.5 עד PDF 1.7 שומרים את פריסת שני-העמודים המבוקשת
Version 2.21.4
תוקן (Fixed)
- שמירות מפורשות של PDF 1.3 דוחות כעת ערכי
/Langשל קטלוג המסמך, הדורשים PDF 1.4 או חדש יותר, בעוד שיעדי PDF 1.4 עד PDF 1.7 שומרים את מזהה השפה
Version 2.21.3
תוקן (Fixed)
- שמירות מפורשות של PDF 1.3 דוחות כעת עצי שמות
/EmbeddedFilesשל מסמך, הדורשים PDF 1.4 או חדש יותר, מבלי לדחות זרמי קבצים מוטמעים המוזכרים דרך מפרטי קבצים ישנים יותר
Version 2.21.2
תוקן (Fixed)
- שמירות מפורשות של PDF 1.3 דוחות כעת זרמי מטא-נתונים פעילים, הדורשים PDF 1.4 או חדש יותר, תוך שמירתם ליעדי PDF 1.4 עד PDF 1.7
Version 2.21.1
תוקן (Fixed)
- אימות הפניית-היברידית מחיל כעת ערכי
/XRefStmמשלימים לפני מציני-מקום xref קלאסיים מאותה גרסה, כך שהערות דחוסות ואובייקטים אחרים מוגבלי-גרסה אינם עוד מוחמצים כאשר טבלת התאימות מסמנת אותם כחופשיים
Version 2.21.0
שונה (Changed)
- כל דוגמאות מציג Delphi, C++Builder ו-Lazarus יכולות לפתוח PDF שהועבר כארגומנט שורת הפקודה הראשון, ודוגמאות C++Builder ו-Lazarus של
MultiPageViewerמספקות קיצורי דרך מפורשים לבחירת-הכל והעתקה
תוקן (Fixed)
- דוגמאות המציג דוחות כעת יעדי עמוד לא-חוקיים של סימניות וקישורים, שומרות שגיאות טעינה, מאמתות קלט זום ידני באופן עקבי, מדפיסות את עמוד המילוי-טפסים המבוקש במקום לחזור על העמוד הגלוי, ומפסיקות משימות הדפסה מבוטלות של Delphi במקום להגיש פלט חלקי
Version 2.20.0
שונה (Changed)
- כל דוגמאות מציג Delphi, C++Builder ו-Lazarus מספקות כעת קיצורי דרך עקביים לפתיחה, חיפוש, שמירה, הדפסה, זום וניווט עמודים, בעוד כל גרסה של
ViewerInteractionLabתומכת גם בקפיצות עמוד, זום ידני מאומת של 10–600%, יומני אינטראקציה מתמידים ובדיקות מחזוריות של קואורדינטות לחיצה
Version 2.19.1
תוקן (Fixed)
- אימות גרסת PDF מפורשת עוקב כעת אחר שרשרת הגרסה הקלאסית, ההיברידית או זרם-xref הפעילה, כולל ערכי אובייקטים דחוסים, כך שאובייקטים שהוחלפו, שוחררו ושאינם מוזכרים אינם עוד גורמים לכשלי גרסת-תכונה שגויים
Version 2.19.0
שונה (Changed)
- דוגמאות C++Builder ו-Lazarus של צרופות, חילוץ תמונות, חילוץ טקסט, המרת עמודים ופיצול משתמשות כעת בתיקיות פלט ייעודיות או בקבצים שסיימו בצורה מאובטחת, שמות ממוספרים יציבים עם אפס מוביל, עדכוני התקדמות רספונסיביים, וסיכומי השלמה עם ספירות שגיאות לפריט
תוקן (Fixed)
CJKTextLabשל C++Builder מודד כעת טקסט דרך פונקציות עריכת PDFium המיוצאות, ו-MergePDFנמנע מעומס VCL message דו-משמעי, ומשחזר בניות נקיות של RAD Studio 37
Version 2.18.3
תוקן (Fixed)
- חותמת הזמן של Document Time-stamp ב-PAdES B-LTA רשומה כעת כשדה חתימה ניתן-לגילוי — Widget בלתי-נראה הניתן להגעה דרך
/Annotsשל העמוד הראשון ו-/Fieldsשל AcroForm (ETSI EN 319 142-1 §5.4.3) — במקום אובייקט-עצמאי שאינו ניתן להגעה שמאמתים המונים שדות-חתימה לא יכלו למצוא; הערות ושדות קיימים נשמרים
Version 2.18.2
תוקן (Fixed)
- חתימת PAdES וכתיבת הפניה-צולבת קלאסית מעלות כעת שגיאה ברורה כאשר היסט-בית חורג מרוחב שדה קבוע בן 10 ספרות (~9.3 GB) במקום להשאיר את מציין-המקום
/ByteRangeללא כתיבה בשקט (מייצר חתימה לא-חוקית) או לחרוג משורת xref בת 20 בתים (ISO 32000-1 §7.5.4); פלט זרם-הפניה-צולבת משתמש בשדות בינאריים בני 8 בתים ואינו מושפע
Version 2.18.1
תוקן (Fixed)
- חתימת PAdES פותרת כעת הפניות
/Annots,/AcroFormו-/Fieldsעקיפות של העמוד הראשון לפי כותרת אובייקט שלמה (ISO 32000-1 §7.3) ולפי מספר הדור בפועל של ההפניה; חיפוש מחרוזת-משנה גולמי התאים בעבר מספר אובייקט בתוך ארוך יותר (פתר5 0 Rל-15 0 obj) ודור מקודד-קשיח החמיץ אובייקטים עםgen>0, וכתוצאה מכך פגם במערכי שדה-חתימה או דחיית מסמכים חוקיים - כאשר הקטלוג, העמוד הראשון,
/Annots,/AcroFormאו/Fieldsנמצאים בתוך זרם-אובייקט, החתימה מנסה כעת מחדש על עותק מורחב לפני כישלון במקום לדחות את המסמך לחלוטין
Version 2.18.0
נוסף (Added)
ReadPdfVersionInfoמדווח על גרסת הכותרת, גרסת הליבה האפקטיבית, עקיפת הקטלוג ורמת תוסף מפתח Adobe מזרם PDF
שונה (Changed)
- שמירות מפורשות של PDF 1.3-1.7 מאמתות כעת מבני קטלוג, משאבי עמוד, XFA, עריכה-מחדש ותוספות-מפתח בהקשר האובייקט המחזיק שלהם; פלט מוצפן עם גרסה מפורשת ונירמול מצטבר של PDF 1.3 נדחים כדי לשמור על שלמות המסמך
- שמירות בנתיב-קובץ כותבות כעת לקובץ זמני סמוך ומחליפות את היעד רק לאחר הצלחת כל בדיקות הדחיסה, הנירמול והגרסה
תוקן (Fixed)
- פלט PDF 1.3 נושא כעת את משאב
/ProcSetהמלא הנדרש ומסיר מפתחות שקיפות של PDF 1.4 כאשר הם חוזרים רק על ערכי מצב-גרפיקה ראשוניים של PDF 1.3 - קבצי הפניה-היברידית, זרם-xref ואובייקט-זרם אינם עוד נכתבים מחדש על-ידי מדחס-xref הקלאסי, ומונע השמטת ערכי אובייקטים דחוסים
- שמות הדומים למפתחות תכונת שקיפות או קטלוג בתוך מחרוזות, הערות או מפות משאבים לא-קשורות אינם עוד גורמים לכשלי גרסת-יעד שגויים
Version 2.17.0
נוסף (Added)
- חתימות PAdES רשומות כעת כהערות Widget בלתי-נראות במערך
/Annotsשל העמוד הראשון ובמערך/Fieldsשל AcroForm, תוך שמירת הערות ושדות טפסים קיימים
שונה (Changed)
- עדכונים מצטברים של PDF/A, PDF/X, PDF/E, PDF/R, PDF/UA, PDF/VT ו-PAdES שומרים כעת על ייצוג ההפניה-הצולבת של המקור: מסמכים עם זרם-xref מקבלים עדכון זרם-xref כנדרש על-ידי ISO 32000-1 §7.5.8.1, בעוד מסמכים קלאסיים ממשיכים לקבל טבלת xref
- היסטי הפניה-צולבת,
startxref,/Prev, ערכי ByteRange של PAdES ועיבוד טווח SHA-256 משתמשים כעת במיקומים של 64 סיביות עם גיבוב מחולק, ומאפשרים קבצים גדולים מ-2 GB בבניות של 64 סיביות - מנות XMP לכתיבה שנוצרו שומרות כעת 2048 בתים של ריפוד לפני הוראת-סיום-המנה הסוגרת
Version 2.16.10
תוקן (Fixed)
- הרחבת זרם-אובייקט אינה עוד מחיה עותקים ישנים של אובייקטים שעדכון מצטבר העביר מחוץ לזרם-אובייקט להגדרה פשוטה (ISO 32000-1 §7.5.7); בדיקות תאימות והזרקת סמנים פתרו בעבר את הקטלוג המיושן או מילון המטא-נתונים על קבצים כאלה
Version 2.16.9
תוקן (Fixed)
- ב-Free Pascal, מחרוזות טקסט שהקלט שלהן אינו UTF-8 חוקי מורחבות בית-אחר-בית כ-Latin-1 ונכתבות כמחרוזות hex של UTF-16BE; הבתים הגבוהים הגולמיים דלפו בעבר למחרוזת מילולית, שאינה קידוד מחרוזת-טקסט חוקי של PDF 1.7
- פענוח זרמים מזהה כעת נתוני deflate גולמיים ללא עטיפת zlib של RFC 1950 (פגם נפוץ של כותבים שבורים) ומפענח אותם במצב גולמי, כך שסריקות תאימות אינן עוד עיוורות בשקט על זרמים כאלה
Version 2.16.8
תוקן (Fixed)
- עדכונים מצטברים הנכתבים על-ידי נתיב עיבוד-לאחר-שמירה מרעננים כעת את האלמנט השני (המשתנה) של ה-
/IDשל הטריילר כנדרש על-ידי ISO 32000-1 §14.4; שני האלמנטים הועתקו בעבר כמות שהם, כך שכלי מטמון וסנכרון ראו מזהה ללא שינוי לאחר כל עדכון
Version 2.16.7
תוקן (Fixed)
- הריקת גוף-זרם המשמשת לסריקות תאימות דורשת כעת שמילת המפתח
streamתבוא אחריה סוף-שורה (ISO 32000-1 §7.3.8.1); המילה בתוך מחרוזת מילולית כגון(downstream)הרוויחה בעבר את כל המבנה הבא עד ה-endstreamהבא, והסתירה הפרות אמיתיות מבדיקות ברמת-בית - סריקות תכונות אסורות של PDF/X ו-PDF/E מרוקנות בנוסף מחרוזות מילוליות והערות (§7.2.2), כך שערך כגון
/Title (see /JavaScript docs)או אסימון בתוך הערה אינו עוד מייצר ממצא שגוי שלJavaScript,AcroFormאוLZWDecode
Version 2.16.6
תוקן (Fixed)
- ערכי DPM של PDF/VT מאומתים כעת בזמן-כתיבה כמתועד: שמות מפתחות המפרים את כלל NMTOKEN של ISO 16612-2 §6.6 או כלל קידומת-הרשאמה של נספח E, ושמות כפולים, נדחים במקום להיכתב למילון DPart — שם המכיל רווח פוצל בעבר לזוג מפתח/ערך בוגס ופגם את המילון
Version 2.16.5
תוקן (Fixed)
- הסרת ערך מילון שערכו הוא מחרוזת hex (כגון
/Check <...>) מסירה כעת את הערך כולו; המזריקים השאירו בעבר ערך hex עצמאי, ויצרו מילון פגום תחבירית - הסרת ערך שהפניתו העקיפה משתמשת בשורות חדשות בין האסימונים (ISO 32000-1 §7.3.10 מאפשר כל רווח לבן) אינה עוד משאירה את מספר הדור ומילת המפתח
Rמאחור
Version 2.16.4
תוקן (Fixed)
- סריקת מספר-האובייקט-המרבי אינה עוד דורשת שכותרות אובייקט יתחילו שורה (ISO 32000-1 §7.5.3 מאפשר כל רווח לבן או מפריד לפניהן), כך שמזריקים אינם עוד יכולים להקצות מספר אובייקט המתנגש עם כותרת
N G objמוטמעת ולפגום את הקובץ בשקט; מספרי אובייקט מוגבלים על-ידי תקרת נספח C - זרמים שה-
/Lengthשלהם הוא הפניה עקיפה פותרים כעת את אובייקט-המספר-השלם המוזכר ומשתמשים בערכו כאשר הוא מתיישב עם ה-endstreamהסוגר; בעבר זרמים כאלה הוגבלו על-ידי חיפוש-תבנית, שגזר גופים המכילים חוקית את רצף הבתיםendstream— אופייני לצרופות PDF מוטמעות
Version 2.16.3
תוקן (Fixed)
- דחיסת זרמים מעבירה מסמכים של זרם-הפניה-צולבת (קבצי PDF 1.5+ ללא מילת מפתח
trailerקלאסית) ללא שינוי; נתיב-הבנייה מחדש פירש בעבר בטעותstartxrefכמיקום הטבלה ויצר טריילר מנוחש, שהיה יכול לייצר קובץ שלא ניתן לפתוח - המדחס מדלג על זרמי מטא-נתונים XMP כך שמסמך PDF/A שומר את זרם המטא-נתונים הבלתי-מסונן המנדטורי שלו (ISO 19005-1 §6.7.2), ומשאיר זרמי קבצים חיצוניים (
/Fעם/FFilter) ללא שינוי - טבלת ההפניה-הצולבת הנבנית מחדש סורקת עותק מסמך נקי-מזרמים, כך שתוכן זרם בינארי אינו יכול עוד לזייף כותרות אובייקט או לנפח את הטבלה; ה-
/Sizeשל הטריילר הנבנה מחדש משקף כעת את הטבלה בפועל ומספרי אובייקטים מוגבלים בתקרת נספח C - איתור טבלת ההפניה-הצולבת המקורית מקבל סיומות שורה CR-בלבד (ISO 32000-1 §7.5.1) ואינו יכול עוד להתאים את אותיות
xrefבתוךstartxref; סריקת מילות מפתח זרם זכתה לאותו מגןendstream-זנב המשמש במקומות אחרים ומתקדמת כעת מעבר לגופי זרמים שדולגו
Version 2.16.2
תוקן (Fixed)
- פענוח מספרים שלמים ברחבי קוראי PDF ברמת-בית מקבל כעת את הסימן
+המפורש המותר על-ידי ISO 32000-1 §7.3.3 ודוחה ריצות ספרות שיגרמו לגלישה, כך שמסמכים עוינים או פגומים אינם יכולים עוד לעטוף אורכים והיסטים מפורשים לערכים מטעים
Version 2.16.1
תוקן (Fixed)
- מזריק PDF/UA כותב את ערך
/Langשל הקטלוג כמחרוזת טקסט PDF תקנית; הוא הריץ בעבר את הערך דרך מתמלל ה-XML, כך שתג שפה המכיל&או סוגריים ייצר ערך פגום, וקלט שאינו ASCII נכתב כ-UTF-8 גולמי - ערך Info
/ISO_PDFEVersionשל PDF/E משתמש במקודד מחרוזת-טקסט המשותף, ושומר ערכים שאינם ASCII חוקיים ב-PDF 1.7 - בריחת XML עבור מנות XMP מורידה תווי-בקרה שאינם חוקיים ב-XML 1.0, כך שמטא-נתונים שהועתקו ממסמך מקור פגום אינם יכולים עוד להפוך את זרם המטא-נתונים כולו לבלתי-תקין
- המרת תאריך PDF-ל-XMP מאמתת שאפסי תאריך הם מספריים ומשלימה שדה דקות חסר, ומונעת תאריכי ISO 8601 פגומים ב-XMP שנוצר; על פלטפורמות שאינן Windows, חותמת הזמן החלופית כוללת כעת את שעת היום במקום התאריך הבודד
Version 2.16.0
נוסף (Added)
- פענוח זרמים בונה כעת מחדש פרדיקטורי
/DecodeParms(פרדיקטורי PNG 10-15 ופרדיקטור TIFF 2, ISO 32000-1 §7.4.4.4) לאחר FlateDecode, תוך כיבוד/Colors,/BitsPerComponentו-/Columns; זרמי אובייקטים הדחוסים עם פרדיקטור — בחירה נפוצה של כותבי PDF 1.5+ — חשפו בעבר בתים ממורזלים, כך שהאובייקטים שהם נושאים היו בלתי-נראים בשקט לסריקות תאימות ולהזרקת סמנים
תוקן (Fixed)
- זיהוי FlateDecode מנתח כעת את ערך
/Filterכשם או מערך במקום התאמת מחרוזת-משנה, כך שרשתות-סינון מדורגות והופעות המילה בתוך ערכים לא-קשורים אינן עוד מפעילות inflate בוגס; שרשתות לא-נתמכות חוזרות לבתים הגולמיים כבעבר
Version 2.15.1
תוקן (Fixed)
- סורק המילון מדלג כעת על מחרוזות מילוליות, מחרוזות hex והערות תוך איזון
<</>>(ISO 32000-1 §7.2.2), כך שמילונים המכילים ערכים כגון(A >> B)או מחרוזת hex הצמודה למפריד הסוגר אינם עוד נגזרים בניתוח טריילר, קטלוג וסריקות תאימות - חילוץ מחרוזות מילוליות מפענח כעת את מערך בריחה המלא של §7.3.4.2 טבלה 3 —
\n \r \t \b \f, אוקטלי\ddd, המשכי שורה ונירמול EOL ללא-בריחה — במקום להעתיק את אות הבריחה כמות שהיא, ומשחזר השוואות/Producer,/GTS_PDFXVersionו-/ISO_PDFEVersionנכונות עבור כותבים המשתמשים בבריחות אוקטליות - מחרוזות מילוליות הנכתבות על-ידי מזריקי-הסמנים בורחות כעת CR, LF ותווי-בקרה אחרים כך שהערכים שורדים את נירמול-סוף-השורה בצד-הקורא בית-ב-בית
Version 2.15.0
תוקן (Fixed)
- עדכונים מצטברים הנכתבים על-ידי מזריקי-הסמנים של PDF/A, PDF/X, PDF/E, PDF/R, PDF/UA ו-PDF/VT ועל-ידי נתיבי חתימת PAdES ו-DSS שומרים כעת על מזהה הקובץ הקבוע של מסמך המקור: האלמנט הראשון של הטריילר
/IDמועבר כמות שהוא כנדרש על-ידי ISO 32000-1 §14.4 ורק האלמנט השני (המשתנה) מתרענן; בעבר שני האלמנטים נוצרו מחדש, כך שהפניות חיצוניות ותהליכי אימות-ארוך-טווח ראו זהות מסמך שונה לאחר כל שמירה - חתימות PAdES, הזרקת DSS וחותמות Document Time-stamp ב-B-LTA מעבירות כעת את הפניית
/Infoשל טריילר המקור קדימה (ISO 32000-1 §7.5.6), כך שמאפייני המסמך אינם עוד נעלמים מלוחות הקורא לאחר חתימה; טריילר ה-Document Time-stamp זוכה גם הוא למערך/ID - ה-fallback של הטריילר
/Infoעבור מסמכים של זרם-הפניה-צולבת אותר כעת את מילון זרם ה-XRef בצורה נכונה ושומר את מספר הדור של ההפניה; הוא לא הותאם בעבר מעולם על קבצי PDF 1.5+ תואמים, והפיל/Infoבשקט
Version 2.14.4
תוקן (Fixed)
- תאריך
/Mשל מילון החתימה הנכתב על-ידיTPdf.SignPadesו-SignPadesBytesנושא כעת את קידומתD:המנדטורית ואת סמן UTCZהנדרשים על-ידי ISO 32000-1 §7.9.4; מאמתים קפדניים דחו בעבר את זמן-החתימה כמחרוזת תאריך פגומה
Version 2.14.3
תוקן (Fixed)
- חיפושי מפתח-מילון בקורא PDF המשותף מתאימים כעת אסימוני שמות שלמים (ISO 32000-1 §7.3.5); בעבר זרם שמילונו רשם
/Length1לפני/Length(אופייני לזרמי FontFile) נחתך לספירת-בתים שגויה, והיה עיוור בשקט לסריקות PDF/A, PDF/UA ותאימות אחרות שקראו זרמי גופנים, CMap או מטא-נתונים - חיפושי טריילר של
/Encrypt,/Root,/Sizeו-/Infoאינם עוד מתאימים מפתחות ארוכים יותר המשתפים את אותה קידומת (כגון/EncryptMetadata) - הרחבת זרם-אובייקט אינה עוד מאמינה לערך
/Nפגום או עוין: ערכים שאינם-מספרים שלמים מניבים כעת 0 במקום מספר לא-מאותחל, וגבול עליון הנגזר מ-/Firstמונע הקצאות יתר תוך סריקת מסמכים פגומים
Version 2.14.2
תוקן (Fixed)
- מזריקי-הסמנים של PDF/X, PDF/VT, PDF/UA, PDF/E ו-PDF/R מעתיקים כעת מסמכי מקור מוצפנים ללא שינוי במקום להוסיף מקטעי עדכון בטקסט-גלוי; ההתנהגות הקודמת ייצרה קבצים שהטריילר האחרון שלהם איבד את ערך
/Encrypt(ISO 32000-1 §7.5.6), כך שקוראים תואמים קראו את הגוף המוצפן כטקסט-גלוי TPdf.SignPades,SignPadesBytesו-InjectPadesDssMarkersמעלים כעתEPadesCryptoכאשר מסמך המקור מוצפן, במקום לפלוט קובץ פגום או שלא ניתן לאמת בשקט; הסר הצפנה לפני חתימה או הטמעת חומר DSS
Version 2.14.1
תוקן (Fixed)
TPdf.SignPadesו-SignPadesBytesממלאים כעת לאחור את כל ארבעת שדות/ByteRangeשל מילון החתימה; בעבר שלושת השדות האחרונים נשארו על מציני-המקום האפסיים שלהם, כך שחתימות שנוצרו הצהירו על טווח-בתים ריק ונכשלו באימות אצל מאמתים תואמים- מילוני Document Time-stamp ב-PAdES B-LTA מקבלים את אותה תיקון מילוי-לאחור של
/ByteRange ValidatePadesComplianceמקבל כעת את פריסת-החתימה הסטנדרטית שבה פער טווח-הבתים מחזיק את ערך ה-/Contentshex, ובודק שמקטע הטווח השני מסתיים בדיוק בסוף הקובץ; בעבר רק טווחים ללא-פערים עברו את בדיקת הכיסוי
Version 2.14.0
נוסף (Added)
TPdf.ExportXFDFמסדרת כל ערך שדה טופס והערה בכל העמודים למסמך XFDF (ISO 19444-1), פולטת<fields>עבור ערכי טפסים היררכיים ו-<annots>עבור כל תת-סוגי ההערות הנתמכים (text, highlight, underline, strikeout, squiggly, line, circle, square, caret, polygon, polyline, stamp, ink, freetext, fileattachment, sound, link, redact)TPdf.ImportXFDFקורא מסמך XFDF בחזרה ל-PDF הטעון, יוצר מחדש הערות בעמודים המתאימים ומחיל ערכי שדות על הערות widget שלהם- הרשומה
TPdfAnnotationזכתה לשדותName(NM),Subject,ModificationDate(M),CreationDate,Icon,Opacity(CA), נקודות-קצה של קו, קודקודי פולגון/פוליקו ושדות מחוות רשימת-דיו כך שסיבובי XFDF שומרים את מטא-נתוני ההערה המלאים - דוגמה חדשה
XfdfLabבסדרות Demo של Delphi, C++Builder ו-Lazarus מדגימה את סיבוב הייצוא/ייבוא
Version 2.13.6
תוקן (Fixed)
ValidatePdfAמתייחס כעת לזרמי קטלוג/Metadataללא/Type /Metadataאו/Subtype /XMLכמטא-נתונים XMP חסרים דרךpvaiMissingXmpMetadata- דוחות בדיקה מקדימה של PDF/A מסווגים כעת
pvaiMissingXmpMetadataכמטא-נתונים וממליצים על זרם קטלוג/Metadataעם/Type /Metadata,/Subtype /XML, XMP בלתי-מסונן וסמניpdfaid
Version 2.13.5
תוקן (Fixed)
ValidatePdfAמדווח כעת על הערות Widget ללא מילון מראה ועל הערות PDF/A-2 / PDF/A-3 הדורשות אך חסרות/APדרךpvaiAnnotationApDictViolation- דוחות בדיקה מקדימה של PDF/A מסווגים כעת
pvaiAnnotationApDictViolationכתוכן שהזרקת-סמנים אינה יכולה לתקן
Version 2.13.4
תוקן (Fixed)
ValidatePdfAמדווח כעת על תמונות מוטמעות של PDF/A-2 ו-PDF/A-3 שערך/Iאו/Interpolateשלהן הואtrueדרךpvaiImageDictionaryViolation, התואם לכיסוי מילון XObject תמונה הקיים- דוחות בדיקה מקדימה של PDF/A מסווגים כעת
pvaiImageDictionaryViolationכתוכן שהזרקת-סמנים אינה יכולה לתקן
Version 2.13.3
תוקן (Fixed)
ValidatePdfAמדווח כעת על תמונות מוטמעות של PDF/A-1 המשתמשות במסננים/LZWDecodeאו/LZWמקוצר בתוך זרמי תוכן דרךpvaiInlineImageLzwForbidden, התואם לכיסוי תמונות מוטמעות הקיים של PDF/A-2 ו-PDF/A-3- סורק מסנן-תמונות-מוטמעות מתקדם כעת מעבר לשמות משאבים מובילים כגון
/GS1, ומונע עצירות תוך סריקת זרמי תוכן רחבים יותר של PDF/A-1
Version 2.13.2
נוסף (Added)
TPdf.SetFocusedFormFieldTextכותב טקסט לתוך מאגר העריכה של שדה הטופס הממוקד כיום דרךFORM_ReplaceSelection, סימטרי ל-FocusedFormFieldText. עבור שדות טקסט/קומבו של AcroForm הערך מחויב ל-/Vעם איבוד-מיקוד ומתמיד; עבור שדות טקסט XFA הכתיבה נוחתת רק במאגר-הזיכרון (PDFium אינו חושף API ציבורי לפיוס ערכי XFA חזרה למנת הנתונים, לכן אינה מתמידה לאחר שמירה)- פלטפורמת JavaScript מחוברת כעת בכל פעם שמנוע V8 זמין, ללא קשר לשאלה האם המסמך הוא XFA — כך ש-JavaScript מוטמע של AcroForm (סקריפטים ברמת מסמך, חישובי שדה,
app.alert) יכול להתבצע גם כן. בעברm_pJsPlatformחובר רק עבור מסמכי XFA, והשאיר את JS של AcroForm מושבת בשקט
שונה (Changed)
- חיבור פלטפורמת JavaScript הוא כעת עצמאי מההחלטה על XFA ב-
InitializeFormFill— טבלתm_pJsPlatformנבנית בכל פעם ש-V8FeaturesAvailableהוא true, ומוחלת לאחר חיווט גרסת XFA/callback במקום להיות מקוננת בתוכו
Version 2.13.1
נוסף (Added)
- אירועי מארח חדשים חושפים מידע שה-callbacks של מילוי-טפסים ב-v2.13.0 בלעו בעבר:
OnXfaUriAction,OnXfaPageCountChanged,OnXfaFocusChange,OnXfaEmail,OnXfaHttpRequest,OnXfaOpenFile,OnJavaScriptBeep,OnJavaScriptPrint,OnJavaScriptMail,OnJavaScriptSubmitForm. כל אירוע מוגדר כברירת-מחדל להתנהגות no-op הקיימת כאשר לא-מוקצה, כך שמארחים קיימים אינם מושפעים - מאפיין לקריאה-בלבד
TPdf.XfaFormPacketsמחזיר תמונה חד-פעמית של כל מנות XFA (TXfaPacketList), ממלא את הטיפוסיםTXfaPacket/TXfaPacketListשהוצהרו בעבר אך לא שומשו - קודי שגיאת PDFium ייחודיים ל-XFA
FPDF_ERR_XFALOAD/FPDF_ERR_XFALAYOUTמאוגדים כעת וחשופים דרךLastPdfError, ומחליפים את "Unknown error" הגנרי עבור כשלי טעינה/פריסה של XFA
שונה (Changed)
FFI_DoURIActionWithKeyboardModifierמייעץ כעת ל-OnXfaUriActionלפני ביצוע-מעטפת של URI משדה XFA, ומעניק למארח זכות-וטו (אבטחה: שדה XFA זדוני יכול היה בעבר להפעיל URL שרירותי ללא תנאי). מטפלים לא-מוקצים שומרים על ברירת-המחדל הקודמת שלShellExecuteWDecodeFormFieldTypeמנתב כעת סוגי שדה XFA דרךIsXfaFormFieldבמקום case בת 8-ענפים מפורשת, ושומר את ה-enum מיושר עםFPDF_FORMFIELD_XFA_*לפי היסט סידורי
תוקן (Fixed)
ValidatePdfAמדווח כעת על טענות PDF/A-1 המשתמשות בזרמי הפניה-צולבת של PDF 1.5 או זרמי אובייקטים עם הנושא החדשpvaiPdfA1Pdf15Structure, תוך המשך אפשרות-זרמי-אובייקטים לגבי PDF/A-2 ו-PDF/A-3
Version 2.13.0
נוסף (Added)
- תמיכת-זמן-ריצה מלאה של XFA (XML Forms Architecture):
TPdf.InitializeFormFillמחווט כעת את כל 14 ה-callbacks מגרסה 2 שלFPDF_FORMFILLINFO(FFI_DisplayCaret,FFI_GotoURL,FFI_PageEvent,FFI_PopupMenu,FFI_OpenFile,FFI_EmailTo,FFI_UploadTo,FFI_GetPlatform,FFI_GetLanguage,FFI_DownloadFromURL,FFI_PostRequestURL,FFI_PutRequestURL,FFI_OnFocusChange,FFI_DoURIActionWithKeyboardModifier) ומצרףIPDF_JsPlatformכך ש-pdfium.dllמאופשר-XFA יכול לרנדר ולסקריפט טפסי XFA דינמיים - יחידה חדשה
Lib\FPdfXfa.pasהמצהירה על קבועי XFA (FXFA_PAGEVIEWEVENT_*,FXFA_MENU_*,FXFA_SAVEAS_*,FPDF_FORMFIELD_XFA_*) וסוגיTXfaPacket/TXfaSaveFormatשהוזכרו בעבר רק בהערות - קורא מנות XFA סטטי על
TPdf:GetXfaPacketCount/GetXfaPacketName/GetXfaPacketContent/GetXfaPacketByNameבתוספתGetXfaTemplate/GetXfaDatasets/GetXfaConfigמחלצים את מנות XFAtemplate,datasetsו-configכ-XML גולמי ללא צורך בסביבת-זמן-ריצה מאופשרת-XFA — שימושי לביקורת תאימות ולהעברת נתונים - בדיקות יכולת: גלובלי
XfaFeaturesAvailable, ולכל-מסמךTPdf.XfaRuntimeAvailable(האםFPDF_LoadXFAאכן הצליח) ו-TPdf.XfaStaticReadable(האם יצוא קורא-המנות מסתייע) TPdfFormFieldTypeהורחב עםfiXfa,fiXfaCheckBox,fiXfaComboBox,fiXfaImageField,fiXfaListBox,fiXfaPushButton,fiXfaSignature,fiXfaTextField, כאשרDecodeFormFieldTypeממפה את ערכיFPDF_FORMFIELD_XFA_*החדשים- אירועי JavaScript מארח על
TPdf:OnJavaScriptAlert,OnJavaScriptResponse,OnXfaGotoUrlו-OnXfaRuntimeMissingמאפשרים למארח להתאים דיאלוגי JS וניווט XFA, או להגיב כאשר מסמך XFA אינו יכול להריץ את המנוע - דוגמה חדשה
XfaLabשל Delphi המדגימה זיהוי XFA, חילוץ מנות, בדיקת יכולת ונתיב-fallback של חסר-זמן-ריצה
שונה (Changed)
TPdf.LoadDocumentסורק כעת מראש את הקלט לאיתור סמני XFA (/XFAבמילון AcroForm, או קטלוג/NeedsRendering) וכאשר נמצא, בוחר אוטומטית ב-pdfium.v8.dllעל-ידי הגדרתEnableV8Engine := Trueלפני שהספרייה הבודדת נטענת לראשונה; ברגע שה-pdfium.dllהרגיל נטען, התהליך אינו יכול לעבור, ולכןOnXfaRuntimeMissingמאותת על מקרה זהTPdf.GetPageCountמשקף כעת את ספירת-העמודים שמנוע XFA מדווח עליה דרךFFI_PageEventלאחר דף-מחדש דינמי, ולא רק עץ-העמודים הסטטי של PDF- כאשר מסמך XFA נפתח אך זמן-הריצה אינו זמין,
InitializeFormFillמנעל כעתversion=1ו-xfa_disabled=1במקום לבקש גרסה 2 עם callbacks לא-מוקצים, שיכלו להסתכן בגישה שגויה למצביע callback
Version 2.12.2
תוקן (Fixed)
ValidatePdfAComplianceמדווח כעת על מרחבי שמות XMP מותאמים-אישית ללאpdfaExtension:schemasתוך המשך קבלת מטא-נתוניpdfaidסטנדרטיים ללא הצהרות-הרחבה- אימות קבצים מוטמעים של PDF/A-3 דורש כעת גם ערכים עליונים
/Fוגם/UFעל מילוני filespec ומתעלם ממפתחות זרם/EFמקוננים בבדיקת שמות אלה
Version 2.12.1
תוקן (Fixed)
ValidatePdfAComplianceמפענח כעת אסימוני שמות PDF מובאים-במיוחד לפני התאמת JavaScript, LZWDecode, Type1 ושמות אסורים קשורים, כך שששמות זהים מבחינה סמנטית אך מעורפלים מדווחים בצורה נכונה- בדיקות תמונה-מוטמעת של PDF/A דוחות כעת ערכי
/Filterו-/Fהמשתמשים ב-/LZWDecode,/LZWמקוצר או/Crypt, כולל צורות מערך ושם-מובא - אימות PDF/A מדווח כעת על זרמי מטא-נתונים עם מסנני זרם אסורים, פרופילי ICC של OutputIntent שספירת הרכיב
/Nשלהם חסרה או לא-עקבית, ומפרטי קבצים מוטמעים של PDF/A-3 עם/AFRelationshipחסר או לא-חוקי
Version 2.12.0
נוסף (Added)
- בקשות HTTP של TSA מגדירות כעת פסקי-זמן מפורשים של 30 שניות עבור כל שלב (resolve/connect/send/receive) דרך
WinHttpSetTimeouts, כך שרשות-חותמת-זמן איטית או שלא ניתן להגיע אליה אינה יכולה לתלות את חוט-החתימה ללא הגבלת-זמן במקום להסתמך על ברירות-המחדל המשתמעות של WinHttp - גזירת nonce לכל-בקשה עבור בקשות חותמות זמן PAdES B-T / B-LTA כאשר המתקשר מחסיר
TPadesSignOptions.Nonce: קיפול SHA-256 של מונה מונוטוני + שעון-קיר +GetTickCount64+ מזהה-תהליך מחליף את ה-fallback הקבוע הקודם של$100000000, כך ששתי בקשות שהוגשו באותה מילישנייה אינן עוד משתפות את אותו nonce אנטי-חזרה PdfInflateמגביל כעת את הפלט המפוחת ל-256 MiB כדי לעצור זרם דחוס-zlib מניקוז זיכרון על קלט עוין או פגום (“פצצת zlib”); התקרה נדיבה לכל זרם PDF אמיתי
שונה (Changed)
- מיזוג שכבת-על של
TPdfView(הדגשת-חיפוש, בחירת-טקסט, מילת-קריאה, בחירת-הפצה) אינו עוד משתמש ב-GetPixel/SetPixelVלכל-פיקסל; המלבן מולבן כעת דרךTBitmapחוץ-מסך של 32-bpp ו-ScanLineבמעבר יחיד, ומבטל אלפי מעברי-גרעין GDI לכל ציור ועושה בחירות גדולות לרספונסיביות FPdfAsn1.TDerReader.ReadIntegerדוחה כעת שדות INTEGER ארוכים מ-8 בתים (ושליליים בני 8-בתים שסיביות-הסימן שלהם ידרשוshl >= 64), ומחזיר 0 במקום לחשב ערך שגוי דרך התנהגות-shift-לא-מוגדרת על קלט ASN.1 של CMS/PAdESParseTimeStampRespאינו עוד מחזיר את ה-nonce של הבקשה בחזרה כ-TPadesTimestamp.Nonce; עד לנחיתת מהלך TSTInfo המאמת את ה-nonce שהוחזר, השדה נשאר 0 לאות “לא אומת” במקום לתת למתקשרים ביטחון-שקרי שתגובת-חותמת-הזמן היא רעננה
תוקן (Fixed)
PointsToPixelsהחזיר את קלטו ללא שינוי עבור כל DPI: המחלק היהPointsPerInch(הקבוע 72) במקום המילולי 72, ומכווץ את הנוסחה ל-Result := Points. כל מתקשר חיצוני שמבצע שינוי-גודל points→device-pixel דרך עוזר זה מקבל כעת אתPoints × PixelsPerInch / 72הנכוןPdfMaxObjNumספר פחות מדי על מסמכים המשתמשים בזרמי-אובייקטים (PDF 1.5+ ObjStm): אובייקטים דחוסים בתוך/ObjStmאינם נושאים סמןN 0 obj, כך שסריקת-הבתים הגולמית החמיצה אותם, ומזריקים המקציםMaxObj+1לאובייקטים חדשים היו מתנגשים עם חברי ObjStm נסתרים ופוגמים את הקובץ בשקט. הסריקה מרחיבה כעת זרמי-אובייקטים תחילה כך שכל מספר-אובייקט גלויInjectPdfAMarkersאינו עוד מזייף טענת-תאימות PDF/A על מסמך מוצפן: PDF/A (ISO 19005-1 §7.1) אוסר הצפנה, והמזריק העתיק בעבר את המקור עם הסמנים למרות שהאימות הבא ממש אחריו היה דוחה אותו. כאשרHasEncryptמוגדר, המקור מועבר כעת ללא שינוי. נתיבTPdf.SaveAsPdfAהרגיל כבר מסיר הצפנה (saRemoveSecurity) לפני ההזרקה, לכן זה משפיע רק על מתקשרים ישיריםPdfReadStreamBytesמסרב כעת ל-/Lengthהגדול מהקובץ כולו לפני הקצאת מאגר-התוצאה, וסוגר נתיב-הקצאה-מוקדמת על אורך-עקיף פגום או עוין
Version 2.11.0
נוסף (Added)
- הרשומה
FPDF_FILEHANDLERשל PDFium מצהירה כעת על ששת ה-callbacks שלה (Release,GetSize,ReadBlock,WriteBlock,Flush,Truncate) כשדות אמיתיים במקום הערות, התואמים את פריסת כותרת C. ה-callbacks להעברת-קבצים של XFA FFI (FFI_OpenFile/FFI_EmailTo/FFI_UploadTo/FFI_DownloadFromURL) המחזירים או צורכיםPFPDF_FILEHANDLERעדיין נשארים לא-ממומשים בשכבת-מילוי-הטפסים של Pascal, אך הטיפוס כעת נכון מבחינה מבנית לכל נתיב XFA submit/upload עתידי - טעינה ופריקה של ספריית PDFium (
LoadLibrary/UnloadLibrary) מסודרות כעת על-ידי מדור קריטי גלובלי לתהליך, כך ששני חוטי-עובדTPdfFuture<T>(או עובד שמתחרה עם החוט הראשי) לא יכולים שניהם לצפות ב-PDFiumLibrary=0ולאגד-כפול, או לשחרר את ה-DLL בעוד חוט אחר נמצא באמצע-אגידה - מקטע
initialization/finalizationקורא כעת ל-UnloadLibraryבעת פריקת-יחידה, ומבטיח שהרצתFPDF_DestroyLibrary(חיבור-חוט-עובד, סילוק-isolate של V8, פירוק-גופנים/מטמון) במקום להסתמך על מערכת-ההפעלה להחזיר את ה-DLL
שונה (Changed)
TPdf.SetActiveבולע כעת כל חריגה בזמן-טעינה (בעבר רקEPdfError), כך ששגיאת-זרם או הפרת-גישה בזמן הגדרת-טפסים/עמוד משאירהActive=Falseבמקום רכיב שנטען-באופן-חלקי עם מצב בלתי-מוגדר- קידוד תווים עקבי לארגומנטים של מפתח-מטא-נתונים PDFium:
TPdf.GetMetaTextמשתמש כעת באותה פיצול FPCAnsiString/ DelphiUTF8EncodeכמוGetViewerPreferenceונתיבי-הטעינה, במקום cast גולמי שלAnsiString(Tag) - ביטול-כפל של עוזרי
BytesToAnsi,AnsiToBytes,WriteBytesו-WriteStr:FPdfCompressמייבא אותם כעת מ-FPdfPdfCommon(כינוייWriteBytesToStream/WriteAnsiToStreamשלו נפרשים) והעמסת-יתר המיותרת בת-שלושה-ארגומנטים שלBytesToAnsiב-FPdfPdfaמוסרת.FPdfAsn1שומר את עותקו המקומי לפי עיצוב כדי לשמור על שכבת-הקריפטוגרפיה ללא שכבת-יחידת-התאימות
תוקן (Fixed)
- דליפת-משאבים ב-
TPdf.LoadDocument(קובץ, זיכרון,TBytes,TMemoryStream, זרם-מותאם) וב-TPdf.CreateDocument: אםInitializeFormFillאוReloadPageהעלו חריגה לאחר הצלחתFPDF_LoadDocument/FPDF_CreateNewDocument, ידיתFPDF_DOCUMENTהנאטיבית דלפה כיFActiveעדיין היה False באותה נקודה. כל נתיב עוטף כעת את הגדרת-לאחר-הטעינה ב-try/exceptוסוגר את המסמך על-כשלון, ומשאיר את הרכיב לא-פעיל בצורה נקייה - אבחון טעינת DLL של PDFium ידידותי יותר:
CheckLoadLibraryמזהה כעתERROR_BAD_EXE_FORMAT(193) ומדווח על אי-התאמת ארכיטקטורה 32/64-סיביות המצביעה על בנייתDLLs/Win32אוDLLs/Win64המתאימה, במקום להעביר רק את שגיאת-מערכת-ההפעלה הגנרית.CheckGetProcAddressמציין כעת שה-pdfium.dllהפרוס ישן יותר מהאגידה כאשר יצוא נדרש חסר, במקום טקסט גולמי של "procedure not found" של מערכת-ההפעלה
Version 2.10.1
תוקן (Fixed)
- תיקנון ה-sid של SignerInfo ב-PAdES: מזהה החותם משתמש כעת בצורת
issuerAndSerialNumberשל RFC 5652 §5.3 (issuer Name + serialNumber, שניהם מופקים כמות שהם מתוך DER של תעודת החותם), המחליפה את הצורה הלא-תקנית הקודמתsubjectKeyIdentifier+ full-cert SHA-256 placeholder ש-Adobe Acrobat ומאמתים תואמים אחרים דחו. צועד TbsCertificate DER חדש (ExtractIssuerAndSerial) קורא את ה-issuer SEQUENCE ואת ה-serial INTEGER כ-TLV bytes גולמיים — מספרים סידוריים חורגים לעיתים קרובות מטווחInt64, ולכן ה-TLV הגולמי הוא חובה. הצורהsubjectKeyIdentifierנשארת כ-fallback בלבד כאשר ניתוח DER של התעודה נכשל
שונה (Changed)
TCmsSignerId.SerialNumber: Int64הוחלף ב-SerialDer: TBytes(ה-serialNumber TLV הגולמי). בונה ה-CMS מטמיע את ה-TLV החתוך כמות שהוא ב-IssuerAndSerialNumber, ובכך נמנע מגלישתInt64במספרים סידוריים של CA באורך 20 בתים (החסם העליון של RFC 5280 §4.1.2.2)
Version 2.10.0
נוסף (Added)
- אימות ארוך-טווח PAdES B-LT: כאשר
TPadesSignOptions.Level >= plB_LT,SignPadesBytesמוסיף עדכון מצטבר הנושא מילון/DSSעם תעודת החותם ושרשרת הביניים המלאה (השורש בחתימה עצמית מוחרג לפי RFC 5652 §10.2.3), בתוספת סמן/Extensions /ESICLevel 1 (EN 319 142-1 §5.4.2) - חותמת זמן ארכיון PAdES B-LTA: כאשר
Level >= plB_LTAו-TsaUrlמוגדר, מצורף מילון חתימת Document Time-stamp (/SubFilter /ETSI.RFC3161) שה-/ByteRangeשלו מכסה את הקובץ כולו; סמן ה-ESIC מקודם ל-Level 2. פעולה זו משלימה את ארבעת רמות הבסיס של PAdES (B-B, B-T, B-LT, B-LTA) - איסוף שרשרת תעודות:
ResolveWinSignerקורא כעת ל-CertGetCertificateChainוממלא אתTPadesResolvedSigner.ChainCertDerבתעודות CA הביניים, כך ש-B-LT/DSS /Certsנושא כל תעודה הדרושה לאימות החתימה ללא חיפושים חיצוניים.CertFreeCertificateContextמאוגד כעת, ובכך סוגר את דליפת context-אחד-לכל-חתימה שצוינה ב-v2.8.0 - תהליך עבודה לשילוב PDF/A:
TPdf.SignPadesWithPdfAממיר את המסמך ל-PDF/A תחילה (הרמה הגבוהה ביותר שהספרייה פולטת כיום) ואז מחיל את חתימת ה-PAdES המבוקשת — תבנית ה-container לארכיון ארוך-טווח ש-EN 319 142-1 נספח A.7 ממליץ עליה
Version 2.9.0
נוסף (Added)
- חותמת זמן מהימנה PAdES B-T:
TPadesSignOptionsמקבל את השדותLevel,TsaUrlו-Nonce. כאשרLevel >= plB_Tו-TsaUrlמוגדר,SignPadesBytesמחלץ את ערך החתימה מתוך ה-CMS שנבנה, מבקש חותמת זמן RFC 3161 עליו, ומטמיע את ה-TimeStampToken שהוחזר כתכונה לא-חתומה של SignerInfo בשםsignature-time-stamp— שלב ה-B-T trusted-time (EN 319 142-1 §6.3 דרישה o) FPdfTsa: לקוח RFC 3161 חוצה-פלטפורמות —BuildTimeStampReq(גרסה 1, SHA-256 messageImprint על ערך החתימה, nonce, certReq=true),ParseTimeStampResp(מקבל PKIStatus 0/1, דוחה 2+, מחלץ את ה-TimeStampToken ContentInfo כמות שהוא), ו-RequestTimestamp(רצף חד-פעמי של build+POST+parse).PadesTsaAvailableמשערך את התכונה בפלטפורמות ללא HTTP backendFPdfTsaWin: backend של Windows WinHttp, מאוגד דינמית מ-winhttp.dll (אפס תלות חדשה בזמן הידור; HTTPS מנוהל משיחות על ידי מאגר התעודות של Windows). משקף את תבנית האיגוד הדינמי שלFPdfCryptoWinFPdfCms:ExtractSignatureValueצועד על CMS שנבנה כדי לשחזר את octets החתימה הגולמיים (קלט הגיבוב של ה-TSA), ו-AddSignatureTimestampToCmsבונה מחדש את ה-ContentInfo עםunsignedAttrs [1](0xA1) חדש הנושא את תכונת חותמת הזמן. המאמת של שלב-1 מזהה את התוצאה כחתימת B-T
Version 2.8.0
נוסף (Added)
- מחסנית חתימת PAdES B-B: ארבעה בלוקי בניין חדשים של Pascal טהור/חוצה-פלטפורמות (
FPdfSha256,FPdfAsn1,FPdfCms,FPdfCrypto) בתוספת backend של Windows CNG (FPdfCryptoWin) מאפשרים ל-TPdf.SignPades/SignPadesToStreamלייצר חתימת PAdES B-B מקצה לקצה. תעודת החותם מותרת לפי טביעת אצבע SHA-1 ממאגר Current User “MY”; RSA-PSS (מומלץ), RSA PKCS#1 v1.5 ו-ECDSA כולם נתמכים דרךNCryptSignHash FPdfSha256: מימוש SHA-256 FIPS 180-4 עצמאי (Init/Update/Final + עוזרים חד-פעמיים). FPC 3.2.2 אינו מספק יחידת SHA-2, ולכן הספרייה מחזיקה אחת כדי לשמור על כל נתיב קוד CMS על סוגTSHA256Digestיחיד ללא הסתעפויות RTLFPdfAsn1: מקודד DER (TDerWriter) וקורא (TDerReader) המכסים SEQUENCE/SET/OID/INTEGER/OCTET STRING/UTCTime/GeneralizedTime/context-specific tags, עם קידוד definite-length וטיפול ב-IMPLICIT-tag ש-CMS דורשFPdfCms: בונה CAdES SignedData (BuildSignedData) הפולט את תכונות ה-signed content-type, message-digest ו-signing-certificate-v2 שבסיס PAdES מחייב, עם signing-time ו-commitment-type-indication אופציונליים. תקציר ה-signedAttrs מחושב על פני הצורה המתויגת SET (0x31) ומופק מחדש עם תגית ה-IMPLICIT [0] (0xA0) לפי RFC 5652 §5.4FPdfCrypto+FPdfCryptoWin: הפשטת backend קריפטוגרפי עםPadesCryptoAvailable/ResolvePadesSigner, ומימוש ה-Windows שמאגד את crypt32.dll / ncrypt.dll באופן דינמי (ללא תלות DLL חדשה בזמן הידור). חתימות ECDSA מקודדות מחדש מצורת IEEE P1363 r¦s של Windows לצורת DERECDSA-Sig-Valueש-CMS דורשSignPadesBytes: הזרקת חתימה ברמת בית — מקצה משבצת hex/Contentsברוחב קבוע, מחשב את ה-/ByteRangeהמכסה, מגבב את המסמך, בונה ומטמיע את ה-CMS, ומוסיף את העדכון המצטבר. המאמת (v2.7.0) מזהה את הפלט כחתימת PAdES B-B
Version 2.7.0
נוסף (Added)
- מאמת מבני PAdES (ETSI EN 319 142-1 V1.2.1): היחידה החדשה
FPdfPadesוהמתודהTPdf.ValidatePadesבוחנים מילוני ערך חתימה הנגישים מ-/ByteRange, צועדים ב-CMSSignedDataבתוך/Contentsמספיק רחוק כדי לאשר את צורת ה-CAdES detached, ומזהים את ארבע רמות הבסיס (B-B, B-T, B-LT, B-LTA) וכן מילוני Document Time-stamp (/SubFilter /ETSI.RFC3161) - סט בעיות PAdES ברמת סעיף: 26 enum מסוג
ppei*מכסים את קבילות ה-/SubFilter(adbe.pkcs7.sha1ו-adbe.x509.rsa_sha1מסומנים כאסורים), את כיסוי הקובץ של/ByteRange, את איסור/Cert, את צורת CMSSignedData(חותם יחיד, detached eContent, טווח גרסאות), את תכונות ה-signed הנדרשות (content-type,message-digest,signing-certificate/v2), digests אסורים (MD5, SHA-1), את השלילה ההדדית של/Reasonמולcommitment-type-indication(דרישה d), את דרישת ה-B-T trusted-time, את הסמן B-LT/DSS+/Certs+ ESIC Level 1, ואת הסמן B-LTA Document Time-stamp + ESIC Level 2 - מזריק DSS:
TPdf.SaveAsPadesDss/SaveAsPadesDssToStreamמוסיפים עדכון מצטבר לעותק של המסמך הנושא מילון/DSS(עם מערכי תזרים/Certs,/OCSPs,/CRLs) והסמן/Extensions /ESIC(Level 1 או 2), תוך שמירת הבתים המקוריים — שלב הטמעת חומר האימות של B-LT/B-LTA (סעיף 5.4.2) - שלב חוצה-פלטפורמות, ללא תלות: המאמת והמזריק הם Pascal טהור ועובדים בכל IDE נתמך (Delphi, Lazarus, FPC, C++Builder); לא נדרש backend קריפטוגרפי לגרסה זו, ולא מוכנסת תלות DLL חדשה
Version 2.6.0
שונה (Changed)
- ביטול כפילויות חוצה-תקנים: שבע פונקציות עזר משוכפלות נוספות (PdfEnclosingObjNum, PdfDictRefNum, PdfExpandObjectStreams, PdfTextStr, ExtractLiteralString, ExtractXmpAttr) הוסרו מיחידות התקנים הבודדות ואוחדו לתוך
FPdfPdfCommon, מה שמקטין בכ-300 שורות את נטל התחזוקה של העתק-הדבק - איכות PreflightReport: בעיות content-class של PDF/X ו-PDF/E שנפלו בעבר לקטגוריית ה-“missing marker” הגנרית נושאות כעת קטגוריות Content/Metadata/Security מדויקות והמלצות ספציפיות לסעיף (~15 enum לאורך שני התקנים)
- כיסוי בדיקות PDF/E ו-PDF/R: שישה enum נוספים בעלי כיסוי אפס קיבלו בדיקות חיוביות (
pveiLzwForbidden,pveiJavaScriptForbidden,pveiFormFieldsForbidden,pveiEmbeddedFilesForbidden,pvriBadHeader,pvriProhibitedInfoEntry) - תיקון בניית Lazarus:
Tests.PdfVT(יחידת DUnitX ל-Delphi בלבד שנוספה ב-v2.5.x) אינה נכללת עוד בפרויקט Lazarus כדי לשחזר את ההידור
Version 2.5.3
נוסף (Added)
- שלמות OutputIntent (PDF/X-4 §6.2.4):
pvviOutputIntentSchemeמסמן OutputIntent שה-/Sשלו אינו/GTS_PDFX;pvviOutputIntentMissingIdentifierמסמן/OutputConditionIdentifierחסר - פטור Reference XObject ל-PDF/VT-2 (§6.2.2):
pvviReferenceXObjectForbiddenאינו מופעל עוד עבור קובץPDF/VT-2, אשר רשאי להשתמש כדין ב-Reference XObjects על בסיס X-5g/5pg - אימות תו גבול MIME (RFC 2046 §5.1.1):
vtmviBoundaryInvalidCharמסמן boundary שתוויו מחוץ לסט bchars או שאורכו חורג מ-70
תוקן (Fixed)
InjectPdfVTMarkersכותב כעת Info/CreationDateו-/ModDateמתוך אפשרויות השמירה, כך שהקובץ שייוצר עובר אתValidatePdfVTComplianceללאpvviInfoModDateMismatchשגוי (המזריק כתב בעבר מחדש את תאריכי ה-XMP אך השאיר את תאריכי מילון ה-Info מיושנים)
Version 2.5.2
נוסף (Added)
- עקביות Info
/ModDate(§6.3 NOTE 2, בסיס PDF/X-4):pvviInfoModDateMismatchמסמן/ModDateשל מילון Info אשר, לאחר נורמליזציה מתאריך-PDF לתאריך-XMP, אינו שווה ל-xmp:ModifyDate - התאמת inline chunk של PDF/VT-2s (נספח A.2): מאמת ה-MIME מריץ כעת את
ValidatePdfVTComplianceעל כל חלקapplication/pdfinline ומסמן גוף שאינו PDF/VT באמצעותvtmviInlinePdfNotPdfVT
Version 2.5.1
נוסף (Added)
- אימות חלוקת DParts לחלקים (ISO 16612-2 §6.5 Table 4):
pvviDPartsBadChunkingמסמן מערך/DPartsשתת-המערכים שאינם האחרונים בו אינם בעלי 8192 ערכים בדיוק, או שתת-המערך האחרון שלו נופל מחוץ לטווח 1..8192 - עקביות RecordLevel חוצה-תזרים (נספח A.2): מאמת ה-MIME של PDF/VT-2s מחלץ כעת את ה-
/RecordLevelשל כל PDF inline ומסמן אי-התאמה באמצעותvtmviRecordLevelMismatch, המשלים את בדיקת ה-NodeNameList הקיימת - רמזים לעצמים גרפיים חוזרים (§6.7):
pvviGtsScopeInvalidValueמסמן/GTS_Scopeמחוץ ל-{SingleUse, Record, File, Stream, Global, Unknown};pvviGtsScopeRecordWithoutRecordLevelמסמן/Recordללא/RecordLevel;pvviGtsXidNotUuidמסמן/GTS_XIDשאינו RFC 4122 uuid: URI;pvviGtsEnvMissingמסמן/GTS_Envחסר כאשר/GTS_Scopeהוא Stream או Global (§6.7.4) - זיהוי הפניה-קדימה של MIME (נספח A.2):
vtmviForwardReferenceמסמן PDF inline המצטט שם קובץ (דרך/EF /F) שלא הוצג על ידי חלק קובץ מצורף קודם בתזרים
תוקן (Fixed)
ExtractNodeNameListFromPdfו-ExtractRecordLevelFromPdfב-FPdfPdfvtMimeתיקנו שגיאת off-by-one חוזרת שבה ההיסט ה-1-based שהוחזר על ידיAnsiFindKeyטופל כהיסט בתים מוחלט אל תוך ה-PDF המורחב
Version 2.5.0
נוסף (Added)
- מטא-נתוני Document Part של PDF/VT (DPM, ISO 16612-2 §6.6):
TPdfVTSaveOptionsקיבל אתDpmEntriesו-DpmTargetכך ש-writer יוכל לצרף מילון/DPMלצומת ה-DPart המסונתז, עם אימות שם-מפתח מול כלל ה-second-class-prefix של נספח E והכללים של §6.6 ל-NMTOKEN / ייחודיות / צורתGTS_Managedבצד המאמת - חילופי תזרים PDF/VT-2s (נספח A): היחידה החדשה
FPdfPdfvtMimeמספקת אתBuildPdfVT2sStreamו-ValidatePdfVT2sStreamעבור מעטפת ה-MIME מסוגmultipart/mixedהנושאת נתחי PDF/VT inline בתוספת פרופילי ICC מצורפים, עם כלל סדר הכותרתX-PDFVT-Stream-version: 1ובדיקת העקביות שלNodeNameListחוצה-תזרים TPdf.ValidatePdfVTמבצע כעת ספירת פעולות JavaScript סמכותית דרךFPDFDoc_GetJavaScriptActionCount, המשלימה את סריקת השם/JavaScriptברמת הבית
תוקן (Fixed)
- נכונות PDF/VT
Trappedעל בסיס PDF/X-4: ערך ה-enumptvUnknownמוסר (PDF/X-4 אוסר/Unknown),ptvUnspecifiedמנורמל ל-/Falseבזמן הכתיבה (/Trappedחסר אף הוא אסור), ובעיה חדשהpvviTrappedInvalidמסמנת ערך נעדר אוUnknown ValidatePdfVTComplianceמרחיב כעת תזרימי אובייקט (PdfExpandObjectStreams) לפני הסריקה, כך שמילון catalog, OutputIntent או Metadata המאוחסן בתוך ObjStm דחוס (PDF 1.5+, אופייני ליצרני PDF/X-4) יהיה נגיש לחיפושים ברמת הבית
שונה (Changed)
- PDF/VT-1 יורש כעת את מלוא איסורי התוכן של PDF/X-4:
pvviAcroFormForbidden(/AcroFormאו/XFA),pvviAdditionalActionsForbidden(catalog/AA),pvviMissingTrimBoxו-pvviReferenceXObjectForbidden(Reference XObject, X-5g/5pg בלבד) - ביטול כפילויות חוצה-תקנים:
BuildDictObj,IccComponentCount, פרופיל ה-ICC המובנה sRGB (GetSrgbIccProfile),PdfTextStr,PdfEnclosingObjNum,PdfDictRefNumו-PdfExpandObjectStreamsקודמו מעותקים מקומיים משולשים ב-FPdfPdfa/FPdfPdfx/FPdfPdfvtלבית קנוני יחיד ב-FPdfPdfCommon; ה-literal של ה-ICC בן 3144 הבתים קיים כעת בדיוק פעם אחת בבסיס הקוד
Version 2.4.0
תוקן (Fixed)
- הפונקציה
InjectPdfUaMarkersאינה משמיטה עוד את ההפניה ל-/Infoשל ה-trailer בבסיס cross-reference-stream: הפונקציה המקומיתSourceTrailerInfoRef(שהייתה חסרה את ה-xref-stream fallback) הוחלפה ב-PdfSourceTrailerInfoRefהמשותפת (שקודמה מתוך העותק של PDF/A שהכיל את ה-fallback מאז גרסה v2.0.0) - הפונקציה המשותפת
PdfReadStreamBytesמטפלת כעת בהפניות עקיפות מסוג/Length N G R(שיוצאו מהעותק המקומי של PDF/A), כך שבודקי התאימות של PDF/VT, PDF/R ו-PDF/E אינם קוראים עוד שגויה או מדלגים על תזרימי מטא-נתונים מסוג XMP שנוצרו על ידי כלים המשתמשים ב-Length עקיף (Acrobat, Ghostscript)
שונה (Changed)
- מניעת כפילויות בין תקנים: העותקים המקומיים של
PdfReadTrailerב-FPdfPdfaוב-FPdfPdfx, העותקים המקומיים שלSourceTrailerInfoRefב-FPdfPdfaוב-FPdfPdfua, וכן הפונקציה המקומיתPdfReadStreamBytesב-FPdfPdfaנמחקו כולם — הגרסאות המשותפות ב-FPdfPdfCommonחלות כעת בכל מקום; דבר זה מסיר כ-330 שורות של קוד כפול ומבטל את עול התחזוקה של סנכרון העותקים - סגירת חוב הבדיקות עבור PDF/X: שבעה enum של content-class שהיו בעלי כיסוי אפס בעבר קיבלו בדיקות חיוביות (
pvxiLzwForbidden,pvxiJavaScriptForbidden,pvxiFormFieldsForbidden,pvxiAdditionalActions,pvxiEmbeddedFilesForbidden,pvxiMissingTrimBox,pvxiTrappedNotSet)
Version 2.3.0
שונה (Changed)
- סגירת חוב הבדיקות עבור PDF/A נמשכת: שלושה enum נוספים עם כיסוי אפס קיבלו בדיקות חיוביות;
pvaiForbiddenRenderingIntent(§6.2.9) מסמן שם rendering-intent שאינו סטנדרטי בתוך content stream;pvaiJpeg2000Violation(§6.2.2) מסמן תמונת JPXDecode עם/NumComponentsמחוץ לטווח {1,3,4} ב-Part 2;pvaiInlineImageLzwForbidden(§6.1.10) מסמן תמונה משובצת המשתמשת במסנן LZW ב-Part 2
Version 2.2.0
שונה (Changed)
- בדיקות רגרסיה של זרם הפניות־הפוכות (cross-reference-stream): הבדיקה הקיימת
Validate_XrefStreamTrailer_DetectsConformanceמאמתת כעת גם שההפניה/Metadataשל הקטלוג מפוענחת ושה־XMPpdfaid:partנקרא על בסיס xref-stream (לא רק/Root+/ID). בדיקה חדשהInjectPdfA_XrefStreamBase_RoundTripsשומרת על נתיב ה־xref-stream של המזרק שנוסף ב־v2.0.0. שתי בדיקות חוצות־תקנים (PdfE_XrefStreamBase_NotRejectedAsUnparsable,PdfR_XrefStreamBase_NotRejectedAsUnparsable) מאמתות שהמאמתים של PDF/E ו־PDF/R אינם דוחים עוד קובצי PDF מבוססי xref-stream כבלתי־ניתנים־לניתוח - סגירת חוב בדיקות של PDF/A:
Validate_MinimalPdf_FlagsRequiredMarkersטוענת כי PDF מינימלי חשוף מפעיל אתpvaiMissingPdfAIdentifier,pvaiMissingOutputIntent,pvaiMissingIccProfile,pvaiMissingXmpMetadataו־pvaiMissingXmpDates— ובכך סוגרת את פער הסימטריה מול המאמתים של PDF/E ו־PDF/X שכבר היו להם בדיקות שקולות. שני enum נוספים בעלי כיסוי אפס קיבלו בדיקות חיוביות:pvaiUnembeddedFontו־pvaiSubsetMissingCidSet
Version 2.1.0
תוקן (Fixed)
- PDF/E הושמט בשוגג מתיקון זרם הפניות־הפוכות (cross-reference-stream) של v2.0.0: גם
InjectPdfEMarkersוגםValidatePdfEComplianceעדיין קראו ל־PdfReadTrailerללאAcceptXrefStream, כך שמזרק PDF/E נכשל בשתיקה בפלט PDF 1.5+ (ברירת המחדלSaveAsCopyשל pdfium). שני אתרי הקריאה מעבירים כעתTrue - ה-fallback של זרם הפניות־הפוכות בפונקציה המשותפת
PdfReadTrailerנושא כעת את השומר/Type /XRefשהיה קיים כבר בעותקים המקומיים של PDF/A ו־PDF/X, כך שהיסטstartxrefפגום המצביע על מילון שאינו קשור נכשל באופן נקי במקום להיות מנותח בטעות כטריילר - פותר ההפניה העקיפה של
/Langב־ValidatePdfUaCompliance(v2.0.0) היה בלתי־נגיש:PdfFindObjDictמוצא רק מילוני<<, אך אובייקט מחרוזת/Langהוא(...)או<...>ללא מילון. הוחלף בסריקה ישירה של גוף האובייקט המאתרת את טוקן המחרוזת
שונה (Changed)
- שבעה כפילויות עזר מתות (dead-shadow) (PdfStructureBytes, PdfHasName, PdfCountName, BuildStreamObj), שהיו עותקים זהים־ברמת־הבית של הגרסאות המשותפות ב־
FPdfPdfCommon, הוסרו מ־FPdfPdfaומ־FPdfPdfua— הגרסאות המשותפות חלות כעת בכל מקום דרךuses
Version 2.0.0
תוקן (Fixed)
- כשל שקט חוצה־תקנים: הפונקציה המשותפת
PdfReadTrailer(המשמשת את מזרקי והמאמתים של PDF/UA, PDF/X, PDF/VT ו־PDF/R) מקבלת כעת פרמטרAcceptXrefStreamונסוגה אל מילון אובייקט זרם הפניות־הפוכות כאשר אין מילת מפתחtrailer(PDF 1.5+). בעבר, הפלט שלSaveAsCopyשל pdfium (המשתמש בזרם הפניות־הפוכות) גרם לכל מזריק הסימנים להיכשל בשתיקה — בתי המקור הועתקו ללא שינוי והקריאה עדיין החזירה הצלחה. המאמת של PDF/R-1.0 (שבסיס PDF 2.0 שלו הוא תמיד זרם הפניות־הפוכות) היה למעשה אופציה ריקה (no-op). המימוש הבוגר של מאמת PDF/A הוסב אל הפונקציה המשותפת כך שכל תקן נהנה ממנו - סריקת מילון הטריילר ב־
InjectPdfUaMarkersוב־InjectPdfAMarkersמשתמשת כעת ב־PdfDictEndמודע־עומק במקום בחיפוש יחיד של>>, כך שטריילר המכיל מילון מקונן (למשל/Encrypt << ... >>) אינו נקטע עוד לפני רשומת/Infoעוקבת
שונה (Changed)
TPdf.ValidatePdfUaמשתיק כעת אתpvuaiFontNotEmbeddedהגס ברמת הבתים כאשרpvuaiPdfiumFontNotEmbeddedהמדויק ממודל האובייקטים של Pdfium כבר הופעל, כך שדוח ה־preflight אינו נושא עוד שתי שורות "הטמע את הגופנים שלך" כמעט־כפילות עבור אותו ליקויpvuaiLangInvalidFormat(§7.2) מפענח כעת הפניה עקיפה של/Lang(N 0 R) אל אובייקט המחרוזת שלה ומאמת את התוכן, כך שתג שפה המופנה בעקיפין אינו עוד נקודה עיוורת
Version 1.99.0
תוקן
pvuaiLangInvalidFormat(§7.2) אינו מעניק עוד מעבר חופשי למחרוזות/Langבקידוד הקסדצימלי: זוגות UTF-16BE (עם BOM מסוגFE FF) ומחרוזות הקסדצימליות פשוטות של ASCII מפעונחים כעת ועוברים את אותה בדיקת דקדוק של BCP 47 כמו מחרוזות מילוליות(...), כך ש-/Langהקסדצימלי לא תקין מזוהה ואילו תקין (למשל UTF-16BE שלen-US) אינו מסתכן עוד בסימון
שונה
pvuaiFontMissingToUnicode(§7.21.7) פוטר כעת את/MacExpertEncodingלצד/WinAnsiEncodingו-/MacRomanEncoding, בהתאם לארבעת תנאי הפטור המפורטים בסעיף
Version 1.98.0
נוסף
pvuaiNeedAppearancesTrue(§7.18.4) מסמן AcroForm שבו דגל/NeedAppearancesהוא true, כך שמראי פקדים (widget appearances) אינם נעולים באופן מהימן וטכנולוגיות מסייעות אינן יכולות לשייך אותם לעץ המבנה; הועבר מבודק התאימות של PDF/A ומוגבל לנוכחות של/AcroFormכדי לצמצם את שטח הסריקה
שונה
- נסיגת קובץ הבדיקה (corpus) של veraPDF: חיבור זוג העובר+נכשל של Reference-XObject (§7.20) וזוגות העובר+נכשל של תת-הקבוצה CharSet/CIDSet (§7.21.4.2) אל תוך
Live_Corpus_ValidatePdfUaMatchesConformance; דגימות עובר של ערך אסור של ToUnicode (§7.21.7) ושל קטע מדיה (§7.18.6.2) חוברו גם הם כהגנות מפני תוצאות חיוביות שגויות (false-positive) (דגימות הנכשל שלהם משתמשות במבני מילון שסריקה ברמת הבתים אינה מזהה, ולכן רק צד העובר מחובר) - רשימת טענות ה-pass-path של קובץ הבדיקה קיבלה 15 הגנות חדשות ללא תוצאות חיוביות שגויות, כך שכל בדיקת
pvuai*פעילה ברמת הבתים והמבנה נבחנת כעת מול דגימות תואמות (בעבר רק כ-30 מתוך 60 הבעיות הפעילות היו מוגנות); ההגנה שלpvuaiLangInvalidFormatהושמטה בכוונה מכיוון שבודק רמת הבתים מסמן באופן שמרני מחרוזות/Langבקידוד הקסדצימלי שאינו מצליח לפענח
Version 1.97.0
תוקן
- הקשחת
ValidatePdfUaStructureElements: מעבר שרשרת ההורים שלEnclosingTableנושא כעת מונה קפיצות (מוגבל על ידי מספר האלמנטים), כך שמעגלParentIndexלא תקין במערך אלמנטי מבנה סינתטי אינו יכול עוד לתלות את הקורא; הקצאת מערך מזהי התוכן המסומן שלValidatePdfUaPageContentTaggingמוגבלת כעת למיליון רשומות לכל היותר, מה שמונע הקצאה של מספר ג'יגה-בייט במקרה שלMarkedContentIDלא תקין או זדוני
שונה
- הערת התיעוד של ה-enum עבור
pvuaiOrderedListMissingListNumberingמתארת כעת במדויק את פעולת הבדיקה: היא מסמנת אלמנטLשערך ה-ListNumberingשלו מחוץ לקבוצה שבטבלה 347 של ISO 32000-1 (תכונה חסרה אינה מסומנת); ההערה הקודמת רמזה שהיא גם מזהה רשימות מסודרות שחסרה בהן התכונה, מה שהמימוש בפועל אינו עושה - שתי דגימות הנכשל של אי-התאמת WMode מסוג
7.21.3.3-t02מחובקות כעת אל תוךLive_Corpus_ValidatePdfUaMatchesConformance— מאחר שזרם ה-CMap מנופח ב-FlateDecode מאז גרסה v1.95.0, ההשוואה בין המילון לתוכן מתבצעת כעת בצד קריא; הערת ה-"not wired" המיושנת הוסרה
Version 1.96.0
נוסף
- עקביות בין תקנים:
TPdf.ValidatePdfUaמקבל שתי בדיקות שהועברו מבודק התאימות של PDF/A; הבדיקהpvuaiAnnotationFlagsViolation(§7.18.1) מסמנת הערה לא פטורה הנושאת את הדגלים Hidden / Invisible / NoView, מה שקוטע את זרימת הקריאה של טכנולוגיות מסייעות; הבדיקהpvuaiActionTargetMissing(§7.18.5) מסמנת פעולת GoToR / URI / SubmitForm החסרה את מפתח היעד הנדרש שלה (/F+/D, /URI, /F), מה שמשאיר את הקישור ללא שימוש עבור טכנולוגיות מסייעות
תוקן
- מיזוג עץ מבנה רב-עמודי: לולאת הצבירה
AllElemsב-TPdf.ValidatePdfUaמבצעת כעת התאמת בסיס (rebases) ל-ParentIndexשל כל אלמנט מהמערך המקומי של העמוד למערך הממוזג; ללא שינוי זה, אלמנטים צאצאים של עמוד 2 שמרו על אינדקס מקומי שהצביע אל תוך הפלח של עמוד 1, מה שגרם להשחתה שקטה של כל בדיקה התלויה ב-ParentIndex (מבנה טבלה/רשימה, ספירת ילדי H של §7.4.4, EnclosingTable) - ניתוח RoleMap:
PdfReadRoleMapPairsאינו מפסיק עוד את כל סריקת המפתח/ערך כאשר ערך הוא הפניה עקיפה (N 0 R) או מערך ([...]) — שניהם צורות RoleMap תקינות לפי ISO 32000-1 14.8.5.1; כעת הוא פוסח רק על אותה רשומה (Continue) במקום לבצעBreak, מה שמבטל תוצאות חיוביות שגויות שלpvuaiRoleMapUnresolvedעבור סוגים הממופים לאחר רשומה עקיפה או מערך
שונה
-
FPdfPreflightReport: 18 ערכיTPdfUaValidationIssueפעילים שנפלו בעבר לקטגוריית ברירת המחדל וההמלצה "missing marker" נושאים כעת קטגוריות מדויקות (מבנה / תוכן / מטא-נתונים / אבטחה) והמלצות ספציפיות לסעיפים; כמו כן, תוקנה שגיאת הכתיבpuaNone / pua1→pucNone / puc1בקובץPDFSpecComplianceMatrix.md
Version 1.95.0
שונה
- מעבר תקינות ושלמות של
TPdf.ValidatePdfUa: בדיקתpvuaiCMapWModeMismatch(§7.21.3.3) ובדיקתpvuaiToUnicodeForbiddenValue(§7.21.7) מנפחות כעת זרמי CMap / ToUnicode דחוסים ב-FlateDecodeלפני הסריקה (בעבר רק זרמים לא דחוסים נבדקו, מה שהיווה תוצאה שלילית שגויה ידועה); כלי העזר המשותפיםPdfInflateו-PdfReadAndDecodeStreamהועברו מ-FPdfPdfa/FPdfPdfxאלFPdfPdfCommonכך שכל יחידת תאימות משתמשת בעותק יחיד
נוסף
- הבדיקה
pvuaiSubsetCharSetEmpty(§7.21.4.2) מסמנתFontDescriptorשל תת-קבוצה מסוג Type 1 הנושא מפתח/CharSetשערך המחרוזת שלו ריק — הבדיקה הקיימתpvuaiSubsetMissingCharSetזיהתה רק מפתח חסר;/CIDSetריק אינו מסומן, שכן גופן ללא מזהי CID עשוי לשאת מפת סיביות (bitmap) ריקה באופן לגיטימי
Version 1.94.0
נוסף
- ביקורת מעבר שני של
TPdf.ValidatePdfUaסגרה שישה פערי ISO 14289-1 שעלו מסקירה סעיף-אחר-סעיף ומסריקה חוזרת של ממשקי API מקומיים של Pdfium שכבר היו עטופים אך לא בשימוש בנתיב ה-PDF/UA; הבדיקהpvuaiHeadingFormatInvalid(§7.4.3) מסמנת תגיות כותרת בהגדרת משתמש המתחילות ב-H אך נושאות מפרידים, רווחים או ספרות רומיות במקום ספרות ערביות טהורות; הבדיקהpvuaiMissingDocumentOutline(§7.17, should) מסמנת מסמך רב-עמודי שאינו נושא מתאר סימניות (מסמכים בעלי עמוד יחיד פטורים); הבדיקהpvuaiStructElementLangInvalid(§7.2) מסמנת ערך/Langשל אלמנט מבנה שאינו תג BCP 47 תקין; הבדיקהpvuaiWidgetMissingPrintField(§7.14 / §7.18.4) מסמנת אלמנט מבנה של Widget החסר את בעל תכונת PrintField; הבדיקהpvuaiLinkNotInStructureTree(§7.18.5) מסמנת מסמך שהערות ה-/Subtype /Linkשלו אינן חשופות כאלמנטי מבנה מסוג Link; הבדיקותpvuaiPdfiumAnnotationMissingContentsו-pvuaiPdfiumLinkMissingContents(§7.18.1 / §7.18.5) מוסיפות סריקת הערות מדויקת של מודל האובייקטים של Pdfium הפוטרת הערות נסתרות, מחוץ ל-crop-box, מסוג Popup ו-Widget — מה שמבטל את התוצאות החיוביות השגויות של ההיוריסטיקה ברמת הבתים, שאינה יכולה לקרוא את דגלי/Fאו את/Rect
Version 1.93.0
נוסף
- כעת
TPdf.ValidatePdfUaמניח שכבת מעבר של מודל אובייקטים של Pdfium מעל מפקח רמת הבתים, תוך חיקוי ארכיטקטורת סבב 7 של PDF/A: הוא עובר על אובייקטי הטקסט של כל עמוד דרךFPDFTextObj_GetFont→FPDFFont_GetIsEmbedded (pvuaiPdfiumFontNotEmbedded, §7.21.4) וסורק כל תו דרךFPDFText_HasUnicodeMapError (pvuaiPdfiumUnicodeMapError, §7.21.7) ו-FPDFText_GetUnicode (pvuaiPdfiumNotDefGlyph, §7.21.8) — מדויק יותר מההיוריסטיקות ברמת הבתים, המופעלות רק כאשר אפס תוכניות גופנים קיימות או כאשר לא מופיע/ToUnicodeכלל; המעבר מקצר בשלוש רמות: לולאת העמוד יוצאת כאשר כל שלוש הבעיות של שכבת ה-Pdfium כבר מוגדרות, לולאת האובייקט הבודד יוצאת בגופן הראשון שאינו משובץ, וסריקת התווים פוסחת על מעבר ה-.notdefכאשרUnicodeMapErrorכבר פגע; PDF/UA היה מדרג התקנים של PDF האחרון ללא שכבת מודל אובייקטים של Pdfium
Version 1.92.0
נוסף
- יצירת
Tests.PdfR— קובץ הבדיקה הראשון עבור בודק התאימות של PDF/R-1 (FPdfPdfr), המכסה אימות כותרת (header), איסור על ObjStm, זיהוי סימני רסטר, והגנה ללא תוצאות חיוביות שגויות עבור קובץ נקי; לכל ששת סוויטות הבדיקה של תקני PDF יש כעת קובצי בדיקה ייעודיים: PdfA(80), PdfUa(101), PdfX(7), PdfE(5), PdfVT(15), PdfR(4) = 212 בדיקות בסך הכל
Version 1.91.0
נוסף
ValidatePdfEו-ValidatePdfVTקיבלו בדיקות ברמת התוכן שהיו זמינות בעבר רק בבודקי התאימות של PDF/A, PDF/UA ו-PDF/X: pveiLzwForbidden, pveiJavaScriptForbidden, pveiFormFieldsForbidden(עבור PDF/E בלבד), pveiEmbeddedFilesForbidden(עבור PDF/E בלבד), pveiOpiForbidden, pvviLzwForbidden, pvviJavaScriptForbidden, pvviEmbeddedFilesForbidden, pvviOpiForbidden; הבדיקותTPdf.ValidatePdfEו-TPdf.ValidatePdfVTקיבלו גם הן שכבת מודל אובייקטים של Pdfium (pveiPdfiumFontNotEmbedded/pvviPdfiumFontNotEmbedded) העוברת על אובייקטי הטקסט של העמוד דרךFPDFFont_GetIsEmbedded, תוך קיצור דרך בגופן הראשון שאינו משובץ
Version 1.90.0
נוסף
- כעת
TPdf.ValidatePdfXמניח שכבת מעבר של מודל אובייקטים של Pdfium מעל מפקח רמת הבתים: הוא עובר על אובייקטי הטקסט של כל עמוד דרךFPDFTextObj_GetFont→FPDFFont_GetIsEmbeddedומדווח על גופן שאינו משובץ כ-pvxiPdfiumFontNotEmbedded— מדויק יותר מההיוריסטיקה ברמת הבתים הפועלת רק כאשר אפס תוכניות גופנים קיימות; המעבר מקצר דרך בגופן הראשון שאינו משובץ שנמצא
שונה
- מעבר עץ המבנה של
TPdf.ValidatePdfUa: קריאתValidatePdfUaPageContentTaggingלכל עמוד (הבונה מפת תביעות של מזהה תוכן מסומן ובודקת בהצלבה כל אובייקט טקסט/תמונה) נפסחת כעת בעמודים הבאים ברגע ש-pvuaiUntaggedContentכבר נמצא — אלמנטים מבניים עדיין נאספים עבור הבדיקות הרב-עמודיות (מזהה ייחודי של הערה, רצף כותרות), אך מעבר תיוג התוכן היקר לכל עמוד מופסק מוקדם
Version 1.89.0
שונה
- ביצועי שכבת מודל האובייקטים של Pdfium עבור
TPdf.ValidatePdfA: מעבר העמוד/אובייקט מקצר כעת דרך בשלוש רמות — לולאת העמוד יוצאת כאשר כל בעיות שכבת ה-Pdfium הרלוונטיות כבר נמצאו, לולאת האובייקט הבודד יוצאת כאשר שתי בעיות האובייקט (הטמעת גופן + שקיפות) מוגדרות, וסריקת התווים של עמוד הטקסט פוסחת על מעבר ה-.notdefכאשרUnicodeMapErrorכבר פגע; בדיקות זמינות ה-API שלAssigned()ודגלי התאימות נשמרים במטמון (cached) לבוליאנים מקומיים פעם אחת לפני הלולאה במקום להיבדק מחדש בכל עמוד/אובייקט/תו; במסמך גדול שאינו תואם לתקן, המעבר יכול כעת להיעצר לאחר העמוד הראשון במקום לסרוק את כל העמודים; במסמך תואם לתקן, התקורה לכל עמוד נמוכה יותר (ללא קריאות חוזרות ל-Assigned)
Version 1.88.0
נוסף
ValidatePdfXקיבל שמונה ערכיTPdfXValidationIssueחדשים ברמת התוכן המכסים את הגבלות חילופי הדפוס ש-PDF/X מטיל מעבר לסימני פורמט הקובץ: pvxiLzwForbidden (/LZWDecode), pvxiJavaScriptForbidden (/JavaScript), pvxiFormFieldsForbidden (/AcroForm//XFA), pvxiAdditionalActions (/AA), pvxiEmbeddedFilesForbidden (/EmbeddedFiles//FileAttachment), pvxiOpiForbidden (/OPI//Alternates), pvxiMissingTrimBox(אין/TrimBoxבאף עמוד), ו-pvxiTrappedNotSet (/Trappedחסר או/Unknown); בודק התאימות של PDF/X בדק בעבר רק סימני XMP/OutputIntent; זהו מעבר רמת התוכן הראשון שלו; כלי עזר משותפיםPdfStructureBytes/PdfHasName/PdfCountNameנוספו ל-FPdfPdfCommonכך שכל יחידות התאימות יכולות להשתמש בהם
Version 1.87.0
נוסף
- אימות PDF/UA מכסה כעת את כללי הגופנים המורכבים (composite-font) של ISO 14289-1 §7.21.3:
pvuaiCidSystemInfoMismatchמסמן גופני Type0 שה-CMap המשובץ שלהם והצאצא CIDFont אינם מסכימים עלRegistry/Orderingאו שה-Supplementשל ה-CIDFont עולה על זה של ה-CMap,pvuaiCMapNotEmbeddedמסמן CMaps המצוינים לפי שם (כ-EncodingאוUseCMap) שאינם CMaps מוגדרים מראש מטבלה 118 של ISO 32000-1, ו-pvuaiCMapWModeMismatchמסמן CMaps משובצים שה-WModeבמילון שלהם שונה מה-WMode בתוכן הזרם שלהם
תוקן
- בדיקת ה-
pvuaiCidFontMissingCidToGidMapשל §7.21.3.2 החמיצה מילוני CIDFontType2 שזוג המפתח/ערךSubtypeשלהם מופרד בשורה חדשה, וכעת גם מסמנת ערך שםCIDToGIDMapשאינוIdentity
Version 1.86.0
נוסף
- אימות PDF/UA מכסה כעת את כללי הקידוד TrueType של ISO 14289-1 §7.21.6:
pvuaiTrueTypeEncodingInvalidמסמן גופני TrueType לא-סמליים שה-Encodingשלהם חסר או שאינוMacRomanEncodingולאWinAnsiEncoding(ישירות או דרךBaseEncoding), ו-pvuaiSymbolicTrueTypeEncodingמסמן גופני TrueType סמליים הנושאים שםEncodingלא סטנדרטי
Version 1.85.1
שונה
- בדיקת סדר הטאב של ISO 14289-1 §7.18.3
pvuaiMissingTabsOrderפועלת כעת לפי עמוד: כל עמוד הנושא הערות חייב להצהיר על/Tabs /Sבמילון העמוד שלו, כך שעמוד אחות תואם אינו מסתיר עוד עמוד ללא הצהרה כזו
Version 1.85.0
נוסף
- אימות PDF/UA מבחין כעת בין טפסי XFA דינמיים לסטטיים על פי ISO 14289-1 §7.15:
pvuaiXfaDynamicמסמן טפסים שתצורת XFA שלהם מגדירה אתdynamicRenderל-required
שונה
- דגל המועמד הקודם לכל-XFA
pvuaiXfaPresentפרש לגמלאות ואינו מועלה יותר (XFA סטטי תואם לסעיף §7.15); ערך ה-enum נותר לצורך תאימות API
Version 1.84.0
נוסף
- אימות PDF/UA מזהה כעת תוכן אמיתי לא מתויג הנדרש על פי ISO 14289-1 §7.1:
pvuaiUntaggedContentמסמן אובייקטי טקסט ותמונה מרונדרים שאינם נתבעים על ידי עץ המבנה של העמוד (דרך מזהי תוכן מסומן שלהם) ואינם מסומנים כ-Artifact - עוזרי עמוד חדשים
GetPageContentMarkInfosו-ValidatePdfUaPageContentTaggingעם הרשומהTPdfPageContentMarkInfoלשימוש ישיר
Version 1.83.0
נוסף
- אימות PDF/UA אוכף כעת את מודל הכותרות של ISO 14289-1 §7.4.4:
pvuaiHeadingModelMixedמסמן מסמכים המשלבים את תגיתHהגנרית עם כותרות ממוספרותH1..Hn, ו-pvuaiHeadingMultipleInNodeמסמן צמתי מבנה הנושאים יותר מכותרת ילדHאחת
Version 1.82.0
נוסף
- אימות PDF/UA פותר כעת את ה-RoleMap הנדרש על פי ISO 14289-1 §7.1:
pvuaiRoleMapRemapsStandardמסמן ערכי RoleMap המגדירים מחדש סוג מבנה סטנדרטי, ו-pvuaiRoleMapUnresolvedמסמן סוגי מבנה לא סטנדרטיים בשימוש שהשרשרת שלהם ב-RoleMap חסרה, מנותקת או מעגלית — שרשראות עקיפות המגיעות לסוג סטנדרטי מתקבלות, וערכי RoleMap שאינם בשימוש אינם נשפטים לעולם - עוזרים חדשים
PdfUaIsStandardStructType,PdfReadRoleMapPairs(עם פענוח בריחה#hhשל שם PDF) ו-ValidatePdfUaRoleMapUsageלשימוש ישיר
Version 1.81.0
נוסף
- אימות PDF/UA מכסה כעת את תיוג הרשימות של ISO 32000-1 הנדרש על פי ISO 14289-1 §7.6:
pvuaiListStructureInvalidמסמן פריטי LI מחוץ למכל L וחלקי Lbl/LBody מחוץ לפריט LI, תוך קבלת רשימות מקוננות ושימוש לגיטימי ב-Lbl בתוך אלמנטי Note ו-BibEntry
Version 1.80.0
נוסף
- אימות PDF/UA מכסה כעת את תיוג הטבלאות של ISO 32000-1 הנדרש על פי ISO 14289-1 §7.5:
pvuaiTableStructureInvalidמסמן תאי TH/TD מחוץ לשורת TR ושורות או קבוצות שורות מחוץ למכל הטבלה שלהן,pvuaiTableHeaderMissingScopeמסמן תאי כותרת שהקשרם אינו ניתן לקביעה לא דרך תכונת Scope ולא דרך שיוך Headers/ID, ו-pvuaiTableHeadersUndefinedIdמסמן הפניות Headers במסמכים שאינם מגדירים מזהי אלמנט מבנה TPdfStructureElementחושף את תכונות הטבלהScope,HasHeaders,HeadersIds,ColSpanו-RowSpan, הנפתרות במהלך מעבר עץ המבנה
שונה
- מעבר עץ המבנה קורא כעת את כל תכונות הפריסה והטבלה במעבר יחיד על מילוני התכונות של כל אלמנט במקום סריקה אחת לכל תכונה
Version 1.79.1
תוספות
- דוגמת
AnnotationsLabהוסבה ל-Lazarus ול-C++Builder, ומצטרפת לדוגמת המסוף הקיימת של Delphi
תיקונים
TPdf.CreateAnnotationהיה עשוי לזרוק חריגה “Cannot set attachment points” עבור הערות סימון (markup) שמשתמשות בנקודות מרובעות (Highlight, Underline, StrikeOut, Squiggly) מכיוון שלהערה החדשה טרם היה חריץ (slot) עבור המרובע שיוחלף; כעת במקום זאת היא מצרפת (appends) את המרובע הראשון
Version 1.79.0
תוספות
- דוגמת מסוף Delphi חדשה
AnnotationsLab: יוצרת הערות טקסט, הדגשה, ריבוע ועיגול, כותבת אותן ל-PDF, ואז טוענת מחדש את הקובץ ומוגרת (enumerates) את רשימת ההערות בעמוד
Version 1.78.0
תוספות
- חדש:
TPdf.MeasureTextו-TPdf.MeasureTextWidth: מודדות את הרוחב והגובה המרונדרים של מחרוזת עבור גופן וגודל נתונים (ביחידות משתמש של PDF, 1 יחידה = 1/72 אינץ') מבלי להוסיף תוכן לעמוד, מה שמאפשר היגיון פריסה וגלישת מילים (word-wrap) על גביAddText; מסופקות על ידי היחידה העצמאיתFPdfMeasureבתור class helper - חדש:
TPdf.WrapText: גלישת מילים (word wrap) חמדנית הבנויה עלMeasureTextWidthשמפצלת טקסט ברווחים ואורזת מילים לשורות שאינן רחבות יותר מרוחב נתון (ביחידות משתמש של PDF); מילה בודדת ארוכה במיוחד מקבלת שורה משלה (ללא שבירה בתוך המילה), ומחזירה את השורות הגולשות כמערך
Version 1.77.0
תוספות
- הפונקציה
ValidatePdfAקיבלה שלושה ערכים חדשים שלTPdfAValidationIssueהמכסים את הסעיפים שדורגו קודם לכן כ-“NO” או “reader behaviour” בביקורת הפערים (gap audit) הקודמת (ערכים סודרים צורפו בסוף, הערכים הקיימים נותרו ללא שינוי):pvaiPdfiumNotDefGlyph(סעיף 6.2.11.8 ב-PDF/A-2 — תו שמתפענח ל-Unicode 0 ללא שגיאת מיפוי, שזהו התסמין בזמן הריצה להפניה לגליף.notdef; מזוהה באמצעות שכבת אובייקט-מודל של Pdfium),pvaiWordBreakMissing(רמה A, 6.8.3.2 — מחרוזת תצוגה של זרם תוכן הארוכה מ-20 תווים ללא רווח, סביר שזוהי הפרה של מיזוג מילים; חיפוש היוריסטי גס הנמנע מתוצאות חיוביות שגויות ב-CJK), ו-pvaiLinkActionMissingTarget(סעיף 6.6.3 — פעולת GoToR/URI/SubmitForm שחסר לה מפתח יעד תצוגה כך שקורא אינו יכול להציג אותה)
Version 1.76.0
נוסף (Added)
ValidatePdfAקיבלה שלושה ערכיTPdfAValidationIssueחדשים (מספרים סידוריים צורפו בסוף, הערכים הקיימים ללא שינוי):pvaiNameNotValidUtf8(PDF/A-2/3 6.1.8 — אסימון/BaseFontאו/FontNameהמכיל בתים ≥ 0x80 שאינם מהווים UTF-8 חוקי),pvaiInlineImageLzwForbidden(PDF/A-2/3 6.1.10 — תמונה מוטבעת בזרם תוכן של עמוד משתמשת במסנן LZW או Crypt), ו-pvaiTrueTypeDifferencesForbidden(6.3.7 Cor.2 — גופן TrueType לא סמלי שמילון ה-Encoding שלו נושא את/Differences)
Version 1.75.0
נוסף (Added)
ValidatePdfAקיבל שלושה ערכיTPdfAValidationIssueחדשים (נוספו בסוף סדר הערכים, ערכים קיימים ללא שינוי):pvaiIntegerImplementationLimit(PDF/A-2/3 6.1.13 — אסימון מספרי החורג מגבול המספר השלם של 32 סיביות עם סימן 2,147,483,647),pvaiBlendModeNotWhitelisted(PDF/A-2/3 6.2.10 — ערך/BMמחוץ לסט סטנדרטי blend-mode של ISO 32000-1 §11.3.5; משלים את ה-PDF/A-1pvaiTransparentColorSpaceהמאפשר רק Normal/Compatible), ו-pvaiHexStringOddDigits(6.1.6 — מחרוזת הקסדצימלית<...>עם מספר אי-זוגי של ספרות הקסדצימליות)
Version 1.74.0
נוסף (Added)
ValidatePdfAקיבל שלושה ערכיTPdfAValidationIssueחדשים (נוספו בסוף סדר הערכים, ערכים קיימים ללא שינוי):pvaiPermissionsViolation(6.1.12 — מילון/Permsהנושא את/DigestLocation,/DigestMethodאו/DigestValueלצד/DocMDP),pvaiTransActionForbidden(PDF/A-2 6.5.1 — פעולת מעבר מסוג Trans, מזוהה באמצעות תבנית מילון הפעולה/S /Transכדי למנוע התאמה שגויה ל-/Transparency), ו-pvaiPdfiumObjectTransparency(PDF/A-1 6.4 — אובייקט עמוד נושא שקיפות אמיתית לפיFPDFPageObj_HasTransparency, מה שמרחיב את שכבת מודל האובייקטים של Pdfium שהוצגה ב-v1.73.0 כדי לתפוס אפקטים של blend-mode/soft-mask שסריקת שמות ברמת הבתים יכולה לפספס)
Version 1.73.0
נוסף (Added)
TPdf.ValidatePdfAמכסה כעת מעבר של מודל האובייקטים של Pdfium מעל הסורק ברמת הבתים: הוא עובר על אובייקטי הטקסט של כל עמוד דרךFPDFPage_GetObject→FPDFTextObj_GetFont→FPDFFont_GetIsEmbeddedומדווח על גופן מרונדר שאינו משובץ כ-pvaiPdfiumFontNotEmbedded(ISO 19005 6.3.4), וטוען כל עמוד טקסט כדי לסרוק עםFPDFText_HasUnicodeMapErrorומדווח על מיפוי Unicode פגום כ-pvaiPdfiumUnicodeMapError(6.3.8). אלו הן בדיקות שהסורק ברמת הבתים אינו יכול לעשות — הוא רואה רק אסימוני שמות, לא מצביעי גופנים מפוענחים או מצב מיפוי לכל תו — והן ממוזגות לתוך התוצאה ברמת הבתים. הפונקציה העצמאית ברמת הבתיםValidatePdfAComplianceנותרת ללא שינוי
Version 1.72.0
נוסף (Added)
ValidatePdfAקיבל חמישה ערכיTPdfAValidationIssueחדשים (נוספו בסוף סדר הערכים, ערכים קיימים ללא שינוי):pvaiNeedsRenderingPresent(PDF/A-2 6.4.2 — קטלוג (catalog) לא יישא/NeedsRendering),pvaiDestOutputProfileRef(PDF/A-3 6.2.3 — רשומת OutputIntent לא תישא/DestOutputProfileRef),pvaiEmbeddedFileMissingUF(PDF/A-3 6.8 — מפרט קובץ עם/EFחייב לשאת גם/UF),pvaiXmpPacketBytesAttr(6.7.5 — כותרת חבילת ה-XMP לא תישא את תכונות ה-bytes=או ה-encoding=שהוצאו משימוש), ו-pvaiAnnotationToggleNoView(PDF/A-2 6.3.2 — ביט ה-ToggleNoView, ערך 512, של ביאור/F, אסור)
Version 1.71.0
שונה
ValidatePdfUaמעלה כעת אתpvuaiOrderedListMissingListNumbering(ISO 14289-1 7.6): סורק עץ המבנה (structure-tree walker) פותר את תכונת הפריסהListNumberingבכל אלמנטLדרך ה-API של תכונות Pdfium, ומסמן כל ערך מחוץ לסט של ISO 32000-1 טבלה 347 (Decimal,UpperRoman,LowerRoman,UpperAlpha,LowerAlpha,None,Circle,Disc,Square). תכונה חסרה אינה מסומנת, מאחר שהרשימה עשויה להיות לא מסודרת; זה סוגר את הפער השאריתי האחרון של ISO 14289-1 שתועד בסוף סבב 5
Version 1.70.0
נוסף
ValidatePdfUaקיבל ארבעה ערכיTPdfUaValidationIssueחדשים (נוספו בסוף סדר הערכים, ערכים קיימים ללא שינוי):pvuaiSubsetMissingCidSet(ISO 14289-1 7.21.4.2 — קבוצת משנה של CID מסוגFontDescriptorחייבת להצהיר על/CIDSet),pvuaiToUnicodeForbiddenValue(7.21.7 — לא ימפה CMap של ToUnicode אף קוד ל-U+FEFFאוU+FFFE; זרמים לא דחוסים נסרקים עבור צורות הפלט<FEFF>/<FFFE>),pvuaiLangInvalidFormat(7.2 —/Langחייב להיות תגית חוקית של RFC 1766 / BCP 47; דקדוק מתירני מקבלen,en-US,zh-Hans,es-419ומסמן ערכים שאינם תואמים בבירור), ו-pvuaiOrderedListMissingListNumbering(7.6 — נשמר למען שלמות ה-API; עדיין לא מועלה על ידי המאמת מאחר שהבחנה אמינה בין רשימות מסודרות ללא מסודרות דורשת את ערך התכונהListNumbering, שסורק עץ המבנה אינו חושף)
Version 1.69.0
נוסף
ValidatePdfUaקיבל שני ערכיTPdfUaValidationIssueחדשים (נוספו בסוף סדר הערכים, ערכים קיימים ללא שינוי):pvuaiWidgetOutsideForm(ISO 14289-1 7.18.4 — אלמנט מבנה מסוג Widget חייב להיות מקונן בתוך אלמנטForm; סורק עץ המבנה מוודא כעת את סוג ההורה הישיר של כל Widget) ו-pvuaiSubsetMissingCharSet(7.21.4.2 — קבוצת משנה מסוג Type 1 שלFontDescriptorחייבת להצהיר על/CharSet, המזוהה על ידי קידומת שם קבוצת המשנה בת שש אותיות ו-+ב-/FontName)
Version 1.68.0
נוסף
ValidatePdfUaקיבל שני ערכיTPdfUaValidationIssueחדשים (נוספו בסוף סדר הערכים, ערכים קיימים ללא שינוי):pvuaiUriActionIsMap(ISO 14289-1 7.18.5 — מילון פעולת URI לא יישא/IsMapעם הערךtrue, מאחר שזה משבית את יעד הקישור הנגיש) ו-pvuaiHeadingSequenceViolation(7.4.2 — כותרות ממוספרות חייבות להתחיל ב-H1ורצף יורד לא ידלג על רמה מתווכת, לדוגמהH1→H3מהווה הפרה). בדיקת הכותרות היא חוק ה-PDF/UA הראשון ברמת עץ המבנה במאמת:ValidatePdfUaStructureElementsסורק כעת את רשימת האלמנטים בעלי הסוג ומוודא את רצף ה-H1…H6(ו-H7+לפי 7.4.3) בסדר המסמך
Version 1.67.0
נוסף
ValidatePdfUaקיבל חמישה ערכיTPdfUaValidationIssueחדשים (נוספו בסוף סדר הערכים, ערכים קיימים ללא שינוי):pvuaiLinkMissingContents(ISO 14289-1 7.18.5 — ביאור מסוג Link חייב לשאת תיאור חלופי דרך/Contents),pvuaiAnnotationMissingContents(7.18.1 — לכל ביאור שאינו פטור ללא/Contentsחייב להיות תיאור חלופי; Popup ו-Widget פטורים),pvuaiEmbeddedFileMissingName(7.11 — מילון מפרט קובץ חייב להכיל/Fו-/UF),pvuaiMediaClipMissingAlt(7.18.6.2 — מילון נתוני קליפ מדיה חייב להכיל/CTו-/Alt), ו-pvuaiCidFontMissingCidToGidMap(7.21.3.2 — פונט CIDFont משובץ מסוג Type 2 חייב להכיל/CIDToGIDMap)
Version 1.66.0
נוסף
ValidatePdfUaקיבל חמישה ערכיTPdfUaValidationIssueחדשים (נוספו בסוף סדר הערכים, ערכים קיימים ללא שינוי):pvuaiRoleMapMissing(ISO 14289-1 7.1 — מסמך מתויג עם סוגי מבנה לא סטנדרטיים חייב לשאת/RoleMap),pvuaiOptionalContentAsKey(7.10 — מילון תצורת תוכן אופציונלי לא יישא את מפתח המצב האוטומטי/AS),pvuaiXfaPresent(7.15 — נוכחות/XFAשל AcroForm מסומנת מאחר ש-XFA דינמי אסור),pvuaiTrapNetAnnotation(7.18.2 — ביאורי/TrapNetאסורים), ו-pvuaiReferenceXObject(7.20 — אובייקטי Reference XObjects, המבוססים על סמן/Ref, אסורים)
תוקן
ValidatePdfUaכבר אינו מסמן לשוואpvuaiEncryptionPresentבכל קובץ מוצפן: PDF/UA מתיר הצפנה כל עוד מפתח/Pבמילון ההצפנה כולל את הביט במיקום 10 (ערך 1024) כמופעל, מה שמעניק גישה לטכנולוגיה מסייעת (7.16). ההפרה המדויקת מדווחת כעת באמצעותpvuaiEncryptionPBitMissingהחדש;pvuaiEncryptionPresentנשמר ב-enum לצורך תאימות API אך אינו מועלה יותר על ידי המאמת ברמת הבתים
Version 1.65.0
נוסף
ValidatePdfAקיבל חמישה ערכיTPdfAValidationIssueחדשים (נוספו בסוף סדר הערכים, ערכים קיימים ללא שינוי):pvaiCidFontMissingCidToGidMap(ISO 19005-1 6.3.3.2 Cor.2 — פונט CIDFont משובץ מסוג Type 2 חייב לשאת/CIDToGIDMap),pvaiSubsetMissingCharSet(6.3.5 — קבוצת משנה מסוג Type 1 שלFontDescriptorחייבת לשאת/CharSet),pvaiSubsetMissingCidSet(6.3.5 — קבוצת משנה של CID מסוגFontDescriptorחייבת לשאת/CIDSet),pvaiWidgetActionForbidden(6.6.1 — ביאור מסוג Widget לא יישא/Aאו/AA), ו-pvaiOptionalContentAsKey(ISO 19005-2 6.9 — מילון תצורת תוכן אופציונלי לא יישא את מפתח המצב האוטומטי/AS, רלוונטי כעת משום ש-PDF/A-2 מתיר תוכן אופציונלי)
Version 1.64.0
נוסף
ValidatePdfAקיבל שמונה ערכיTPdfAValidationIssueחדשים (נוספו בסוף סדר הערכים, ערכים קיימים ללא שינוי):pvaiHeaderBinaryMarkerMissing(ISO 19005-1 6.1.2 — כותרת ה-%PDF-x.yחייבת להיות מלווה בהערת%עם לפחות ארבעה בתים גדולים מ-127),pvaiExternalStreamRef(6.1.7 — מילון זרם לא יישא/F,/FFilterאו/FDecodeParms),pvaiOutputIntentScheme(6.2.2 — ה-OutputIntent/Sחייב להיות/GTS_PDFA1),pvaiInfoXmpDateMismatch(6.7.3 — InfoCreationDate/ModDateחייב להופיע גם כ-xmp:CreateDate/xmp:ModifyDate),pvaiMarkInfoMissing(6.8.2.2 — רמה A דורשת/MarkInfoעם/Marked true),pvaiAnnotationApDictViolation(6.5.3 Cor.2 — מילון ה-/APשל הביאור חייב להכיל רק/N),pvaiEmbeddedFileMissingAFRelationship(ISO 19005-3 Annex E.2 — כל מפרט קובץ משויך חייב לשאת/AFRelationship), ו-pvaiJpeg2000Violation(ISO 19005-2 6.2.8.3 — תמונת JPEG2000 חייבת להצהיר על רכיב 1, 3 או 4)
תוקן
ValidatePdfAכבר אינו מסמן לשוואpvaiAnnotationFlagsViolationבמסמכים המשתמשים בשם משאב פונט בן אות אחת כגון/Font << /F 5 0 R >>; סריקת הדגל/Fמותנית כעת בהקשר של ביאור (/Subtypeמסוג ביאור), בהתאמה להתנהגות המתועדת (6.5.3)ValidatePdfAמדווח כעת על דרישת הקובץ המשויך של PDF/A-3 לכל קובץ: מסמך מסומן רק כאשר/Type /Filespecמשובץ המפנה לזרם משובץ דרך/EFחסר את/AFRelationship, במקום הבדיקה הקודמת של הכול-או-לא-כלום עבור המסמך כולו (ISO 19005-3 Annex E.2)- נוספה פעולת ה-
/SetStateשהוצאה משימוש לקבוצת הפעולות האסורות לצד/SetOCGState, כך ששם הפעולה מה-PDF Reference נתפס ישירות (6.6.1)
Version 1.63.0
נוסף (נוסף)
TPdf.MeasureTextו-TPdf.MeasureTextWidth: מדידת רוחב וגובה רינדור של טקסט בגופן וגודל נתונים, ללא הוספת תוכן לעמוד (יחידות משתמש PDF, יחידה אחת = 1/72 אינץ׳), המאפשרת חישובי פריסה ועטיפת שורות אוטומטית מעלAddText; מסופק כיחידה עצמאיתFPdfMeasureכ-class helper
שונה (שונה)
Demo\Delphi\MergePDF,Demo\CBuilder\MergePDF,Demo\Lazarus\MergePDFשודרגו לשלוש סביבות הפיתוח: טווח עמודים לכל קובץ, נתיב פלט אופציונלי, ביטול כפילויות, יומן הרצה, לחצן ביטול, סיכום מיזוג; סימניות ומטא-דאטה מהמקור הראשון- דגמי
CreatePDFכוללים כעת אפשרות טקסט אירופאי לטקסט מוטעם בצ׳כית/צרפתית/גרמנית/ספרדית/פורטוגזית/פולנית/טורקית, לאימות בחירת גופן וטיפול ב-Unicode (לשעברEuropeanTextמוזג פנימה) - הוסרו
ExtractTextPagesו-EuropeanText: חילוץ עמוד-אחר-עמוד מכוסה על-ידי אפשרויות טווח עמודים/מפריד ב-ExtractText; רינדור רב-לשוני שלEuropeanTextמוזג אלCreatePDF
Version 1.62.2
תוקן (תוקן)
- כותרות C++Builder (
.hpp) נוצרו מחדש עבור כל גרסת RAD Studio וכל פלטפורמה (Win32/Win64/Win64x); הן סטו ממקורות Pascal והשאירו חתימות פונקציה מיושנות ויחידות חסרות שהגיעו למשתמשי C++Builder דרך הפצת המקור
Version 1.62.1
תוקן (תוקן)
- שוחזר הידור מקוד מקור ב-RAD Studio 12 Athens ובגרסאות קודמות: השמת
TArray<Byte>בנתיב האימות של PDF/UA השתמשה בהמרת מערך מרומזת הזמינה רק ב-Delphi 13, שלא התקמפלה ב-IDE ישנים יותר
Version 1.62.0
נוסף (נוסף)
TPdf.RenderPageThumbnailמרנדר כל עמוד לפי index לתוך bitmap המותאם ליחס ממדים, בלי לשנות את העמוד הנוכחי של המסמך, את העמוד הטעון או להפעיל אתOnPageChange
תוקן (תוקן)
TPdfThumbnailViewכבר לא משנה אתPageNumberשל מסמך המארח בזמן ציור; בעבר כל ציור מחדש טען עמודים מחדש, הפעילOnPageChangeוהשליך את text page, מה שעלול היה לשבשTPdfViewמקושר ולגרום ללולאות ציור מחדש. כעת thumbnails מרונדרים דרךRenderPageThumbnailבלי תופעות לוואי כאלה- אימות תאימות PDF/X בודק כעת מסמכים עם cross-reference streams (PDF 1.6, אופייני ל-PDF/X-4) ואובייקטים השמורים בתוך compressed object streams, במקום לדווח על קבצים כאלה באופן גורף כלא תואמים; הסמן
GTS_PDFXVersionנקרא גם מ-element-form וגם מ-RDF attribute-form ב-XMP - אימות PDF/R מדווח כעת על
pvriInfoXmpMismatchכאשר Info dictionary ו-XMP אינם מסכימים על Producer או Creator; הבעיה הוגדרה בעבר אך מעולם לא הועלתה - טיימרי form-fill נעקבים לפי בקשה, כך שמסמך שמריץ כמה טיימרים בו-זמנית (למשל JavaScript interval לצד הבהוב field caret) שומר את כולם במקום לאבד כל טיימר מלבד האחרון
- הציור של
TPdfViewוהמתודות הציבוריותRenderPage/RenderTileמחזיקים כעת את document render lock ומסדרים ברצף rendering מ-worker-thread של אותוTPdf(PDFium אינו thread-safe) - טקסט שאינו ASCII הנכתב למטא-נתונים של PDF/X, PDF/R ו-PDF/VT (שמות תנאי OutputIntent, Creator, Producer) מקודד כעת כמחרוזת UTF-16BE לפי ISO 32000-1 §7.9.2.2 במקום raw UTF-8, שקוראים תואמים היו מפרשים באופן שגוי
- עזרי התאימות קוראים נכון embedded metadata streams שבהם
/Lengthהוא indirect reference, טוענים source bytes עםReadBuffer(כך שקריאה קצרה נכשלת בצורה נקייה) ודוחים offset שלילי שלstartxrefבמקום להסתכן בקריאה מחוץ לטווח
Version 1.61.0
שונה (שונה)
- תיקוני הצהרות FFI/ABI שעשויים לדרוש קומפילציה מחדש של קוד שיישם את ה-callbacks המושפעים: ה-
FFI_OpenFileform-fill callback משתמש כעת ב-cdecl(Win32 stack convention), והפרמטרvalueשלFPDFAnnot_SetStringValueושלFPDFAttachment_SetStringValueהוא כעתFPDF_WIDESTRING(UTF-16LE) כדי להתאים לכותרות של PDFium - ה-callbacks של progressive-load
FX_FILEAVAIL.IsDataAvailו-FX_DOWNLOADHINTS.AddSegmentמקבלים כעת היסטים מסוגsize_t, ו-size_tהוא ברוחב מצביע ב-Free Pascal / Lazarus Win64 (בעבר נחתך ל-32-bit), מה שמתקן קריאות API של זמינות הנתונים ושלoutsize_tב-FPC Win64
תוקן (תוקן)
- בטיחות זיכרון: use-after-free של טיימר form-fill בעת השמדת
TPdfעם caret פעיל של AcroForm;FPDF_CloseDocumentכפול בנתיב השגיאה שלImportNPagesToOne; חריגות Pascal שנמלטות דרך גבול ה-C מתוך ה-callbacks שלFPDF_FILEWRITE/FPDF_FILEACCESSבמהלך שמירה והוספת JPEG; וגלישת שלם בחילוץ טקסט בעת קריאה מאינדקס התחלה עד סוף העמוד TPdfFuture<T>מספק כעת באופן אמין את ה-result callback שלו; בעבר התשובה כמעט תמיד אבדה (ולעתים יכלה לגעת ב-thread ששוחרר) משום שה-worker שחרר את עצמו לפני שהתגובה שהועמדה בתור הורצה- פלט PDF/A, PDF/X, PDF/E, PDF/R, PDF/VT ו-PDF/UA כותב כעת רשומות cross-reference באורך מדויק של 20 bytes כנדרש ב-ISO 32000-1 §7.5.4
- הזרקת Standards marker כבר לא הורסת dictionary כאשר המפתח שהוסר (למשל
/Trapped) היה הרשומה האחרונה, מה שבעבר בלע את>>הסוגר ויצר object פגום - זרמי OutputIntent ICC profile מציינים כעת את ספירת ה-
/Nהנדרשת ל-PDF/X ול-PDF/VT (כבר קיים עבור PDF/A); מסמכי מקור מוצפנים מפוענחים לפני הזרקת markers של PDF/X, PDF/E, PDF/R, PDF/VT ו-PDF/UA, כך שהפלט תקין במקום להיות פגום בשקט - ה-BOM של UTF-8 xpacket ב-XMP שנוצר נכתב כבייטים מדויקים, מה שמתקן פגיעה בהתקנות Delphi שבהן דף הקוד ANSI אינו Latin-1; כותרות incremental-update שומרות כעת את ה-
/Infoשל המסמך SaveAswith compression כבר לא מקצץ streams שה-/Lengthשלהם הוא indirect reference, וטבלאות cross-reference שנבנו מחדש משתמשות כעת ברשומות של 20 bytes, במספרי generation אמיתיים, ומשמיטות את מצביע/Prevהישן- אימות התאימות קורא markers של גרסת XMP בפורמט attribute עבור PDF/E ו-PDF/X (כך שקבצי PDF/X-4 שנשמרו בפורמט attribute מזוהים), דורש את המזהה המדויק
PDF/E-1, קורא נכון metadata streams של indirect-/Length, וכבר לא מבצע false-match ל-/IDאו/StructTreeRootשל רכיב מבנה בעת בדיקת ה-trailer של PDF/UA; offset פגום שלstartxrefכבר לא מעלה range error TPdfThumbnailView: העמוד האחרון נגיש כעת באמצעות פס הגלילה, העמוד הנוכחי של מסמך המארח משוחזר לאחר ציור thumbnails, וטיפול ה-mouse-leave הסטנדרטי נשלח שוב- Bitmap-ים של עמודים ותמונות בגווני אפור כבר לא מוצגים עם palette שגוי;
TPdfViewכבר לא נשאר עם reference תלוי כשה-TPdfשלו משוחרר קודם - דוחות Preflight: HTML נשמר כ-UTF-8 כדי להתאים ל-charset המוצהר, ו-JSON string escaping מייצר רצפי
\uנכונים עבור תווים שאינם ASCII ב-Free Pascal - בנייה ל-Trial: תיבת הדו-שיח של תזכורת ה-Trial מופיעה כעת במקום להישמט לפני שהספיקה להופיע
TPdfStreamAdapterדוחה כעת streams שגדולים מ-4 GiB עם שגיאה ברורה במקום לחתוך בשקט את האורך שהועבר ל-PDFium
Version 1.60.1
שונה (שונה)
- הדגמות AccessibilityReader ל-Delphi, Lazarus ו-C++Builder מפעילות כעת קריאה בקול על
TPdfReadingSession: כל עמוד מורכב לקטע דיבור אחד עםBuildSpokenTextFromWords, מיקומי המילים של SAPI מוזנים ל-FeedSpokenPosition, וה-session מקדמת עמודים ומנהלת את סמן המילים של התצוגה, במקום התזמור הכתוב ידנית שכל דוגמה נשאה קודם - מעקב הקריוקי ברמת המילה בדגמות עובד כעת גם כשהמנוע הוא NVDA:
EstimatePacingמתזמן את סמן הקריאה לפי זמן הדיבור שחלף, בעוד של-NVDA בעבר לא היה כלל מעקב מילים - השהיה והמשך בדגמות עובדים כעת גם עם NVDA:
ResumeRestartsChunkמשמיע מחדש את העמוד הנוכחי מתחילתו בעת Resume, בעוד SAPI שומר על השהיה והמשך מקומיים משלו
Version 1.60.0
נוסף (נוסף)
- רינדור חי לראייה נמוכה ב-
TPdfView: אפשרויות הרינדור החדשותreInvertו-reNightDuotoneצובעות מחדש כל אריח עמוד מרונדר (היפוך צבע מלא, או פלטת duotone לילית) לפני ציור שכבות החיפוש, הבחירה, הקריאה וסמן המילה, ומכניסות את טרנספורמציות צבעי ה-bitmap הקיימות לתוך המציג האינטראקטיבי גם בפריסות של עמוד יחיד וגם של עמודים פונים; החלפת האפשרויות מרעננת מיד NightDuotoneInkו-NightDuotonePaperמגדירים את פלטת הלילה, כברירת מחדל טקסט ענברי על עמוד שחור;reInvertגובר כששתי האפשרויות מוגדרות
Version 1.59.0
נוסף (נוסף)
TPdfReadingSession: רכיב תזמור קריאה בקול שאינו תלוי במנוע דיבור. הוא שומר את סמן הקטע, סמן המילה ומצב ההשמעה (Play/PlayFrom/Pause/Resume/Stop), מתקדם דרך קטעיTPdfSpokenTextשנטענו כאשר המארח מדווח שהמנוע סרק דרךTick, מתרגם היסטים בטקסט המדובר חזרה לתווי העמוד, ומנהל אוטומטית סמן מילים שלTPdfViewמצורף; המארח מחבר כל מנוע דיבור דרךOnSpeakואירועי הבקשה לביטול / השהיה / המשך, כך שהספרייה עצמה אינה קושרת שום API דיבורFeedSpokenPositionצורך מיקומי מילים של המנוע (כמוStatus.InputWordPositionשל SAPI);EstimatePacingעםEstimatedWordsPerMinuteמתזמן מנועים שאין להם אות מיקום;ResumeRestartsChunkמשמיע מחדש את הקטע הנוכחי עבור מנועים ללא השהיה טבעיתOnChunkChange,OnWordChangeו-OnFinishedמופעלים רק בשינויים אמיתיים, וכאשר ה-view המצורף משתחרר הוא מתנתק מעצמו באופן אוטומטי, כך שקוד המארח נשאר ללא ריצוד וללא סכנת קריסה
Version 1.58.0
נוסף (נוסף)
EstimateSpokenWordIndexמעריך איזו מילה מנוע הדיבור מבטא לפי הזמן שחלף וקצב מילים לדקה, ומקצה למילים ארוכות זמן רב יותר באופן יחסי, כך שמנועים שלא מדווחים על מיקום מילה (כמו לקוח הבקרה של NVDA) עדיין יכולים להניע את סמן הקריאה ברמת המילה; המתקשר מספק את הזמן שחלף, כך שהשגרה נשארת ללא שעון וניתנת לבדיקה ביחידה
Version 1.57.0
נוסף (נוסף)
- הרכבת טקסט מדובר עם מיפוי דו-תחומי למעקב קריאה בקול:
BuildSpokenTextFromWordsו-SpokenTextAppendבונים את המחרוזת שנמסרת למנוע text-to-speech מתוך תיבות המילים של העמוד תוך שמירת טבלת spans, ו-SpokenToPageCharמתרגם היסט מדובר שמדווח מהמנוע (כמוStatus.InputWordPositionשל SAPI) חזרה לאינדקס התו בעמוד, כך שמעקב ההדגשה ברמת המילה נשאר נכון כאשר הטקסט המדובר אינו כל טקסט העמוד (אזורים דלוגים, קריאה לפי יחידה, עקיפות הגייה) TPdfSpokenTextו-TPdfSpokenSpanנושאים את המחרוזת המדוברת יחד עם טווחי העמודים המקוריים שממנו הורכבו; היסטים על מפרידים שהוכנסו נפתרים למילה הממופה הבאה והיסטים מעבר למקטעים הממופים מדווחים כבלי התאמה
Version 1.56.9
נוסף
Demo\Delphi\PreflightReportמוסיף תצוגה מקדימה של Action Plan שמזקקת תקנים שלא עברו, סדרי עדיפויות, פעולות הבאות, קודי בעיות והמלצות לתוך דף עזר לתיקוןDemo\Delphi\PreflightReportCliמקבלplan/actionplanכפורמט פלט להרצות של קובץ יחיד ואצווה, וכותב את אותו דף עזר לתיקון לקובץ טקסט
שונה
- שתי הדגמות PreflightReport ב-Delphi מציגות כעת ספירות pass / action / review לצד סך התקנים והבעיות
Version 1.56.8
שונה
ViewerInteractionLabכולל כעת פקדי קפיצה לעמוד, פקדי zoom ידניים, רישום קואורדינטות מבוסס קליק שלDeviceToPage/PageToDevice, ו-log אינטראקציה ברור יותר עבור בדיקות בחירה, חיפוש, סיבוב וניווט- דפי ה-readme של
ViewerInteractionLabמתעדים כעת את זרימת האינטראקציה הנוספת לאורך סט ה-readme המקומי של ההדגמה
Version 1.56.7
נוסף
AccessibilityWorkbenchCliממפה כל ממצא שהופעל ל-WCAG 2.1 Success Criteria שלו ולתחום הסעיף ISO 14289-1 (PDF/UA-1), ומציג בדוחות סעיף כיסוי תקניםAccessibilityWorkbenchCliמחשב ציון נגישות מתועד בין 0-100 עם נוסחת עונשין שפורסמה ותחומי excellent / good / needs work / poor, המוצגים לכל קובץ וגם כממוצע אצווהAccessibilityWorkbenchCliמקבלfailscore=Nכדי להכשיל את הריצה (exit code 2) כאשר כל קובץ מקבל ציון נמוך מ-NAccessibilityWorkbenchCliכותב יומן SARIF 2.1.0 כאשר שם סיכום האצווה מסתיים ב-.sarif, עם כלל אחד לכל סוג ממצא שנושא את תגי WCAG 2.1 ו-PDF/UA שלו לצורך CI ו-code-scanning ingestionAccessibilityWorkbenchCliמוסיף פקודתversionשמדפיסה את גרסת PDFiumPas המקושרת
Version 1.56.6
נוסף
IntakeWorkbenchCliמחשב hash forensic ב-SHA-256 של כל קובץ קלט (ונופל ל-unavailableב-compilers שאין בהםSystem.Hash) ומדווח אותו בכל פורמטIntakeWorkbenchCliמקבלpasswords=file.txtכדי לנסות לפתוח מסמכים המוגנים בסיסמה מתוך רשימת מועמדים, ולתעד את אינדקס המועמד שהצליח בלי לרשום אף פעם את טקסט הסיסמהIntakeWorkbenchCliמקבלcopyto=dirכדי לנתב כל קובץ שנבדק לתוך תת-תיקייה לפי רמת סיכון, וכך להפוך את המנתח לממיין קלטIntakeWorkbenchCliכותב יומן SARIF 2.1.0 כאשר שם סיכום האצווה מסתיים ב-.sarif, עם כלל אחד לכל דגל סיכון ותוצאה אחת לכל קובץ שסומן לצורך CI ו-code-scanning ingestionIntakeWorkbenchCliמוסיף פקודתversionשמדפיסה את גרסת PDFiumPas המקושרת
Version 1.56.5
נוסף
IntakeWorkbenchCliמסיק כעת פעולות מומלצות לאחר הקלט כגון accept, request-password, manual-review, quarantine ו-deduplicate, וחושף ספירות פעולות בסיכומי אצווהAccessibilityWorkbenchCliמסיק כעת פעולות תיקון מומלצות כגון pass-through, remediate-tags, run-ocr, remediate-semantics ו-manual-review, עם ספירות פעולה תואמות באצווה
שונה
- שתי הדגמות ה-CLI ברמת הכלי מציגות את הפעולה המומלצת ב-console, text, HTML, JSON ו-CSV כך שמפעילי אצווה יוכלו לנתב קבצים בלי צורך בעיבוד לאחר מכן של שדות סיכון או סטטוס
Version 1.56.4
תוקן
- קריאה מחזורית של annotations, bookmarks או link annotations כבר לא דולפת את מחרוזות הטקסט של הפריט הקודם: רשומות התוצאה של
TPdfAnnotation,TBookmarkו-TLinkAnnotationמאופסות כעת באתחול שמודע לסוגים מנוהלים במקום אפוס זיכרון גולמי, כך שמסמכים עם מספר גדול מאוד של annotations נושאי טקסט כבר לא מנפחים את זיכרון התהליך לכל חיי היישום - השמדה של
TPdfשרשם handler שלOnUnsupportedFeatureמנתקת אותו כעת מה-callback הגלובלי של PDFium ברמת התהליך, כך שטעינת מסמך מאוחרת יותר ממופעTPdfאחר בלי handler משלו כבר לא יכולה לשגר קריאה אל הרכיב ששוחרר (use-after-free)
Version 1.56.3
תוקן
AccessibilityWorkbenchCliכבר לא סופר עמודים ריקים כעמודי heuristic reading-order, כך שמסמכים מתויגים עם עמודי הפרדה ריקים שומרים על מצב הנגישות הנכון שלהם; עמודים בלי תוכן קריא מדווחים כעת בנפרד- זיהוי כותרות טבלה ב-
AccessibilityWorkbenchCliכבר לא מייחס לטבלה חיצונית תאיTHששייכים לטבלה מקוננת, ושמות שדות טופס וגופנים מושווים כעת ברגישות לאותיות גדולות וקטנות כך ששדות נפרדים לא מתאחדים IntakeWorkbenchCliמלאי מארחי URL מסיר כעת userinfo, query ו-fragment, כך שקישור מעוצב כמוtrusted.example@evil.exampleמיוחס למארח האמיתי, ויעדיmailto:תורמים את הדומיין שלהם במקום להיות בלתי נראיםIntakeWorkbenchCliדוחות Markdown בורחים backticks בנתיבים, מארחים ושמות מצורפים שבשליטת תוקף, כך שלא ניתן לשבור את עיצוב הדוח מתוך מסמך
שונה
AccessibilityWorkbenchCliמדווח על כשלים בסריקת גופנים ובסריקת שדות טופס כספירות נפרדות, מסמן גופנים לא מוטמעים שיש להם גם מופעים מוטמעים, ומגביל רשימות גופנים ארוכות עם סימון קיטוע מפורשIntakeWorkbenchCliסיכומי אצווה מוסיפים עמודת ספירת attachment-annotation, ומפקד ההערות לכל עמוד מוגבל ל-20000 annotations לכל עמוד כשהמגבלה מדווחת בכל פורמט
Version 1.56.2
נוסף
AccessibilityWorkbenchCliבודק כעת הטמעת גופנים, tooltip-ים של שדות טופס, מקור reading-order, outlines של מסמך, מבנה טבלאות ורשימות, alternate text חשוד ופרטי בדיקה עשירים יותר לכל עמוד, כך שדוחות האצווה של הנגישות מזהים יותר יעדי תיקוןIntakeWorkbenchCliמדווח כעת על גבולות סריקת עמודים, פעולות launch ו-remote-go-to, מלאי מארחי URI, ספירות הערות, תכונות PDFium שאינן נתמכות, מזהי מסמך כפולים ודגלי סיכון מורחבים לסקירת קלט אוטומטית
שונה
IntakeWorkbenchCliמקבלmaxpages=Nבמצב קובץ יחיד ובמצב אצווה כדי להגביל סריקות עמודים לכל מסמך תוך כדי השלמת דיווחי metadata, attachment, script, XFA, signature ו-risk
Version 1.56.1
תוקן
- טעינת
pdfium.dllישן יותר שחסר בו export חדש יותר נכשלת כעת בצורה נקייה: נתיב הכשל מאפס כל נקודת כניסה API קשורה, כך שבדיקותAssigned()(לדוגמה עלFPDF_GetLastErrorאוFPDF_GetSecurityHandlerRevision) מדווחות שהספרייה אינה טעונה במקום לקרוא למודול שכבר שוחרר ולקרוס עם access violation UnloadLibraryמנקה כעת את כל bindings של PDFium API ולא רק את עזרי V8 האופציונליים, כך שאף מצביע פונקציה ישן לא שורד אחרי שה-DLL משוחרר
Version 1.56.0
נוסף
- סמן קריאה ברמת המילה בסגנון karaoke ב-
TPdfView:TrackReadingWordAtממפה היסט של התו הנוכחי של מנוע text-to-speech (כמוStatus.InputWordPositionשל SAPI) אל תיבות המילים של העמוד, מדגישה את המילה שמכילה אותו כשכבה נפרדת מעל בלוק הקריאה, מגלגלת אותה לתצוגה ומחזירה את אינדקס המילה, כך שהמילה המדוברת נדלקת כשהקול מתקדם SetReadingWordו-ClearReadingWordקובעים או מנקים ישירות את המילה המודגשת מתוךTPdfWordBox; קביעה מחדש של אותה מילה היא no-op, כך שהמעקב ברמת המילה לעולם לא מרצד בתצוגהReadingWordColorו-ReadingWordFollowשולטים בצבע סמן המילה ובשאלה אם התצוגה מגלגלת אוטומטית את המילה המדוברת לתצוגה
Version 1.55.2
תוקן
- ViewerInteractionLab נותן כעת לשורות ה-toolbar מרווח אנכי גדול יותר כך ש-Open PDF, Create Sample, navigation, search ו-selection controls לא חופפים עוד תחת גופנים מוקטנים
Version 1.55.1
תוקן
- ViewerInteractionLab ממקם כעת את Prev, Next ו-Rotate בשורה השנייה של ה-toolbar, וכך מונע את החפיפה בהפעלה עם Open PDF ו-Create Sample
Version 1.55.0
נוסף
- גשר word-to-selection עבור קריאת "read it, select it":
TPdfView.SelectWordBoxו-SelectWordSpanבוחרים תיבת מילה אחת או span של תיבות מילים באותו עמוד (מ-PageWordBoxes) לפי טווחי התווים שלהן, כך שגם את המילה או השורה שנקראות כעת אפשר לבחור ולהעתיק WordBoxIndexAtCharIndexממפה אינדקס תו חזרה לתיבת המילה שמכילה אותו, וכך מניע הדגשה מילה-אחר-מילה כשה-cursor של ה-TTS מתקדם
Version 1.54.0
נוסף
- Accessors של form-filling בקול שקוראים את השדה הממוקד ישר מה-cursor הלוגי:
FocusedFormFieldValue,FocusedFormFieldNameו-FocusedFormFieldDetailsעלTPdfו-TPdfViewמדווחים על ערך השדה הנוכחי, על השם הקריא לבני אדם (/TUtooltip, עם נפילה חזרה ל-/T) ועלTPdfFormFieldInfoהמלא (type, flags, options) — כל מה שממשק קולי צריך להכריז בזמן המעבר בין שדות טופס
תוקן
FocusedFormFieldValueקורא את השדה לפיFocusedFormFieldIndexבמקום pdfium interactive focus, כך שממלא טפסים מונע-קול מקבל את הערך הנכון גם בלי caret על המסך (ה-FocusedFormFieldTextהקיים עדיין משקף pdfium focus ולא השתנה)
Version 1.53.0
נוסף
- תמיכה בהדגשת מילים ברמת המילה:
TPdf.PageWordBoxesו-TPdfView.PageWordBoxesמפצלים עמוד ל-TPdfWordBoxrecords, שכל אחד מהם נושא את טקסט המילה, טווח התווים שלה ו-rectangle תוחם במרחב העמוד, כך שקורא נגישות יכול להדגיש כל מילה מדוברת בתורה (קריאת karaoke) על ידי מסירת ה-rectangle ל-SetReadingHighlight BuildWordBoxesחושף את שלב ה-tokenizer בפני עצמו, והופך טקסט עמוד ל-word boxes עם טווחי תווים
Version 1.52.0
נוסף
- עזרי רינדור לראייה נמוכה
InvertPdfBitmap,GrayscalePdfBitmapו-DuotonePdfBitmapמחילים טרנספורמציות צבע במקום על bitmap מרונדר ב-32-bit, כך שקורא נגישות יכול להציג עמודים בהיפוך צבע / מצב כהה, בגווני אפור, או בסכמת שני צבעים מותאמת (למשל רקע כהה עם טקסט בהיר) עבור משתמשי ראייה נמוכה - הטרנספורמציות רצות לפי pixel ומתנהגות באופן זהה ב-VCL וב-Lazarus/LCL, בלי לשנות את ממדי ה-bitmap
Version 1.51.0
נוסף
- יחידות קריאה ברמת המשפט לקריאה מסייעת בקול:
TPdf.ReadingUnits,TPdf.DocumentReadingUnitsו-TPdfView.ReadingUnitsממירות את זרם התוכן הקריא לרשומותTPdfReadingUnitמסודרות, בגודל משפט — כל אחת נושאת את הטקסט להשמעה יחד עם הסוג הסמנטי שלה, העמוד, rectangles של הדגשה ותג שפה, כך שאפליקציית screen-reader יכולה לעבור על עמוד או על כל המסמך יחידה מושמעת אחת בכל פעם - ניווט סמנטי עם
NextReadingUnitOfKind, שמאפשר לממשק קולי לקפוץ לכותרת, איור, פריט רשימה או תא טבלה הבא או הקודם בלי לסרוק את הזרם ידנית BuildReadingUnitsממיר כלTPdfContentFragmentsל-reading units ישירות: כותרות ותיאורי figure/alt נשארים שלמים בעוד פסקאות מתפצלות בגבולות משפט, נקודות עשרוניות נשמרות, וסמן הקריאה הוא אינדקס רגיל שבבעלות המתקשר
Version 1.50.0
נוסף
ValidatePdfAיכול כעת לבדוק מסמכי PDF 1.5+ ששומרים את catalog, OutputIntent או dictionaries אחרים בתוך compressed object streams (/Type /ObjStm). ה-object streams מנופחים והאובייקטים שבתוכם נפתרים, כך שמסמכים כאלה מאומתים לפי ערכם ולא מדווחים כחסרי סמני PDF/A
Version 1.49.5
תוקן
ValidatePdfAכבר לא מדווח על תיאור חסר שלpdfaExtension:schemasכבעיה. סכמת המזהה של PDF/A (pdfaid) מוכרת היטב, ולכן לא veraPDF ולא PDF/A-2/-3 דורשים עבורה תיאור extension-schema, ודיווח על היעדרו סיווג בטעות כל PDF/A תואם של צד שלישי. מסמכים שהספרייה עצמה מפיקה עדיין כוללים את התיאור
Version 1.49.4
תוקן
ValidatePdfAמזהה כעת את רמת ההתאמה כאשר מזהה PDF/A נכתב כמאפייני XML (pdfaid:part="2") במקום כאלמנטים צאצאים, כך שמסמכים בפורמט attribute-form כבר לא מדווחים עם רמה לא ידועה. זה גם מתקן שרשרת שבה רמה שלא זוהתה גרמה לבדיקות הספציפיות לחלק ליפול חזרה לכללי PDF/A-1 המחמירים ולסמן בטעות קבצים מוטמעים ושקיפות ש-PDF/A-2 ו-PDF/A-3 מתירים
Version 1.49.3
תוקן
ValidatePdfAבודק כעת מסמכי PDF 1.5+ שנתוני ה-cross-reference שלהם הם cross-reference stream (קבצים שאין להם את מילת המפתחtrailer). רמת ההתאמה, ה-trailer/IDושאר הסמנים נקראים מתוך מילון ה-cross-reference stream, כך שמסמכים כאלה נבדקים לפי ערכם ולא מדווחים כבלתי תואמים לחלוטין
Version 1.49.2
תוקן
ValidatePdfAכבר לא מדווח על בעיית non-embedded-font שגויה במסמכים שמוטמעים בהם כל הגופנים. ההיוריסטיקה הקודמת השוותה את מספר הטוקנים של/FontDescriptorמול תוכניות גופנים מוטמעות, אבל כל גופן מוטמע תורם שני טוקנים של/FontDescriptor(הפניה למילון הגופן בתוספת אובייקט ה-descriptor), כך שכל קובץ עם גופנים מוטמעים סומן בטעות. הבדיקה מדווחת כעת רק על מסמך שמפנה לגופנים אך לא מטמיע אף תוכנית גופן כלל, בהתאמה לתיקון המקביל ב-ValidatePdfUa
Version 1.49.1
תוקן
- פלט PDF/A מאומת כעת כתואם ל-PDF/A-1b ול-PDF/A-1a עם veraPDF: זרם ה-sRGB OutputIntent ICC profile המוטמע (שמופנה על ידי
/DestOutputProfile) מצהיר כעת על מונה רכיבים/Nהנדרש (3 עבור פרופיל RGB המובנה), בהתאם ל-ISO 19005-1 6.2.3.2. מסמכים שנוצרים על ידיSaveAsPdfAנכשלו בעבר באימות PDF/A-1 מחמיר כי זרם ה-destination profile השמיט/N; הערך נגזר מכותרת ה-ICC profile, כך שגם פרופיל CMYK או Gray שמסופק על ידי המתקשר מקבל את המונה הנכון
Version 1.49.0
תוקן
ValidatePdfUaכבר לא מדווח על XMP identification חסר באופן שגוי ב-PDFs מתויגים תואמים — מזהה ה-PDF/UA (pdfuaid:part),dc:title, תאריכי ה-XMP ו-/IDשל ה-trailer נקראים כעת מהבתים המקוריים של המסמך במקום מהעותק שנשמר מחדש, שמושמט ממנו זרם ה-/MetadataXMP, ובקבצים עם cross-reference stream גם/IDשל ה-trailer- בדיקת הטמעת הגופנים ב-
ValidatePdfUaתוקנה כך שמסמך שמטמיע את כל הגופנים שלו כבר לא מדווח כבעל גופנים לא מוטמעים; כעת מסומן רק מסמך שמפנה לגופנים אך לא מטמיע כלל תוכנית גופן ValidatePdfUaמקבל כעת אלמנט מבנהFormulaשהטקסט החלופי שלו מסופק דרךActualTextבמקוםAltentry (ISO 14289-1 §7.7), בהתאמה לכלל הקיים שלFigure
Version 1.48.0
נוסף
- בחירת טקסט פרוגרמטית ב-
TPdfView:SelectTextRange(לפי עמוד וטווח תווים) ו-SetSelection(לפי טווחים מפורשים לכל עמוד) בוחרים טקסט מקוד — למשל כדי לקרוא ולהדגיש קטע; שניהם מציירים מחדש ומפעיליםOnSelectionChangeכשהבחירה משתנה.SelectionRangesקורא את הבחירה הנוכחית כטווחי תווים לפי עמוד, ו-SelectionRectanglesמחזיר את ה-rectangles שלו בקואורדינטות העמוד עבור הדגשה מותאמת או גלילה אל
Version 1.47.0
נוסף
- ניווט שדות טופס למילוי טפסים מונע-קול, גם ב-
TPdfוגם ב-TPdfView:FormFieldTabOrder,FocusedFormFieldIndex,FocusFormField,FocusNextFormField,FocusPreviousFormField,ClearFormFieldFocusו-FocusedFormFieldText. אלה מזיזים cursor לוגי של שדה על פני שדות ה-widget של העמוד לפי סדר הטאב (עם גלישה בקצוות), כך שקורא מסייע יכול לעבור על הטופס, להכריז על כל שדה דרךFormFieldInfo[Index].AlternateName(ה-tooltip של /TU), ולמלא אותו דרךFormField[Index] - אירוע
TPdfView.OnFormFieldFocusChange, שמופעל כאשר cursor השדה זז (ומעביר את אינדקס השדה החדש, או -1 כשהמוקד נוקה)
Version 1.46.0
נוסף
- זרם תוכן לקריאה מסייעת ולהקשבה:
TPdf.ReadableContent,TPdf.ReadablePageContent,TPdf.DocumentReadableContentו-TPdfView.ReadableContentמחזירים רשימה מסודרת של פריטיTPdfContentFragmentסמנטיים, שכל אחד מהם נושא את הטקסט להשמעה (glyphs אמיתיים, אוActualText/Alt עבור figures), סוג fragment (heading עם level, paragraph, figure, list item, table cell, link, plain), שפה, עמוד 1-based, ו-rectangles של הדגשה לבלוק ולכל שורה. PDFs מתויגים מונרכבים בסדר קריאה לוגי מתוך עץ המבנה; עמודים לא מתויגים נופלים בחזרה לסדר הרינדור כך שכל מסמך יכול להיקרא בקול - הדגשת קריאה מסונכרנת ב-
TPdfView:SetReadingHighlight,ClearReadingHighlightו-ReadingHighlightColorpublished מדגישים את הבלוק שנקרא כרגע, מעל שכבות החיפוש והבחירה - סוגים ציבוריים חדשים
TPdfContentFragment,TPdfContentFragments,TPdfReadableContent,TPdfContentFragmentKindו-TPdfReadingOrderSource, וה-helper החדשClassifyStructType
Version 1.45.0
נוסף
ValidatePdfUaעובר כעת גם על עץ המבנה המתויג החי ומדווח על שלוש הפרות תוכן בעלות ביטחון גבוה שסריקה ברמת הבייטים לא יכולה לזהות: אלמנטFigureשאין לו Alt entry וגם לא ActualText (ISO 14289-1, 7.3), אלמנטFormulaבלי מאפיין Alt (7.7), ואלמנטNoteשחסר לו מזהה ייחודי (7.9). שלושה ערכיTPdfUaValidationIssueחדשים חושפים זאת:pvuaiFigureMissingAlt,pvuaiFormulaMissingAltו-pvuaiNoteMissingId. מעבר העץ מדולג במסמכים לא מתויגים- ה-helper הציבורי החדש
ValidatePdfUaStructureElementsמחיל את כללי עץ-המבנה האלה על רשימת אלמנטים שטוחה (כפי שמוחזרת על ידיTPdf.StructureElements), כך שאפשר להריץ את הבדיקות או לבדוק אותן ביחידה בלי לטעון מסמך מלא
Version 1.44.5
תוקן
- בדיקת הטמעת הגופנים של
ValidatePdfA(pvaiFontNotEmbedded, ISO 19005-1, 6.3.4) מזהה כעת גם גופנים פשוטים לא מוטמעים שאין להם/FontDescriptor, ובעיקר את 14 גופני Type 1 התקניים (Helvetica, Times, Courier וכן הלאה) ש-PDF/A דורש להטמיע בלי פטור. בעבר גופן כזה לא זוהה; הבדיקה סופרת כעת גם dictionaries של simple-font (/Type1,/TrueType,/MMType1) מול תוכניות הגופנים המוטמעות, בהדהוד לתיקון PDF/UA ב-1.44.3
Version 1.44.4
תוקן
ValidatePdfVTדוחה כעת עצי DPart שגויים ב-ISO 16612-2 §6.5 שבהם/DPartsהוא מערך הפניות שטוח במקום מערך של מערכים כנדרש, או שבהם DPart עלה חוזר על עמוד ה-/Startשלו כ-/Endאף שהטווח כולל עמוד אחד בלבדValidatePdfVTמאמת כעת את השמות ב-/NodeNameListכערכי XML NMTOKEN אחרי הרחבת escape של שם PDF#xx, כך ששמות היררכיה לא תקינים מדווחים דרךpvviMissingDPartRootבמקום להיות מתקבלים כמבנה DPart שמיש
Version 1.44.3
תוקן
- בדיקת הטמעת הגופנים של
ValidatePdfUa(pvuaiFontNotEmbedded, ISO 14289-1, 7.21.4) מזהה כעת גם גופנים פשוטים לא מוטמעים שאין להם/FontDescriptor, ובעיקר את 14 גופני Type 1 התקניים (Helvetica, Times, Courier וכן הלאה) שלגביהם PDF/UA אינו מעניק פטור מהטמעה. בעבר גופן כזה לא זוהה ומסמך שהשתמש בו יכול היה להיות מדווח כתואם; הבדיקה סופרת כעת גם dictionaries של simple-font (/Type1,/TrueType,/MMType1) מול תוכניות הגופנים המוטמעות
Version 1.44.2
תוקן
ValidatePdfVTמשאיר כעת marker קיים אך לא מזוהה שלpdfvtid:GTS_PDFVTVersionכ-pvcUnknownבמקום להוריד אותו ל-pvcNone. כך נשמר ההבדל בין מחרוזות לא תקינות ברמת הקובץ כמוPDF/VT-2sלבין מסמכים שאין בהם שום marker של PDF/VT; PDF/VT-2s מזוהה לפי כותרת ה-MIME stream ב-ISO 16612-2 Annex A, לא לפי marker ה-XMP של קובץ PDF- בדיקת
/DPartRootמאמתת כעת את סמנטיקת העץ של ISO 16612-2 §6.5 בצורה הדוקה יותר:/DPartRootNodeו-/NodeNameListחייבים לתאר את עומק ה-DPart בפועל, קישורי ההורה של DPart חייבים ליצור עץ,/Startו-/DPartsהם mutually exclusive, וכל/DPartשל עמוד חייב להצביע על DPart העלה שמכסה אותו באותו סדר depth-first של עץ העמודים
Version 1.44.1
תוקן
SaveAsPdfVTכותב כעת היררכיית Document Part מינימלית ב-ISO 16612-2 §6.5 כאשר ל-PDF המקור אין/DPartRootשמיש. העץ שנוצר מקשר כל עמוד דרך/DPart, שומר על היררכיה קיימת תקינה, ומשאיר metadata עשיר יותר של recipient/DPM ל-workflow הקוראValidatePdfVTמאמת כעת את מבנה ה-DPart השמיש, קורא ערכי XMP של PDF/VT הן ממאפייני RDF והן מטקסט אלמנט, ואוכף את הזיווג המדויק PDF/VT-to-PDF/X: PDF/VT-1 דורש PDF/X-4, בעוד PDF/VT-2 דורש PDF/X-4p, PDF/X-5g או PDF/X-5pgTPdfVTSaveOptions.Conformance = pvc2כבר לא כותב markers לא תקינים של PDF/VT-2 לקובץ יחיד. הכותב לקובץ יחיד מנרמל את הפלט ל-PDF/VT-1 כי PDF/VT-2 דורש סמנטיקת file-set
Version 1.44.0
נוסף
ValidatePdfUaמדווח כעת גם על הפרות PDF/UA ברמת התוכן שניתן לבדוק בבייטים, בנוסף לסמני הפורמט: תוכנית גופן שאינה מוטמעת (ISO 14289-1, 7.21.4), גופן שחסר לו/ToUnicodeCMap כאשר אין קידוד simple-font פטור (7.21.7), ומסמך שמכיל annotations אך לא מצהיר על סדר tabs של/Tabs /Sבעמוד (7.18.3)- שלושה ערכי
TPdfUaValidationIssueחדשים —pvuaiFontNotEmbedded,pvuaiFontMissingToUnicodeו-pvuaiMissingTabsOrder— נחשפים על ידיValidatePdfUaוגם בדוח ה-preflight. אלה היוריסטיקות גסות שנועדו כרמזי preflight ולא כוולידציה מלאה לפי ISO 14289-1
Version 1.43.1
תוקן
SaveAsPdfUaאוכף כעת את ערכי הקטלוג המחייבים של ISO 14289-1, 7.1:/ViewerPreferences/DisplayDocTitle trueו-/MarkInfo/Marked true/Suspects false, גם כאשר מסמך המקור כבר מספק את המילונים האלה עם ערכים חסרים או סותרים. בעבר הסמנים הוזרקו רק כשהמילונים היו חסרים לחלוטין, כך שמקור שהכיל למשל/ViewerPreferencesבליDisplayDocTitleאו/MarkInfoעם/Marked falseהיה נשמר מחדש לקובץ שאינו תואם- מפתחות קיימים במילון
/ViewerPreferencesאו/MarkInfoשקיים מראש נשמרים, ומילון שנמסר כהפניה עקיפה נפתר לפני החלת המפתחות המחייבים
Version 1.43.0
נוסף
ValidatePdfAמחיל כעת את כללי PDF/A-2 / PDF/A-3 עבור קבצים מוטמעים ומשויכים ועבור טקסט Level U. קבצים מוטמעים עדיין נדחים ב-PDF/A-1; עבור PDF/A-3 קובץ מוטמע שחסר לו המפתח הנדרש/AFRelationship(ISO 19005-3 Annex E) מסומן, בעוד שצירופי PDF/A-2 מותרים (התאימות שלהם עצמה אינה נבדקת רקורסיבית). בעיה חדשהpvaiUnicodeMappingMissingמדווחת על מסמך PDF/A-2u או PDF/A-3u שגופניו אינם נושאים מיפוי/ToUnicode(ISO 19005-2 6.2.11.7). שקיפות ו-optional content עדיין מסומנות רק עבור PDF/A-1
Version 1.42.0
נוסף
- PDF/A-2 (ISO 19005-2) ו-PDF/A-3 (ISO 19005-3) נתמכים כעת בכל שלוש רמות ההתאמה — a, b ו-u — על ידי
SaveAsPdfA,ValidatePdfAוהמאפייןPdfAConformance. המנייןTPdfAConformanceמקבלpac2a,pac2u,pac3aו-pac3u(ל-PDF/A-1 אין Level u). השמירה כותבת אתpdfaid:partהמתאים (2 או 3) ואתpdfaid:conformance(A, B או U), תוך שמירה על subtype ה-OutputIntentGTS_PDFA1ש-ISO 19005-2 משמר מטעמי תאימות. בקשה ל-Level A עדיין מדרדרת ל-Level B המתאים (לכל part) כשהמסמך חסר את המבנה המתויג שהרמה דורשת
Version 1.41.0
נוסף
ValidatePdfAמזהה כעת גם הפרות PDF/A ברמת התוכן שאותן הזרקת markers לא יכולה לתקן, בנוסף לסמני המבנה שכבר דווחו: JavaScript ופעולות אסורות אחרות, additional-actions (/AA), קבצים מוטמעים,LZWDecode, שקיפות (soft masks ו-transparency groups), optional content (/OCProperties), סוגי annotations אסורים (FileAttachment, Sound, Movie, 3D, Screen), AcroForm/NeedAppearances trueו-/XFA, גופנים שה-descriptor שלהם חסר תוכנית גופן מוטמעת, ותביעת Level A שנעשתה בלי המבנה המתויג הנדרש לפי ISO 19005-1 6.8. בדיקות השקיפות, ה-optional-content והקבצים המוטמעים חלות רק על PDF/A-1 (תכונות אלו מותרות ב-PDF/A-2 וב-PDF/A-3). ערכיTPdfAValidationIssueחדשים מציגים כל מקרה; הערכים הקיימים לא השתנו
Version 1.40.3
תוקן
SaveAsPdfAמסיר כעת כל הצפנת מסמך מקור לפני יצירת פלט PDF/A. ISO 19005-1 6.1.3 אוסר על מפתח ה-trailer/Encrypt, אך נתיב השמירה שימר בעבר את ה-security handler של המקור, כך ששמירה של מסמך מוצפן כ-PDF/A יצרה קובץ מוצפן ולא תואם. השמירה ל-PDF/A מפענחת כעת את המסמך תחילה. מסמכים לא מוצפנים אינם מושפעים
Version 1.40.2
תוקן
- הפסקת
SaveAsPdfAמלהנפיק תביעת תאימות שגויה ל-PDF/A Level A. כאשר מבוקש Level A (pac1a) אך למסמך המקור חסרים סמני המבנה המתויג הנדרשים לפי ISO 19005-1 6.8 — /StructTreeRootב-catalog ומילון/MarkInfoעם/Marked true— הקובץ הנשמר מזוהה כעת כ-Level B התואם (pdfaid:conformance=B) במקום להצהיר על Level A. פלט PDF/A-1b חזותי בלבד לא מושפע
Version 1.40.1
תוקן
- הדקנו את בדיקת התאימות לגרסת PDF כך שהפעולה
SetOCGState(set-optional-content-group-state) מזוהה כמאפיין של PDF 1.5. שמירה ליעד PDF 1.2, 1.3 או 1.4 שמכיל פעולתSetOCGStateנדחית כעת כדי להתאים ל-ISO 32000-1 (Table 198); בעבר פעולה כזו יכלה להיכנס לפלט בגרסה נמוכה יותר. הפעולה הנפרדת והמיושנת של PDF 1.2SetStateעדיין מתקבלת החל מ-PDF 1.2
Version 1.40.0
נוסף
- קשרנו את ה-API העדכני
FPDFPageObj_AddExistingMark(), שמחבר content mark קיים לאובייקט עמוד. כאשר אובייקטי עמוד עוקבים חולקים את אותו mark, ה-PDF הנשמר מאחד אותם ל-mark יחיד שמכסה את כולם; אובייקטים לא עוקבים מקבלים עותקים נפרדים - קשרנו את ה-API העדכני
FPDFTextObj_SetFontSize()לשינוי גודל הנקודה של אובייקט טקסט קיים, כהשלמה ל-binding הקיים שלFPDFTextObj_GetFontSize()
שונה
- רעננו את קבצי ה-DLL של runtime של PDFium המצורפים (Win32 ו-Win64, builds רגילים ו-V8) ל-snapshot upstream של 2026-06-02
Version 1.39.53
שונה
- שינינו את דגימות Delphi
PDFViewer,SplitViewו-MultiPageViewerכדי לפתוח מסמכים במצבZoom to Pageכברירת מחדל - ה-rerender הראשוני מתאים כעת את העמוד כולו למשטח המציג לפני שהמשתמש בוחר רמת zoom ידנית
- עודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.53
Version 1.39.52
שונה
- שיפרנו את
Demo\Lazarus\CreatePDFכך שהדגימה ההתחלתית כעת מייצרת PDF בן שני עמודים עם paths וקטוריים, תוכן טבלאי, תמונה מוטמעת, annotation טקסט, טקסט מסובב והסבר ברור יותר על בניית המסמך - נוספו דפי
README.htmlמלוטשים לכל תיקיית דמו של Delphi, C++Builder ו-Lazarus, במקום ה-README מבוסס הטקסט שנותר כדף מדריך קריא-בדפדפן - עודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.52
Version 1.39.51
- שיפרנו את
Demo\Delphi\PreflightReportClibatch summaries עם סיכומי סטטוס תקן עבור Pass, Action required ו-Review על פני התקנים שנבחרו - שורות לכל קובץ כוללות כעת ספירות של action-required ו-review ב-summaries של TXT / HTML / JSON / CSV, כך ש-artifacts של CI קל יותר לבדוק בלי לפתוח כל דוח שנוצר
- עודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.51
Version 1.39.50
- שיפרנו את
Demo\Delphi\PreflightReportCliבמצב batch של תיקייה כך ש-batchdir=folderאוסף נתיבי PDF שהתגלו, ממיין אותם, ואז מייצר דוחות בסדר יציב - סריקות תיקייה רקורסיביות מייצרות כעת סדר דוחות ושורות סיכום שניתן לשחזר, בעוד ש-
batch=list.txtמפורש ממשיך לשמור על סדר קובץ הרשימה - עודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.50
Version 1.39.49
- שיפרנו את
Demo\Delphi\PreflightReportClibatch summaries כך שירשמו הגדרות ריצה: סוג המקור, נתיב המקור, מצב רקורסיבי, תיקיית הפלט, פורמט הדוח, התקנים שנבחרו ומצבfailon= - סיכומי JSON כוללים כעת אובייקט
run, סיכומי TXT ו-HTML מציגים מקטע הגדרות ריצה, ושורות CSV חוזרות על אותם עמודות ביקורת עבור צינורות spreadsheet ו-CI - עודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.49
Version 1.39.48
- שיפרנו את
Demo\Delphi\PreflightReportClibatch output naming כך ששמות קבצי קלט כפולים שחולקיםoutdir=אחד כבר לא דורשים זה את זה על דוחות שנוצרו - הרצות batch מוסיפות כעת סיומות
-2,-3ואילך כאשר נתיב דוח שנוצר כבר הוקצה באותה ריצה, וסיכומים מתעדים את נתיב הדוח הסופי הבטוח מפני התנגשויות - עודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.48
Version 1.39.47
- משפר את סיכומי האצווה של
Demo\Delphi\PreflightReportCliכך שפלטי TXT ו-JSON כוללים כעת סיכומים מצטברים עבור סך הקבצים, קבצים שעובדו, קבצים שנכשלו, בעיות והתאמותfailon= - סיכומי CSV נשארים טבלת שורות טהורה לצרכנים קיימים, בעוד שסיכומי HTML ממשיכים להציג את אותם מדדים מצטברים בכותרת ה-dashboard
- מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.47
Version 1.39.46
- משפר את
Demo\Delphi\PreflightReportCliעםsummary=batch.html/.htmכך שהרצות אצווה יוכלו להפיק dashboard קריא בדפדפן לצד manifests של TXT / CSV / JSON - סיכומי HTML מציגים מדדים של total, processed, failed, issue ו-
failon=ואז מונים כל קלט עם קישורי דוח, סטטוס, ספירות וטקסט שגיאה - מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.46
Version 1.39.45
- משפר את
Demo\Delphi\PreflightReportCliעםbatchdir=folderו-recursiveכך שסקריפטים יוכלו לסרוק תיקיות PDF ישירות בלי לכתוב קודם קובץ רשימה - מצב batch של תיקייה משתמש מחדש ב-
outdir=,summary=,standards=ו-failon=מהמצב מבוסס הרשימה, בעוד שסימול לא-רקורסיבי סורק רק את התיקייה שנבחרה ו-recursiveכולל תתי-תיקיות - מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.45
Version 1.39.44
- משפר את
Demo\Delphi\PreflightReportCliעםsummary=batch.csv|json|txtכך שהרצות אצווה יוכלו להפיק manifest קריא-מכונה לצד הדוחות לכל קובץ - סיכומי batch כוללים את נתיב הקלט, נתיב הדוח, הסטטוס, מספר התקנים, מספר העברות, מספר הבעיות, מצב התאמת
failon=וטקסט שגיאה עבור jobs של CI וסקריפטים חיצוניים - מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.44
Version 1.39.43
- משפר את
Demo\Delphi\PreflightReportCliעםbatch=list.txtו-outdir=reportsכך שסקריפטים יוכלו לייצר דוחות preflight עבור רשימת קבצי PDF בהרצה אחת - מצב batch מדלג על שורות ריקות ועל שורות הערה
#, גוזר את שם הדוח.preflight.<ext>מכל PDF קלט, ממשיך אחרי שגיאות לכל קובץ, ומסכם קבצים שעובדו וקבצים שנכשלו לפני ההחזרה - מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.43
Version 1.39.42
- משפר את
Demo\Delphi\PreflightReportCliעםfailon=none|issues|action|reviewכך שעבודות CI יוכלו להפוך תוצאות preflight שנוצרו לקודי יציאה דטרמיניסטיים - ה-CLI מחזיר כעת קוד יציאה 2 כאשר כלל
failon=שנבחר תואם אחרי שדוח הקובץ וה-PDF המצורף האופציונלי נוצרו, בעוד ששגיאות ריצה עדיין מחזירות קוד יציאה 1 - מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.42
Version 1.39.41
- משפר את
Demo\Delphi\PreflightReportCliעםattach=output.pdfכך שניתן יהיה להטמיע דוח preflight שנוצר כקובץ מצורף ברמת המסמך בעותק PDF חדש - ה-CLI שומר על דיסק את קובץ הדוח TXT / HTML / Markdown / JSON / CSV שנוצר ומסרב לצרף בחזרה לנתיב ה-PDF המקורי, וכך מפחית סיכון להחלפת קובץ בטעות
- מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.41
Version 1.39.40
- נוסף
Demo\Delphi\PreflightReportCli, בן לוויה קונסולרי ב-Delphi ליצירתFPdfPreflightReportבצורה סקריפטבילית בלי לפתוח מציג - ה-CLI תומך ביצירת דוגמת sample ללא ארגומנטים ובארגומנטים של קלט / פלט, סיסמה אופציונלית, פורמטי פלט
text/html/md/json/csv, וסינוןstandards=עבור PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R ו-PDF/VT - מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.40
Version 1.39.39
- משפר את
FPdfPreflightReportעםTPdfPreflightReport.ToMarkdownו-SaveMarkdownToFileכך שניתן יהיה לייצא דוחות preflight כ-Markdown ידידותי למעקב בעיות - מעדכן את הדגמות
PreflightReportשל Delphi, C++Builder ו-Lazarus עם החלפת תצוגת Markdown ופעולות Save MD לצד זרימת TXT / HTML / JSON / CSV הקיימת - מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.39
Version 1.39.38
- משפר את דגימות Delphi, C++Builder ו-Lazarus של
SecurityAuditעם ייצוא דוח ביקורת JSON לצד זרימת TXT שמורה / העתקה הקיימת - דוח ה-JSON כולל
format,generatedAt,summary,findingCountושורותfindingsמובנות עם שדות severity, area ו-detail - מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.38
Version 1.39.37
- משפר את
FPdfPreflightReportעםTPdfPreflightReport.ToCsvו-SaveCsvToFileכך שניתן יהיה לייצא דוחות preflight כ-CSV ידידותי לגיליונות אלקטרוניים - מעדכן את דגימות
PreflightReportשל Delphi, C++Builder ו-Lazarus עם החלפת תצוגת CSV ופעולות Save CSV לצד זרימת TXT / HTML / JSON הקיימת - מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.37
Version 1.39.36
- משפר את
FPdfPreflightReportעםTPdfPreflightReport.IssueCategoryCountsיחד עם סוגים ניתנים לשימוש חוזרTPdfPreflightIssueCategoryCountו-TPdfPreflightIssueCategoryCountsלצורך צבירת בעיות ברמת marker לפי קטגוריה - מעדכן את
TPdfPreflightReport.ToText,ToHtmlו-ToJsonכך שפלט PreflightReport שנוצר כולל סיכומי ספירת קטגוריות בעיות לצד שורות לכל תקן והמלצות מפורטות לבעיות - מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.36
Version 1.39.35
- משנה שם של דגימת
PrintDialogהמורחבת ל-PrintPreferencesבכל Delphi, C++Builder ו-Lazarus כך שהשם של ההדגמה תואם כעת את workflow העדפות ההדפסה של המחבר, הדפסה N-up, סינון odd / even, גווני אפור, גבולות תאים ומיפוי duplex שלה - מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.35
Version 1.39.34
- משפר את
Demo\Delphi\PrintPDFעם טעינת PDF ב-drag-and-drop ומתעד את workflowDemo\CBuilder\PrintPDFהקיים לצד דגימות PrintPDF של Delphi ו-Lazarus - מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.34
Version 1.39.33
- נוסף
Demo\CBuilder\SplitView, ומשלים את מטריצת דגימות SplitView בכל Delphi, C++Builder ו-Lazarus - מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.33
Version 1.39.32
- נוסף
Demo\Lazarus\SplitView, ומביא השוואת PDF זו לצד זו ל-Lazarus עם פריסות של שניים או שלושה חלונות, ניווט ב-view פעיל, פקודות מסונכרנות, קביעות zoom ו-rotation - מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.32
Version 1.39.31
- נוסף
Demo\Lazarus\PrintPDF, שמביא ל-Lazarus את workflow ההדפסה התקני של PDF עם ניווט בתצוגה מקדימה, טווחי עמודים, עותקים, מצב collate, התקדמות וביטול - מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.31
Version 1.39.30
- נוסף
Demo\Lazarus\FontProperties, ומשלים את מטריצת הדגימות של FontProperties בכל Delphi, C++Builder ו-Lazarus - מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.30
Version 1.39.29
- נוסף
Demo\CBuilder\FontProperties, שמביא בדיקת metadata של תווים וגופנים באינדקס ל-C++Builder לצד דגימת Delphi - מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.29
Version 1.39.28
- נוסף
Demo\Delphi\ExtractTextPages, ומשלים את מטריצת דגימות חילוץ הטקסט לכל עמוד בכל Delphi, C++Builder ו-Lazarus - מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.28
Version 1.39.27
- נוסף
Demo\Lazarus\PrintDialog, ומשלים את מטריצת דגימות PrintDialog בכל Delphi, C++Builder ו-Lazarus - מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.27
Version 1.39.26
- נוסף
Demo\CBuilder\PrintDialog, שמביא ל-C++Builder את workflow של הדפסה N-up והעדפות הדפסה של המחבר לצד דגימת Delphi - מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.26
Version 1.39.25
- נוסף
Demo\CBuilder\ViewerInteractionLab, ומשלים את מטריצת דגימות ViewerInteractionLab בכל Delphi, C++Builder ו-Lazarus - עדכון workflow הבנייה של הספרייה ופלטי חבילת C++Builder ל-Win64 כך שמתודות האינטראקציה של
TPdfViewמקושרות כהלכה בדגימות Win64 - מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.25
Version 1.39.24
- נוסף
Demo\Lazarus\ViewerInteractionLab, שמביא את workflow האינטראקציה הממוקד של המציג ל-Lazarus לצד דגימת Delphi - מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.24
Version 1.39.23
- נוסף
Demo\Lazarus\SearchAndSelect, ומשלים את מטריצת הדגימות SearchAndSelect בכל Delphi, C++Builder ו-Lazarus - מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.23
Version 1.39.22
- נוספו
Demo\CBuilder\ContentExtractionLabו-Demo\Lazarus\ContentExtractionLab, ומביאים את workflow חילוץ התוכן הרב-קטגורי לכל ה-IDEים הנתמכים של הדגמות - מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.22
Version 1.39.21
- משפר את
Demo\Delphi\PreflightReport,Demo\Lazarus\PreflightReportו-Demo\CBuilder\PreflightReportעם בורר פורמט תצוגה מקדימה כך שמשתמשים יוכלו לבדוק פלט טקסט או JSON לפני שמירת הדוחות - מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.21
Version 1.39.20
- נוסף ייצוא JSON ל-
FPdfPreflightReportדרךTPdfPreflightReport.ToJsonו-SaveJsonToFile, ומפיק סיכומים קריאי-מכונה, סטטוס / עדיפות לכל תקן, פעולות הבאות ופרטי בעיות - מעדכן את
Demo\Delphi\PreflightReport,Demo\Lazarus\PreflightReportו-Demo\CBuilder\PreflightReportעם פעולות Save JSON לצד ייצוא TXT / HTML - מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.20
Version 1.39.19
- משפר את
FPdfPreflightReportעםTPdfPreflightStatus, קטגוריות בעיות, עדיפות לכל תקן והכוונה לפעולה הבאה בדוחות TXT / HTML - מעדכן את
Demo\Delphi\PreflightReport,Demo\Lazarus\PreflightReportו-Demo\CBuilder\PreflightReportכדי להציג סטטוס, עדיפות, מספר בעיות והפעולה הבאה ברשת הסיכום - מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.19
Version 1.39.18
- נוסף
Demo\Lazarus\SecurityAudit, ומשלים את מטריצת הדגימות של Delphi, C++Builder ו-Lazarus עבור workflow ביקורת משטח הסיכון של PDF לקריאה בלבד - דגימת Lazarus מונה הרשאות, attachments, פעולות JavaScript, הערות קישור URI / Launch, קישורי web, חתימות, מצב XFA, זמינות עזרי V8 / XFA ו-callbacks של תכונות שאינן נתמכות, ואז שומרת או מעתיקה את רשימת הממצאים כדוח TXT
- מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.18
Version 1.39.17
- נוסף
Demo\CBuilder\SecurityAudit, ומביא את workflow ביקורת משטח הסיכון של PDF לקריאה בלבד ל-C++Builder לצד דגימת Delphi הקיימת - דגימת C++Builder מונה הרשאות, attachments, פעולות JavaScript, הערות קישור URI / Launch, קישורי web, חתימות, מצב XFA, זמינות עזרי V8 / XFA ו-callbacks של תכונות שאינן נתמכות, ואז שומרת או מעתיקה את רשימת הממצאים כדוח TXT
- מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.17
Version 1.39.16
- נוסף
Demo\CBuilder\SearchAndSelect, ומביא את workflow המציג העצמאי SearchAndSelect ל-C++Builder לצד דגימת Delphi הקיימת - דגימת C++Builder יוצרת או פותחת PDFs, מונה התאמות בכל העמודים עם תצוגה מקדימה של מספר עמוד / אינדקס תו, תומכת ב-Previous / Next ובניווט באמצעות double-click, ומדגישה התאמות בעמוד הנוכחי עם
HighlightSearchText - היא גם חושפת
AllowUserTextSelection,SelectedText,SelectAll,CopySelectionToClipboard,ClearSelection,OnSelectionChangeואפשרויותDisplayModeשל spread; מטא-נתוני הגרסה מדווחים כעת על 1.39.16
Version 1.39.15
- נוסף
Demo\CBuilder\WatermarkStamp, ומשלים את מטריצת הדגימות של Delphi, Lazarus ו-C++Builder עבור workflows ניתנים לשימוש חוזר של watermark ו-stamp מסוג Form XObject - דגימת C++Builder יוצרת PDFs יעד ו-stamp, עושה שימוש חוזר בעמוד ה-stamp דרך
CreateXObjectFromPage, מחילה טרנספורמציותTPdfMatrix, ושומרת watermarks ממורכזים, stamps בפינות ותוויות מספר עמוד - מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.15
Version 1.39.14
- נוסף
Demo\Lazarus\WatermarkStamp, ומביא את workflow ה-watermark וה-stamp הניתן לשימוש חוזר ל-Lazarus - דגימת Lazarus יוצרת PDFs יעד ו-stamp, עושה שימוש חוזר בעמוד ה-stamp דרך
CreateXObjectFromPage, מחילה טרנספורמציותTPdfMatrix, ושומרת watermarks ממורכזים, stamps בפינות ותוויות מספר עמוד - מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.14
Version 1.39.13
- נוסף
Demo\CBuilder\PreflightReport, ומשלים את מטריצת הדגימות של Delphi, Lazarus ו-C++Builder עבור workflowFPdfPreflightReportהניתן לשימוש חוזר - דגימת C++Builder משתמשת ב-
FPdfPreflightReport.hppכדי להפיק סיכומי תקנים, תצוגות מקדימות של דוח TXT, קבצי דוח TXT / HTML, והתנהגות Open Last Report - מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.13
Version 1.39.12
- נוסף
Demo\Lazarus\PreflightReport, ומביא ל-Lazarus את workflow דוחות ה-preflight עבור PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R ו-PDF/VT - דגימת Lazarus יכולה לפתוח או ליצור PDF, לבחור תקני יעד, להציג תצוגה מקדימה של שורות סיכום ופלט דוח TXT, לשמור דוחות TXT / HTML ולפתוח את הדוח שנשמר לאחרונה
- מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.12
Version 1.39.11
- משפר את
Demo\Delphi\SearchAndSelectעם רשימת תוצאות חיפוש בכל העמודים שמתעדת מספר עמוד, אינדקס תו וטקסט תצוגה מקדימה - נוספו ניווט ב-Previous / Next וקפיצה לתוצאה ב-double-click תוך שמירה על התנהגות
HighlightSearchTextבעמוד הנוכחי - מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.11
Version 1.39.10
- משפר את
Demo\Delphi\SecurityAuditעם פעולות Save Report ו-Copy Report שמייצאות את הסיכום הנוכחי ואת שורות הממצאים כדוח ביקורת TXT - הדגימה מנקה כעת את מצב ייצוא הדוח כאשר לוח הביקורת מאופס, וכך שומרת את הדוחות שהועתקו או נשמרו מיושרים עם הממצאים הגלויים
- מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.10
Version 1.39.9
- משפר את
Demo\Delphi\ContentExtractionLabעם שמירה של PDF המקור, העתקת דוח ללוח הגזירים ובחירות קטגוריה של all / none - הדגימה מבטלת כעת את הדוח הנוכחי כאשר בחירות הקטגוריות משתנות, כך שייצואי TXT / JSON משקפים את היקף החילוץ הגלוי
- מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.9
Version 1.39.8
- נוסף
Demo\Delphi\ContentExtractionLab, דגימת workflow מאוחדת לחילוץ תוכן עבור metadata של מסמך, טקסט עמוד, אובייקטי עמוד, images, attachments, links, annotations, bookmarks ו-metrics של גופנים / תווים - הדגימה יכולה לפתוח PDF קיים או ליצור PDF סינתטי עם תוכן טקסט, תמונה, attachment ו-annotation, ואז להפיק שורות סיכום ודוחות TXT / JSON מפורטים
- מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.8
Version 1.39.7
- נוסף
Lib\FPdfPreflightReport.pas, helper דוחות ניתן לשימוש חוזר שעוטף אתValidatePdfA,ValidatePdfUa,ValidatePdfE,ValidatePdfX,ValidatePdfRו-ValidatePdfVTלאובייקטTPdfPreflightReportאחד - נוסף
Demo\Delphi\PreflightReport, דגימת workflow שפותחת או יוצרת PDF, בוחרת תקני יעד, מציגה תצוגה מקדימה של שורות סיכום והמלצות לבעיות, ושומרת דוחות TXT או HTML - הדוחות שנוצרים מתארים במפורש את גבול הוולידציה המובנה ברמת marker, כך שאפליקציות יוכלו לשלב אותם עם כלי preflight ייעודיים לרמת תוכן כשצריך
- מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus, רשימות פרויקטי חבילות ו-metadata של גרסת המתקין כדי לדווח על 1.39.7
Version 1.39.6
- נוסף
Demo\Delphi\SearchAndSelect, דגימת workflow ממוקדת של המציג עבור הדגשת חיפוש, בחירת טקסט, תצוגה מקדימה של טקסט שנבחר, העתקה, ניקוי ומצבי תצוגת spread - הדגימה מדגימה את
HighlightSearchText, אפשרויות החיפוש של match-case / whole-word,AllowUserTextSelection,SelectedText,SelectAll,CopySelectionToClipboardו-ClearSelectionבלי להוסיף API חדש לספרייה - מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.6
Version 1.39.5
- מרחיב את
Demo\Delphi\ViewerInteractionLabלדוגמת UI של מציג בסגנון SearchAndSelect עםHighlightSearchText, אפשרויות match-case / whole-word, תצוגה מקדימה של טקסט שנבחר ובקרות הבחירה / הלוח הקיימות - מרחיב את
Demo\Delphi\PrintDialogכדי לבדוק העדפות הדפסה של מחבר PDF:PrintCopies,PrintPageRanges,PrintScaling,PrintPaperHandlingומיפוי duplex גלוי שלSetPdfPrintPaperHandlingDevMode - נוסף
Demo\Delphi\SecurityAudit, דגימת משטח סיכון לקריאה בלבד שמונה הרשאות, attachments, document JavaScript, קישורי URI / Launch, קישורי web, חתימות, מצב XFA וזמינות עזרי V8 / XFA - עודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.5
Version 1.39.4
- נוספו
Demo\CBuilder\ImageToPDFו-Demo\Lazarus\ImageToPDF, ומשלימים את מטריצת הדגימות ImageToPDF בכל Delphi, C++Builder ו-Lazarus - הדגימות החדשות מדגימות בחירה של כמה images, תצוגה מקדימה של image נבחר, עמוד PDF אחד לכל image, התאמת גודל עמוד A4 במצב portrait / landscape, scaling ממורכז של image, התקדמות לכל image ופתיחת ה-PDF שנוצר אחרי השמירה
- מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.4
Version 1.39.3
- נוסף
Demo\CBuilder\BatchExport, ומביא את workflow הייצוא הרב-קובצי מ-PDF ל-JPG ל-C++Builder לצד דגימות Delphi ו-Lazarus הקיימות - הדגימה מדגימה
LoadCustomDocument,IPdfCancellationTokenSource, קלטTFileStreamבסטרימינג, התקדמות לכל קובץ ולכל עמוד, טיפול בביטול, קלטי DPI / quality / password ופתיחת תיקיית הפלט אחרי הסיום - מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.3
Version 1.39.2
- נוסף
Demo\Delphi\WatermarkStamp, דגימת workflow ניתנת להרצה של Form XObject שיוצרת PDF יעד ו-PDF stamp לשימוש חוזר, ואז מחילה watermarks ממורכזים, stamps בפינה הימנית העליונה ותוויות מספרי עמודים על כל עמוד - הדגימה מדגימה את
CreateXObjectFromPage,InsertFormObjectFromXObject,TPdfMatrixו-FPDFPageObj_SetMatrixבלי להוסיף API חדש לספרייה - עודכן
Docs\en-us\Examples.htmlכדי להשתמש בדפוס העדכני שלTPdfMatrix.Handleכאשר מעבירים matrices ל-FPDFPageObj_SetMatrix - מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.2
Version 1.39.1
- נוסף
Demo\Delphi\ViewerInteractionLab, דגימתTPdfViewממוקדת עבור מצבי תצוגה, מצבי fit, צבעי עמוד, rotation, בחירת טקסט על ידי המשתמש, פעולות clipboard ומשוב קואורדינטות שלDeviceToPage - נוספו
Demo\CBuilder\StandardsLab/Demo\Lazarus\StandardsLabכך שמשתמשי Lazarus יוכלו להריץ את workflow הוולידציה והפלט של markers עבור PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R ו-PDF/VT - רשימות התקנים נוספו ב-
Lib\37.0\PDFiumPas.dprojוב-Lib\FPC\PDFiumLaz.lpkותוקנה בניית דגימת DelphiSplitViewעל ידי הסרת import כפול שלWinapi.ShellAPI - תוקעו חוסמי batch-build בדגימות Delphi ב-
BatchExport,PDFViewer,MultiPageViewerו-SplitViewבלי לשנות את התנהגותן בזמן ריצה - תאימות batch-build של דגימות C++Builder ב-
PDFViewerוב-MultiPageViewerתוקנה על ידי החלפתnullptrב-NULLעבור מצב הפרויקט הנוכחי - מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.1
Version 1.39.0
- נוסף
Demo\Delphi\StandardsLab, דגימת workflow ניתנת להרצה עבור תקנים שטוענת או יוצרת PDF, מריצהValidatePdfA,ValidatePdfUa,ValidatePdfE,ValidatePdfX,ValidatePdfRו-ValidatePdfVT, ומציגה תאימות שזוהתה, סטטוס pass/fail וספירות בעיות ברשת אחת - כפתורי השמירה של StandardsLab קוראים ל-
SaveAsPdfA,SaveAsPdfUa,SaveAsPdfE,SaveAsPdfX,SaveAsPdfRו-SaveAsPdfVT, וכך הפלט של markers של תקני PDF הופך גלוי בלי לכתוב harness מותאם אישית - מעודכן
TPdf.AboutInfo, metadata של חבילת Lazarus ו-metadata של גרסת המתקין כדי לדווח על 1.39.0
Version 1.38.0
- שכבות ההדגשה של חיפוש ובחירת טקסט ב-
TPdfViewמשתמשות כעת ב-alpha blending אמיתי במקום בציור logical mask, כך שתוכן העמוד נשמר מתחת להדגשות - נוסף
SetPdfPrintPaperHandlingDevModeלמיפויTPrintPaperHandlingלערכיDEVMODE.dmDuplexשל Windows: DMDUP_SIMPLEX, DMDUP_HORIZONTALו-DMDUP_VERTICAL TPdfView.SmoothScrollכעת מאנימט פקודות scrollbar של line/page במקטעים מונעי-טיימר; מעקב ה-thumb נשאר מיידי- עודכן
TPdf.AboutInfoומטא-נתוני גרסת המתקין כדי לדווח על 1.38.0
Version 1.37.0
TPdfמחזיק כעת מנעול רינדור לכל מופע שמבצע serialization ל-RenderPage, RenderTile, RenderPageProgressive, טעינת עמוד מחדש ונתיבי שחרור מסמך. רינדור מונחה-Worker דרך רכיב משותף כעת מעשי, בעוד שאפליקציות עדיין מתאמות mutation ולמשך החיים של המסמך- תיקנו את ה-wrapper של bitmap ללא העתקה כך שידחה פריסות DIB של
TBitmapמסוג bottom-up וייפול בחזרה ל-buffer בבעלות PDFium לפני ההעתקה החוצה, מה שמבטל כשלים של stride-corruption / access-violation בבדיקות רינדור VCL - הוקשחה התנהגות הבחירה ב-
TPdfView: AllowUserTextSelectionשולטת רק בקלט משתמש, APIs של בחירה ברמת קוד עדיין מציירים, ו-SelectAllעוקב אחרי ה-spread הגלוי בפועל כך שעמוד הכיסוי כבר לא בוחר את עמוד 2. בדיקות Delphi, Lazarus ו-C++Builder הורחבו בהתאם - עודכן
TPdf.AboutInfoומטא-נתוני גרסת המתקין כדי לדווח על 1.37.0
Version 1.36.0
- הפעלת בחירת טקסט למשתמשי קצה ב-
TPdfView— המאפייןAllowUserTextSelectionששמור מאז v1.17.0 מפעיל כעת צינור גרירה-לבחירה מלא. לחיצה שמאלית על תו טקסט נכנסת למצב בחירה (hit-test auto); לחיצה שמאלית על אזור ריק ממשיכה לגרור את התצוגה כבעבר. רכיב מילוי הטופס שומר על עדיפות, כך שלחיצה על שדה טופס עדיין ממקדת את השדה במקום להתחיל בחירה - לחיצה כפולה בוחרת מילה, לחיצה משולשת בוחרת שורה,
Ctrl+Aבוחר את הדף הנוכחי (את שני הדפים במצבי תצוגת spread), ו-Ctrl+Cמעתיק את הבחירה ללוח הגזירים של Windows כ-CF_UNICODETEXT Shift+Left/Shift+Rightמרחיבים את הבחירה תו אחד בכל פעם (ולעתים נשפכים לדף הסמוך במצב spread);Shift+Home/Shift+Endמרחיבים עד לקצה השורה החזותית תוך שימוש בגובה התיבה של תו הזרע כטולרנס לאשכול-שורה, כך ששורות עם גדלי גופן מעורבים נשארות מקובצות נכון- ריחוף מעל טקסט משנה את הסמן ל-
crIBeam; ריחוף מחוץ לטקסט מחזיר את סמן ברירת המחדל. בזמן שגרירת בחירה בטקסט מתבצעת, כניסה לאזור מת של 20 פיקסלים בכל קצה של הצופה מפעילה גלילה אוטומטית של הדף (פעימת 50 ms, 16 px / פעימה, עם קיבוע לאותם גבולות שבהם משתמש נתיב ההזזה) כך שהבחירה יכולה להתרחב מעבר לאזור התצוגה הנוכחי בלי לשחרר תחילה את העכבר - בחירה חוצת-דפים עובדת במצבי תצוגת spread (
dmTwoPageContinuous,dmTwoPageContinuousWithCover): גרירה שמתחילה בדף השמאלי ומסתיימת בדף הימני בוחרת טווח רציף המשתרע על שניהם.SelectedTextמחבר את המקטעים לפי דף באמצעות CR/LF כך שהטקסט המתקבל חוזר לקריאה כמו תוכן רגיל רב-שורות - מאפיין מתפרסם חדש
SelectionColor(ברירת מחדלclHighlight, צבע הבחירה של Windows) — בלתי תלוי ב-HighlightColorשמצבע את תוצאות החיפוש בצהוב. הדגשות חיפוש ובחירת גרירה חיה יכולות להופיע יחד על המסך בלי התנגשות צבעים - אירוע מתפרסם חדש
OnSelectionChangeמופעל בכל פעם שטווחי הבחירה הממומשים משתנים בפועל — לעולם לא בעת החלה זהה מחדש, כך שיישומי מארח יכולים לחבר אותו ישירות לטקסט של שורת מצב או למצב ההפעלה של כפתור בלי debouncing - ממשק API ציבורי חדש ב-
TPdfView:HasSelection,SelectionCharCount,SelectedText,ClearSelection,SelectAll,CopySelectionToClipboard. אלו נקודות כניסה ברמת קוד ופועלות תמיד בלי קשר ל-AllowUserTextSelection— הדגל מגביל רק קלט משתמש (mouse, Ctrl+C, Ctrl+A, Shift+arrows), כך שמארחי kiosk יכולים להשבית בחירה שמונעת על ידי המשתמש ועדיין לבנות כפתורי סרגל כלים "Select All / Copy" שמפעילים את אותו API - תפריט קופץ ברירת מחדל של לחיצה ימנית
Copy/复制מצורף אוטומטית כאשר המארח לא הקצהPopupMenuמשלו — הזרימה הסטנדרטית "בחר טקסט, לחץ ימני, העתק" עובדת מיד. הכיתוב נבחר בין אנגלית לסינית על פיSysLocale.PriLangID; מארחים שצריכים לוקליזציה מלאה (או תפריט עשיר יותר) פשוט מקציםPopupMenuמשלהם והברירת מחדל מושבתת - הבחירה מנוקה אוטומטית בעת מעברים של
SetPdf,SetPageNumber,SetActive(False), ו-DisplayMode, כאשרOnSelectionChangeמופעל בדיוק פעם אחת כשהבחירה הקודמת אינה ריקה. תת-המערכת למילוי טפסים שומרת על עדיפות — בזמן שעריכת שדה טופס מתבצעת, כל קיצורי המקלדת של הבחירה מושהים כך שהשדה יקבל אתCtrl+C/Ctrl+A/Shift+arrowsעבור הבחירה שלו - הורחבו חבילות הרגרסיה של Delphi ושל Lazarus ל-202 מקרים כל אחת, וחבילת C++Builder ל-159 מקרים, עם כיסוי לערכי ברירת מחדל, round-trip, התנהגות API ציבורי, ניקוי בעקבות שינוי מצב, גרירת עכבר (hit-text / hit-blank), לחיצה מול גרירה, החלפת סמן IBeam, מילה בלחיצה כפולה, שורה בלחיצה משולשת, קיצורי מקלדת, צירוף / דחייה / כיתוב של popup ברירת מחדל, ובחירת טקסט חוצת-דפים במצב spread — כולל בדיקת round-trip של CR/LF ללוח הגזירים
Version 1.35.0
- נוספה תמיכה בהזרקת markers של PDF/VT (ISO 16612-2:2010): TPdf.SaveAsPdfVT מקדם את המסמך הנוכחי לקובץ תואם PDF/VT-1 או PDF/VT-2 (תת-קבוצת ה-PDF המשמשת להדפסה משתנה ועסקאות). PDF/VT בנוי מעל PDF/X-4 — ISO 16612-2 §6.2.1 דורש שכל קובץ PDF/VT-1 יתאים גם ל-PDF/X-4 — ולכן המזריק כותב את סט markers המלא של PDF/X-4 (XMP
pdfxid:GTS_PDFXVersion = "PDF/X-4", Info/GTS_PDFXVersion (PDF/X-4)ו-/Trapped, catalog/OutputIntentsשמצביע על מילון OutputIntent עם ICC profile מוטמע) לצד המאפיינים הספציפיים ל-PDF/VT - ההזרקה הספציפית ל-PDF/VT מכסה XMP
pdfvtid:GTS_PDFVTVersion(= "PDF/VT-1" או "PDF/VT-2" לפי §6.3 Table 2) ו-pdfvtid:GTS_PDFVTModDate(נשמר מסונכרן עםxmp:ModifyDateלפי §6.3 NOTE 1), בתוספת תיאור pdfaExtension:schemas שמצהיר על מרחבי השמות pdfxid ו-pdfvtid כאחד (NPES URIshttp://www.npes.org/pdfx/ns/id/ו-http://www.npes.org/pdfvt/ns/id/). trailer נושא array של/ID - נוסף TPdf.SaveAsPdfVTToStream לפלט PDF/VT בזיכרון, וקיצור ברירת מחדל
TPdf.SaveAsPdfVT(FileName)שמפיק PDF/VT-1 עם OutputIntent מובנה של sRGB IEC61966-2.1 (3144 bytes, אותו profile כמו SaveAsPdfA / SaveAsPdfX) ו-/Trapped /False - נוסף TPdf.ValidatePdfVT: בודק PDF פתוח עבור markers של תאימות PDF/VT (נוכחות XMP
pdfvtid:GTS_PDFVTVersionו-GTS_PDFVTModDate, שוויון ביןpdfvtid:GTS_PDFVTModDateלביןxmp:ModifyDate, נוכחות המזהה הבסיסיpdfxid:GTS_PDFXVersion, נוכחות/DPartRootב-catalog לפי §6.5, /OutputIntentsעם/DestOutputProfile, trailer /ID, מצב הצפנה, ונוכחותxmp:CreateDate/ModifyDate) ומחזיר TPdfVTValidationResult עם רמת התאימות שזוהתה וסט הבעיות שנמצאו - נוסף מאפיין TPdf.PdfVTConformance: מחזיר את רמת התאימות של המסמך הפתוח כרגע (pvc1, pvc2, pvcNone או pvcUnknown) בלי צורך לקרוא ל-ValidatePdfVT במפורש
- סוגים חדשים יוצאו ביחידה החדשה FPdfPdfvt: TPdfVTConformance (pvcUnknown/None/1/2), TPdfVTTrappedState (ptvUnspecified/True/False/Unknown), TPdfVTValidationResult, TPdfVTValidationIssue, TPdfVTSaveOptions
- Document Part Hierarchy (
DPartRoot/DParttree לפי §6.5) היא structure ברמת היישום שתלויה במיפוי recipient / page-range של workflow הדפסה משתנה. SaveAsPdfVT לא מייצרת tree של DPart — ValidatePdfVT מציגה/DPartRootחסר כ-pvviMissingDPartRootכך שמתקשרים יוכלו לנתב קבצי PDF/VT דרך שלב בניית DPart נפרד. דרישות PDF/X-4 ברמת תוכן (הטמעת גופנים, שקיפות, ICC managed color, איסורי OPI / JavaScript / Reference XObject וכו") נשארות באחריות מחבר המסמך ו-pipeline הרינדור של PDFium - מחרוזת TPdf.AboutInfo עודכנה כדי לדווח על גרסת המוצר הנוכחית
Version 1.34.0
- נוספה תמיכה בהזרקת markers של PDF/R-1 (ISO 23504-1:2020): TPdf.SaveAsPdfR מקדם את המסמך הנוכחי לקובץ תואם PDF/R-1 (תת-קבוצת העברת תמונות רסטר של PDF המשמשת למסמכים סרוקים). ההזרקה מכסה את דרישות רמת הקובץ שניתן לצרף ב-post-processing — הערת זיהוי גרסת
%PDF-raster-1.0הייחודית שנכתבת בין מילון ה-trailer לבין מילת המפתח startxref (§5), מילון ה-catalog שנגזר לרשימת ה-whitelist של §6.3 (רק Version / ViewerPreferences / PageLayout / PageMode / AcroForm / Metadata שורדים), מילון Document Information Dictionary שנגזר לרשימת ה-whitelist של §6.4.3 (רק Creator / Producer / CreationDate / ModDate), זרם XMP של catalog שמכיל את ארבעת הפריטים של §6.4.4 Table 1 (xmp:CreatorTool / pdf:Producer / xmp:CreateDate / xmp:ModifyDate), ו-array של trailer /ID - נוסף TPdf.SaveAsPdfRToStream לפלט PDF/R בזיכרון, וקיצור ברירת מחדל
TPdf.SaveAsPdfR(FileName)עבור המקרה הנפוץ - נוסף TPdf.ValidatePdfR: בודק PDF פתוח עבור markers של תאימות PDF/R-1 (הערת footer
%PDF-raster-x.y, גרסת header, היעדר /Type /ObjStm, תאימות whitelist של ה-catalog, תאימות whitelist של מידע, נוכחות זרם metadata XMP, trailer /ID) ומחזיר TPdfRValidationResult עם רמת התאימות שזוהתה וסט הבעיות שנמצאו - נוסף מאפיין TPdf.PdfRConformance: מחזיר את רמת התאימות של המסמך הפתוח כרגע (prc1, prcNone או prcUnknown) בלי צורך לקרוא ל-ValidatePdfR במפורש
- סוגים חדשים יוצאו ביחידה החדשה FPdfPdfr: TPdfRConformance, TPdfRValidationResult, TPdfRValidationIssue, TPdfRSaveOptions.
TPdfRSaveOptions.Defaultמגדיר את StripInfoOptionalEntries ו-StripCatalogOptionalEntries ל-True, כך שה-injector כברירת מחדל מפיק catalog ו-Info dictionary תואמים ל-§6.3 / §6.4.3; מתקשרים יכולים להגדיר אותם ל-False כדי לשמר ערכי מקור (אז הפלט לא יעמוד בסעיפי PDF/R האלה, אבל markers אחרים יישארו מצורפים) - דרישות ברמת תוכן נשארות באחריות ה-PDF המקורי: מבנה Contents לכל עמוד (§6.5.1), form של MediaBox
[0 0 w h](§6.5.3), מגבלות filter (§6.2.2 — רק FlateDecode, CCITTFaxDecode bitonal, DCTDecode 8-bit gray/RGB), היעדר object streams (§6.2.4), ו-strip layout לפי §6.6. אלה אינם ניתנים לאכיפה באמצעות post-processing — PDF/R הוא תת-קבוצה מחמירה בהרבה מבחינה מבנית לעומת תקני PDF/x האחרים ודורש יצירת bytes מקוריים נכונה. ValidatePdfR חושפת את בעיות רמת הקובץ שהיחידה הזו יכולה לזהות; שילוב עם בודק PDF/R של TWAIN Working Group נדרש לבדיקות complete ברמת תוכן - מחרוזת TPdf.AboutInfo עודכנה כדי לדווח על גרסת המוצר הנוכחית
Version 1.33.0
- נוספה תמיכה בהזרקת markers של PDF/X (משפחת ISO 15930): TPdf.SaveAsPdfX מקדם את המסמך הנוכחי לקובץ תואם PDF/X-1a:2001, PDF/X-3:2002 או PDF/X-4 על ידי post-processing של ה-PDF הבסיסי עם incremental update. ההזרקה מכסה את דרישות רמת הקובץ שניתן לצרף ב-post-processing — זרם metadata של XMP הנושא
pdfxid:GTS_PDFXVersion(ו-pdfxid:GTS_PDFXConformanceעבור PDF/X-1a / PDF/X-3) יחד עם תיאור pdfaExtension:schemas תואם, מילון Document Information Dictionary שנכתב מחדש עם/GTS_PDFXVersion, /GTS_PDFXConformanceו-/Trapped, catalog מעודכן עם/OutputIntents [N 0 R]שמצביע על מילון OutputIntent עם/S /GTS_PDFXו-ICC profile מוטמע, ו-array של trailer/ID - נוסף TPdf.SaveAsPdfXToStream לפלט PDF/X בזיכרון, וקיצור ברירת מחדל
TPdf.SaveAsPdfX(FileName)שמפיק PDF/X-4 עם OutputIntent מובנה של sRGB IEC61966-2.1 (3144 bytes, זהה לפרופיל שמשמש את SaveAsPdfA) - נוסף TPdf.ValidatePdfX: בודק PDF פתוח עבור markers של תאימות PDF/X (מזהה XMP pdfxid והשוויון שלו לערך שב-Info-dictionary, תיאור schema של pdfxid extension, מערך /OutputIntents עם /DestOutputProfile, נוכחות Title, trailer /ID, מצב הצפנה, נוכחות xmp:CreateDate / xmp:ModifyDate) ומחזיר TPdfXValidationResult עם הרמה שזוהתה ומערך הבעיות שנמצאו
- נוסף מאפיין TPdf.PdfXConformance: מחזיר את רמת התאימות של המסמך הפתוח כרגע (pxc1a, pxc3, pxc4, pxcNone או pxcUnknown) בלי צורך לקרוא ל-ValidatePdfX במפורש. מחרוזת גרסת XMP מנותחת כדי להבחין בין שלוש רמות ההתאמה
- סוגים חדשים יוצאו ביחידה החדשה FPdfPdfx: TPdfXConformance (pxcUnknown/None/1a/3/4), TPdfXTrappedState (ptUnspecified/True/False/Unknown), TPdfXValidationResult, TPdfXValidationIssue, TPdfXSaveOptions.
TPdfXSaveOptions.Defaultמכוון ל-PDF/X-4 עם sRGB OutputIntent ו-/Trapped /False; מתקשרים יכולים לדרוס אתConformance, לספק blob שלIccProfileDataב-CMYK עבור workflows של הדפסה מסחרית, או לשנות אתOutputCondition/OutputConditionIdentifier/RegistryNameכדי להצביע על רשומת characterisation registry מסוימת של ICC (למשל FOGRA39, GRACoL2006_Coated1v2) - דרישות ברמת תוכן (כל הגופנים מוטמעים, ללא JavaScript, ללא annotations גלויים, איסור OPI, כללי שקיפות ל-PDF/X-1a / PDF/X-3 וכו") נשארות באחריות מחבר המסמך ו-pipeline הרינדור של PDFium. ValidatePdfX צריכה להיבדק יחד עם כלי preflight כמו callas pdfaPilot או Ghent PDF Workgroup Output Suite כדי לקבל אימות תאימות מלא
- מחרוזת TPdf.AboutInfo עודכנה כדי לדווח על גרסת המוצר הנוכחית
Version 1.32.0
- נוספה תמיכה בהזרקת markers של PDF/E-1 (ISO 24517-1:2008): TPdf.SaveAsPdfE מקדם את המסמך הנוכחי לקובץ תואם PDF/E-1 על ידי post-processing של ה-PDF הבסיסי עם incremental update. ההזרקה מכסה את דרישות רמת הקובץ שניתן לצרף ב-post-processing — זרם metadata של XMP הנושא
pdfe:ISO_PDFEVersion = "PDF/E-1"יחד עם תיאור pdfaExtension:schemas תואם, מילון Document Information Dictionary שנכתב מחדש עם הערך המחייב/ISO_PDFEVersion (PDF/E-1)הנדרש ב-§5, ה-blocks של גישור Info-XMP שמורשים מ-ISO 19005-1 §6.7 דרך §13.1 (dc:title / dc:creator / dc:description / pdf:Producer / pdf:Keywords / xmp:CreateDate / xmp:ModifyDate / xmp:MetadataDate / xmp:CreatorTool), ו-array של trailer/IDהנדרש ב-§6.2 - נוסף TPdf.SaveAsPdfEToStream לפלט PDF/E בזיכרון וקיצור ברירת מחדל
TPdf.SaveAsPdfE(FileName)עבור המקרה הנפוץ - נוסף TPdf.ValidatePdfE: בודק PDF פתוח עבור markers של תאימות PDF/E-1 (נוכחות XMP pdfe:ISO_PDFEVersion והשוויון שלו לערך ב-Info-dictionary, תיאור schema של pdfe extension, ערך /ISO_PDFEVersion ב-Info-dictionary, trailer /ID, נוכחות xmp:CreateDate / xmp:ModifyDate) ומחזיר תוצאה מובנית עם רמת התאימות שזוהתה ומערך הבעיות שנמצאו
- נוסף מאפיין TPdf.PdfEConformance: מחזיר את רמת התאימות של המסמך הפתוח כרגע (pec1, pecNone או pecUnknown) בלי צורך לקרוא ל-ValidatePdfE במפורש
- סוגים חדשים יוצאו ביחידה החדשה FPdfPdfe: TPdfEConformance, TPdfEValidationResult, TPdfEValidationIssue, TPdfESaveOptions
- מילון ה-Info נכתב מחדש — לראשונה בנתיב ה-post-processing של PDF/x ב-PDFiumPas — הוא כותב מחדש את אובייקט ה-Info הקיים עם אותו מספר אובייקט (כך שה-xref subsection / trailer /Info reference נשארים תקינים) ויוצר מילון Info חדש כאשר ב-trailer של המקור אין ערך /Info. PDFium עצמו מפיק מילון Info בכל SaveAs output, כך שבמקרה הנפוץ משתמשים בנתיב ה-rewrite
- דרישות ברמת תוכן (הטמעת גופנים, ToUnicode CMaps, XObjects / ExtGState keys / XFA forms אסורים וכו") נשארות באחריות מחבר המסמך — SaveAsPdfE מצרף את markers של רמת הקובץ אך אינו משנה את תוכן העמוד או מסיר features אסורים
- מחרוזת TPdf.AboutInfo עודכנה כדי לדווח על גרסת המוצר הנוכחית
Version 1.31.0
- נוסף support להזרקת markers של PDF/UA-1 (ISO 14289-1:2014): TPdf.SaveAsPdfUa מקדם את המסמך הנוכחי לקובץ תואם PDF/UA-1 על ידי post-processing של ה-PDF הבסיסי עם incremental update. ההזרקה מכסה את דרישות רמת הקובץ שניתן לאכוף באמצעות post-processing — זרם metadata של XMP הנושא
pdfuaid:part = 1יחד עם תיאור ה-pdfaExtension:schemas התואם,dc:titleמחייב,/MarkInfo << /Marked true /Suspects false >>ו-/ViewerPreferences << /DisplayDocTitle true >>ב-catalog (רק כאשר למקור אין אותם),/Langב-catalog (כאשר המתקשר מספק תג BCP 47), ו-array של trailer/ID - נוסף TPdf.SaveAsPdfUaToStream לפלט PDF/UA בזיכרון, וקיצור ברירת מחדל
TPdf.SaveAsPdfUa(FileName)עבור המקרה הנפוץ - נוסף TPdf.ValidatePdfUa: בודק PDF פתוח עבור markers של תאימות PDF/UA-1 (קיומו של StructTreeRoot, /Lang, /MarkInfo /Marked true עם /Suspects = false, /ViewerPreferences /DisplayDocTitle true, מזהה XMP pdfuaid:part, נוכחות dc:title, trailer /ID, מצב הצפנה) ומחזיר תוצאה מובנית עם רמת התאימות שזוהתה ומערך הבעיות שנמצאו
- נוסף מאפיין TPdf.PdfUaConformance: מחזיר את רמת התאימות של המסמך הפתוח כרגע (puc1, pucNone, או pucUnknown) בלי צורך לקרוא ל-ValidatePdfUa במפורש
- סוגים חדשים יוצאו ביחידה החדשה FPdfPdfua: TPdfUaConformance, TPdfUaValidationResult, TPdfUaValidationIssue, TPdfUaSaveOptions
- שדות Title / Author / Subject / Keywords / Creator / Producer / CreationDate / ModDate / DocumentId / InstanceId / Language שנשארים ריקים ב-TPdfUaSaveOptions מאוכלסים אוטומטית מ-FPDF_GetMetaText / FPDF_GetFileIdentifier / FPDFCatalog_GetLanguage, כך שמתקשרים קיימים יכולים לשמור בשורה אחת
- דרישות ברמת תוכן (שלמות tagging של StructTreeRoot, טקסט Alt ל-Figure, ToUnicode CMaps, הטמעת גופנים וכו") נשארות באחריות מחבר המסמך — SaveAsPdfUa מצרף את markers של רמת הקובץ אך אינו משנה את תוכן העמוד או ממציא tags. ValidatePdfUa מציג היעדר של StructTreeRoot כ-
pvuaiMissingStructTreeRootכך שמתקשרים יכולים לנתב מסמכים לא מתויגים לצינור tagging נפרד - מחרוזת TPdf.AboutInfo עודכנה כדי לדווח על גרסת המוצר הנוכחית
Version 1.30.0
- פלט PDF/A-1b עומד כעת בדרישות ISO 19005-1 (עם Cor.1:2007) עבור שקילות Document Information Dictionary / XMP: כל ערך Info dictionary ש-PDFium כותב ל-PDF הבסיסי משתקף כעת בחבילת XMP, כולל Title (dc:title), Author (dc:creator), Subject (dc:description לפי Cor.1), Keywords (pdf:Keywords), Creator (xmp:CreatorTool), Producer (pdf:Producer), CreationDate (xmp:CreateDate) ו-ModDate (xmp:ModifyDate). xmp:MetadataDate מונפק גם הוא
- ה-trailer של מסמך PDF/A מכיל כעת תמיד array של /ID (דרישת חובה קשיחה של ISO 19005-1 6.1.3). כאשר TPdf.SaveAsPdfA מעבד מסמך שכבר יש לו file identifier במקור, ה-permanent וה-changing IDs הקיימים בני 16 הבתים ממוחזרים; אחרת מזהה fallback דטרמיניסטי בן 16 בתים נגזר מבתי המקור
- ה-XMP המוזרק מטמיע כעת את תיאור pdfaid extension schema הנדרש ב-ISO 19005-1 6.7.8 (שהוחלף על ידי Cor.1) — pdfaid מטופל כ-extension schema ביחס ל-XMP Specification 2004, כך שכל הקבצים התואמים חייבים להצהיר על שמות המאפיינים, סוגי הערכים והקטגוריות שלהם במכל pdfaExtension:schemas
- TPdfASaveOptions קיבל חמישה שדות אופציונליים חדשים: Producer, CreationDate, ModDate (מחרוזות תאריך PDF בפורמט D:YYYYMMDDHHmmSSOHH'mm'), DocumentId ו-InstanceId (מחרוזות בתים באורך 16 בתים עבור array ה-trailer /ID). TPdf.SaveAsPdfA / SaveAsPdfAToStream מאכלסים אוטומטית את השדות החסרים מ-FPDF_GetMetaText ומ-FPDF_GetFileIdentifier, כך שמתקשרים קיימים ממשיכים לעבוד ללא שינויים
- TPdf.ValidatePdfA / TPdf.PdfAConformance מדווחים כעת על שלוש בעיות נוספות: pvaiMissingTrailerId (אין /ID ב-trailer), pvaiMissingXmpDates (xmp:CreateDate או xmp:ModifyDate חסרים), ו-pvaiMissingExtensionSchema (תיאור pdfaid extension schema חסר)
- תווים שאינם ASCII ב-Title, Author, Subject, Keywords, Creator ו-Producer מקודדים כעת כ-UTF-8 בחבילת XMP (XMP Specification דורשת UTF-8), וכך נשמר round-trip של metadata רב-לשוני דרך SaveAsPdfA
- מחרוזת TPdf.AboutInfo עודכנה כדי לדווח על גרסת המוצר הנוכחית
Version 1.29.0
- רעננו את ה-DLLs של PDFium המצורפים (Win32 ו-Win64, גם standard וגם V8 builds) ל-snapshot upstream של 2026-05-22, עם תיקוני upstream לנתיבי הקריסה של FPDFText_SetText / FPDFText_SetCharcodes והקשחות פנימיות שונות מפרויקט PDFium
- חשפנו את דגל השמירה החדש של PDFium FPDF_SUBSET_NEW_FONTS ב-FPdfPageOps.pas, כך ש-calls ל-FPDF_SaveAsCopy יכולים לבקש subsetting אוטומטי של קבצי גופן מוטמעים עבור אובייקטי טקסט שנוספו זה עתה. הדגלים הקיימים FPDF_INCREMENTAL, FPDF_NO_INCREMENTAL ו-FPDF_REMOVE_SECURITY מוגדרים כעת באמצעות צורת ה-bit-shift של upstream (הערך המספרי הישן 3 נשמר כ-FPDF_REMOVE_SECURITY_DEPRECATED לצורך תאימות בינארית)
- הוספנו את המניין FPDF_FONT_BACKEND_TYPE (FREETYPE / FONTATIONS) ואת השדה התואם m_FontLibraryType ב-FPDF_LIBRARY_CONFIG ב-FPdfView.pas, כך שאפליקציות שמאתחלות PDFium עם renderer של Skia יכולות כעת לבחור את backend הגופנים בזמן ההפעלה
- תוקנה חתימת TFPDFPage_InsertObject כך שתתאים ל-upstream: הפונקציה ב-C מחזירה כעת FPDF_BOOL (TRUE בהצלחה, FALSE אם page_object הוא NULL או שהעברת הבעלות נכשלה) במקום void. מתקשרים קיימים של PDFiumPas ממשיכים להדר ללא שינוי כי Delphi / FPC מאפשרים להתעלם מערך החזרה של פונקציה
- מחרוזת TPdf.AboutInfo תוקנה כדי לדווח על גרסת המוצר הנוכחית (הייתה מיושנת ב-v1.27.0 מאז המהדורה v1.28.0 שהתמקדה בתיעוד בלבד)
Version 1.28.0
- הורחבה משמעותית התיעוד בתוך־העמוד לכל אורך מדריך ה-API: כל ערך של מאפיין, שיטה, אירוע ופונקציה גלובלית נושא כעת תיאור בן שלושה פסקאות, רשימת הערות, דוגמת Delphi מרובת־שורות, ובלוק ראה גם עשיר יותר — המכסה למעלה מ־200 עמודים דלילים בעבר, לרבות כל המונים של TPdf, getters של מטא־נתונים, accessors של גופנים ותווים, מאפייני רמת־עמוד, רשומות ממופת, שיטות רמת־מסמך, וכל משטח המצב / התצוגה / האירועים של TPdfView
- כוונן פריסת העזרה כך שתתאים לקו הבסיס החזותי של losLab: התאמת גדלי h1/h2, איחוד סגנונות רשת הניווט של ה-API אל ה-StyleSheet המשותף, והסרת עקיפות ה-CSS המובנות לכל עמוד מ-ניווט.html
- התיעוד נשלח כעת עם סקריפט עזר (Docs\Build-Expand-Entries.ps1) המחדש את עשרת עמודי הערך מטבלת נתונים יחידה לצורך תחזוקה חוזרת
Version 1.27.0
- נוסף support להזרקת markers של PDF/A-1b: TPdf.SaveAsPdfA שומר כל מסמך פתוח כקובץ תואם PDF/A-1b על ידי post-processing של ה-PDF הבסיסי עם incremental update שמזריק זרם metadata של XMP, ICC OutputIntent של sRGB ו-catalog מעודכן — הכול בלי לדרוש APIs נוספים של DLL. עובד על כל פלטפורמה הנתמכת על ידי PDFiumPas
- נוסף TPdf.SaveAsPdfAToStream לפלט PDF/A בזיכרון
- נוסף TPdf.ValidatePdfA: בודק PDF פתוח לתאימות PDF/A (סמני XMP pdfaid, OutputIntent עם ICC profile מוטמע, הצפנה) ומחזיר תוצאה מובנית עם רמת ההתאמה שזוהתה ומערך של בעיות ספציפיות שנמצאו
- נוסף מאפיין TPdf.PdfAConformance: מחזיר את רמת התאימות של המסמך הפתוח כרגע (pac1b, pac1a, pac2b, pac3b, pacNone, או pacUnknown) בלי צורך לקרוא ל-ValidatePdfA במפורש
- סוגים חדשים יוצאו: TPdfAConformance, TPdfAValidationResult, TPdfAValidationIssue, TPdfASaveOptions (ביחידה החדשה FPdfPdfa.pas)
- SaveAsPdfA תומך בפרופיל ICC מותאם דרך TPdfASaveOptions.IccProfileData; כאשר השדה ריק נעשה שימוש אוטומטי בפרופיל sRGB IEC61966-2.1 המובנה (3144 bytes, אותו פרופיל כמו ב-SaveAsPdfA / SaveAsPdfX)
- הוחלף ה-reference HTML המונוליטי במערכת web help מובנית מחדש: 302 דפי API נפרדים (אחד לכל property, method, event ו-global function) המכסים את TPdf ו-TPdfView, כל אחד עם תיאור מלא, טבלת פרמטרים, דוגמת קוד Delphi וקישורי ראה גם
- נוסף ניווט.html: אינדקס API מקיף של עמוד אחד מאורגן לשישה חלקים (TPdf properties/methods/events, TPdfView properties/methods/events, global functions) עם רשת flex בת 5 עמודות לסריקה מהירה
- נבנו מחדש TPdf.html ו-TPdfView.html כדפי סקירה קומפקטיים של רכיבים השומרים על מקטעי ה-reference של הסוגים (Types, Constants, Global Variables) ומקשרים לדפי הערכים האישיים עבור כל החברים
- נוסף חיפוש טקסט מלא שמופעל על ידי Search.js עם התאמה מצטברת בצד הלקוח על פני כל 312 הדפים הממופים
- כל סרגלי הניווט ברחבי האתר עודכנו להצביע אל ניווט.html
Version 1.26.0
- נוסף Demo/Lazarus/BatchExport, ה-port ל-LCL של דגימת Delphi BatchExport מ-v1.14.0. אותו סט תכונות: ייצוא רב-קובצי מ-PDF ל-JPG עם התקדמות כללית לכל קובץ, התקדמות נוכחית לכל עמוד, קלטי DPI / quality / password ואצווה שניתן לבטל בשיתוף פעולה המבוססת על IPdfCancellationToken. תיקיית הפלט נפתחת במנהל הקבצים של הפלטפורמה כשהחילוץ מסתיים בהצלחה
Version 1.25.0
- נוספה ל-TPdf תמיכה ב-Form XObject לשימוש חוזר בעמודים, המאפשרת workflows של watermark, שכבת template ו-"stamp one page onto many": CreateXObjectFromPage מייצרת handle שניתן לשימוש חוזר מכל עמוד של מסמך אחר; InsertFormObjectFromXObject מכניסה עותק אחד של העמוד העטוף לתוך העמוד הנוכחי. מוחזר FPDF_PAGEOBJECT שהוכנס כך שהמתקשר יוכל למקם / להגדיל / לסובב אותו עם FPDFPageObj_SetMatrix ועם helpers של TPdfMatrix מ-v1.9.0
- מחלקת Pascal החדשה TPdfXObject עוטפת את ה-handle של PDFium FPDF_XOBJECT וסוגרת אותו אוטומטית ב-destruction שלה, ובכך מבטלת את הטקס הידני של FPDF_CloseXObject
- הורחבו חבילות הרגרסיה של Delphi ושל Lazarus ל-147 מקרים כל אחת, וחבילת C++Builder ל-123 מקרים, עם כיסוי ליצירת handles ולחוזי הוספת page-object
Version 1.24.0
- נוסף TPdf.RenderPageProgressive — גרסה ניתנת לביטול של RenderPage שמנהלת את לולאת הרינדור ההדרגתי של PDFium ובודקת IPdfCancellationToken מ-v1.7.0 בין איטרציות, כך שרינדורים ארוכים ברזולוציה גבוהה יכולים להיעצר באמצע העמוד במקום לחסום את המתקשר עד לסיום
- מחזיר ערך TPdfProgressiveStatus: prsDone, prsCancelled או prsFailed. מעבירים AToken = nil כדי לרנדר עד הסוף בלי להפסיק אף פעם (ללא אפשרות ל-prsCancelled)
- משתמש באותו נתיב מהיר של zero-copy שהוצג ב-v1.21.0 — PDFium כותב ישירות ל-DIB של TBitmap היעד. אותו fallback ישן חל כאשר לא ניתן לעטוף את ה-DIB
- הורחבו חבילות הרגרסיה של Delphi ושל Lazarus ל-145 מקרים כל אחת, וחבילת C++Builder ל-121 מקרים, עם כיסוי ל-nil-token (מסתיים), token שכבר בוטל מראש (prsCancelled) ושקילות פיקסלים מול RenderPage מסונכרן על token חי
Version 1.23.0
- נוספו שש מתודות חדשות ל-TPdfView שמציגות לאפליקציות את בחירת הטקסט של ה-widget של הטופס ואת Undo / Redo של PDFium: GetSelectedFormText מחזירה את הטקסט שנבחר כרגע בתוך widget הטופס הממוקד; SelectAllFormText בוחרת כל תו; FormUndo / FormRedo / FormCanUndo / FormCanRedo מנהלות את היסט העריכה של ה-widget הממוקד. ה-API-ים הבסיסיים של PDFium כבר נקשרו אבל לא היה להם entry point ברמה גבוהה. כל השש short-circuit בבטחה כאשר ה-view לא פעיל או כאשר למסמך אין widget של AcroForm במוקד
- הורחבו חבילות הרגרסיה של Delphi ושל Lazarus ל-142 מקרים כל אחת, וחבילת C++Builder ל-119 מקרים, עם כיסוי לחוזה no-form-no-focus עבור כל מתודה חדשה
Version 1.22.0
- נוספו wrappers להרכבת עמודים ב-TPdf: ImportPagesByIndex מקבלת מערך אינדקסים מבוסס-אפס כדי להעתיק עמודים מסוימים ממסמך מקור; ImportNPagesToOne מחזירה TPdf חדש לגמרי שהעמודים שלו הם composites של מסמך זה במצב N-up; MovePages מסדרת עמודים מחדש במקום. ה-API-ים הבסיסיים של PDFium כבר נקשרו אבל לא היה להם entry point נוח ל-Pascal
- ImportPagesByIndex מקבלת מערך ריק כדי לייבא את כל עמודי המקור (שקול להעברת nil ברמת C ABI)
- הורחבו חבילות הרגרסיה של Delphi ושל Lazarus ל-136 מקרים כל אחת, וחבילת C++Builder ל-115 מקרים, עם כיסוי לייבוא תת-קבוצה, ייבוא כל המסמך, סידור עמודים מחדש ו-composite של N-up
Version 1.21.0
- שיפרנו את ביצועי הרינדור על ידי החלפת TPdf.RenderPage / TPdf.RenderTile (וגם helpers התואמים ב-TPdfView) לנתיב פלט של zero-copy. PDFium כותב כעת ישירות ל-buffer של DIB ב-TBitmap היעד במקום ל-buffer פנימי שהיה מועתק אחר כך שורה-אחר-שורה, וכך נחסכת העתקת זיכרון אחת בגודל width x height x 4 bytes לכל רינדור. השיפור מורגש במיוחד ב-DPI גבוה (לוחות thumbnails, ייצוא באיכות הדפסה, ייצוא אצווה)
- הנתיב הישן לכל scanline נשמר כ-fallback בטוח למקרה הלא סביר שבו לא ניתן לעטוף את ה-DIB של היעד (ממדים קיצוניים, stride לא שגרתי, OOM). ההתנהגות זהה byte-identically בשני הנתיבים, רק איטית יותר ב-fallback
- הורחבו חבילות הרגרסיה של Delphi ושל Lazarus ל-132 מקרים כל אחת, וחבילת C++Builder ל-112 מקרים, עם כיסוי לשדרוג caller-bitmap ל-pf32bit, round-trip של ממדים, ובדיקת sanity של stride לביטמפ גדול
Version 1.20.0
- נוספה הדגשת תוצאות חיפוש ל-TPdfView: HighlightSearchText(Text, MatchCase, MatchWholeWord) סורקת את עמוד התצוגה הנוכחי ומחזירה את מספר ההתאמות שנמצאו, תוך צביעת מסכת HighlightColor מעל כל התאמה בכל redraw. ClearHighlight מסיר את ההדגשות; מעבר העמוד הנוכחי לעמוד אחר מנקה אותן אוטומטית כי ההתאמות ספציפיות לעמוד
- HighlightColor ברירת המחדל שלו היא clYellow והוא מתפרסם כך שאפליקציות יוכלו להתאים את ההדגשה לפלטת ה-UI שלהן
- הורחבו חבילות הרגרסיה של Delphi ושל Lazarus ל-129 מקרים כל אחת, וחבילת C++Builder ל-109 מקרים, עם כיסוי לצבע ברירת מחדל, round-trip של צבע, התאמות "real fixture word matches" מול המחרוזת sample.pdf, וחוזה ה-"missing word returns zero matches"
Version 1.19.0
- נוסף מאפיין FitMode ל-TPdfView עם ארבעה ערכים: pfmNone (zoom ידני), pfmActualSize (100%), pfmFitPage (העמוד כולו נכנס לתוך אזור התצוגה), ו-pfmFitWidth (רוחב העמוד תואם לרוחב אזור התצוגה). מצב ה-fit הפעיל מוחל מחדש אוטומטית ב-Resize וכאשר העמוד הנוכחי משתנה, כך שמסמכים ארוכים עם גדלי עמוד מעורבים נשארים ממוסגרים בדיוק
- קביעת Zoom ישירות מבטלת את מצב ה-fit הפעיל (FitMode חוזר ל-pfmNone), בהתאמה למוסכמת מציגי PDF סטנדרטיים שבה הקלדת ערך zoom מוציאה מ-Fit Page / Fit Width
- ברירת המחדל היא pfmNone כך שאפליקציות קיימות שומרות על התנהגות ה-zoom המפורשת שלהן
- הורחבו חבילות הרגרסיה של Delphi ושל Lazarus ל-124 מקרים כל אחת, וחבילת C++Builder ל-106 מקרים, עם כיסוי לערך ברירת מחדל, round-trip של מצב, fit-page שמפיק zoom אמיתי במסמך שנטען, ו-manual-zoom-cancels-fit-mode
Version 1.18.0
- נוסף מאפיין PageColor ל-TPdfView, שמנתק בין background של עמוד ה-PDF המרונדר לבין Color של ה-control שמסביב. ברירת המחדל היא clWhite, כך שעמודי PDF מרונדרים כעת בצבע לבן-נייר בלי קשר ל-theme של היישום המארח. מציגים במצב כהה יכולים כעת להשאיר את אזור הגלילה כהה בעוד שעמוד ה-PDF עצמו נשאר לבן (או כל צבע אחר שהיישום בוחר)
- שינוי התנהגות: יישומים שהיו קובעים בעבר את TPdfView.Color כדי לצבוע מחדש את עמוד ה-PDF צריכים לקבוע את PageColor במקום זאת. חוויית ברירת המחדל משתפרת עבור המקרה הנפוץ (עמודים לבנים על רקעי control מעוצבים) בלי שום שינוי קוד
- הורחבו חבילות הרגרסיה של Delphi ושל Lazarus ל-120 מקרים כל אחת, וחבילת C++Builder ל-103 מקרים, עם כיסוי לערך ברירת מחדל ול-round-trip של צבע
Version 1.17.0
- נוספו toggles של נעילת קלט משתמש ל-TPdfView כך שאפליקציות שמטמיעות את המציג בקיוסקים, ב-panes של תצוגה מקדימה או בהקשרים לקריאה בלבד יכולות לכבות gestures של ניווט בלי לרשת את המחלקה: AllowUserPageChange שולטת בקיצורי המקשים החדשים PgUp / PgDn / Ctrl+Home / Ctrl+End; ChangePageOnMouseScrolling שולטת בקפיצות העמוד החדשות בגלגלת למעלה / למטה; AllowUserTextSelection שמורה לנתיב עתידי של בחירת טקסט בגרירת עכבר. כל שלושתן ברירת המחדל שלהן היא True כך שאפליקציות קיימות משתדרגות בלי שינוי התנהגות
- ניווט עמודים בגלגלת עכבר מדלג על Ctrl+wheel כך שאפליקציות יכולות לשמור את Ctrl+wheel עבור zoom
- הורחבו חבילות הרגרסיה של Delphi ושל Lazarus ל-118 מקרים כל אחת, וחבילת C++Builder ל-101 מקרים, עם כיסוי לערכי ברירת מחדל ול-round-trip של toggles
Version 1.16.2
- הורחב כיסוי הרגרסיה של TPdfView עבור לחיצות על קישורי annotations כאשר עמוד ה-viewer שונה מעמוד ה-TPdf המשויך, תוך שימוש בנתיב לחיצת עכבר headless אמיתי בכל Delphi, Lazarus ו-C++Builder
- חבילות Delphi ו-Lazarus מריצות כעת 114 מקרים כל אחת, ו-C++Builder מריץ כעת 99 מקרים
Version 1.16.1
- תוקן טיפול בלחיצה על קישורים ב-TPdfView כך שפעולות annotation ו-web-link אוטומטיות משתמשות בעמוד שמוצג כרגע על ידי המציג, גם כאשר רכיב ה-TPdf המשויך חונה בעמוד אחר
- TPdfThumbnailView הוקשח כנגד הפניות Pdf תלויות כאשר רכיב ה-TPdf המקושר מושמד
- נוסף כיסוי רגרסיה לאורך חיי ההפניה ל-thumbnail; חבילות Delphi ו-Lazarus מריצות כעת 113 מקרים כל אחת, ו-C++Builder מריץ כעת 98 מקרים
- סונכרנו README, תיעוד הבדיקות, תוכן חיפוש / אינדקס של HTML Help ופלטי חבילות C++ שנוצרים, עם עדכוני האינטגרציה מ-v1.7.0 עד v1.16.0
Version 1.16.0
- נוסף דמו חדש של Delphi PrintDialog (Demo/Delphi/PrintDialog) שמתמקד בהדפסה N-up (1 / 2 / 4 / 9 עמודים לגיליון) עם סינון עמודים odd / even, עיבוד בגווני אפור וגבולות תא אופציונליים בעובי פיקסל אחד. הוא בן לוויה קטן ומכוון לדוגמת PrintPDF הקיימת, שכבר מכסה תצוגה מקדימה, קבצים אחרונים, zoom ו-scaling
Version 1.15.0
- נוסף רכיב חדש TPdfThumbnailView (יחידת FPdfThumbnail) שמרנדר thumbnail של עמוד אחד לכל שורה בפאנל צד גליל עם הדגשת hover ובחירה יחד עם ניווט click-to-go. הוא תוכנן לשבת ליד TPdfView כך שמשתמשי קצה יוכלו לדפדף במסמך ארוך לפי עמוד
- הרכיב נרשם בלשונית ה-palette של losLab לצד TPdf ו-TPdfView; מאפיינים מרכזיים: Pdf, CurrentPageIndex, ThumbnailWidth, ThumbnailHeight, TextColor, HoverColor, SelectionColor, BorderColor, ואירוע OnPageClick
- הורחבו חבילות הרגרסיה של Delphi ושל Lazarus ל-112 מקרים כל אחת, וחבילת C++Builder ל-97 מקרים, עם כיסוי לברירות מחדל, round-trip של גודל thumbnail, קיבוע ערכי קצה, round-trip של צבע והקצאת event handler
Version 1.14.0
- נוסף דמו Delphi חדש של BatchExport (Demo/Delphi/BatchExport) שמראה כיצד להמיר קבצי PDF רבים ל-JPG במעבר אחד תוך שימוש ב-TPdf.LoadCustomDocument לטעינה בסטרימינג, ב-IPdfCancellationToken לביטול שיתופי, ובפסי התקדמות כוללת לכל קובץ + לכל עמוד. הדמו משתמש במופע TPdf אחד לכל קובץ (PDFium עצמו אינו thread safe) ופותח את תיקיית הפלט ב-Explorer כאשר החילוץ מסתיים בהצלחה
Version 1.13.0
- התווספה שכבת UI לרינדור אסינכרוני ב-TPdfView דרך שלושה מאפיינים חדשים: AsyncRendering, LoadingText ו-LoadingColor. כאשר AsyncRendering הוא True, נתיב הציור של עמוד יחיד מצייר מחוון קטן “Loading...” מעל העמוד המרונדר, כך שיישומים המשתמשים ב-worker משלהם לרינדורים ארוכים חולקים affordance חזותי עקבי
- ברירות המחדל שומרות על ההתנהגות הקיימת: AsyncRendering הוא False, כך שיישומים שאינם מפעילים אותו לא רואים שינוי חזותי
- התיעוד מבהיר כעת ש-PDFium עצמו אינו thread safe — בפועל העברת הרינדור ל-worker מחייבת את המתקשר להחזיק TPdf אחד לכל worker; דגימת ה-batch-export הקרובה מראה את התבנית הזו
- הורחבו חבילות הרגרסיה של Delphi ושל Lazarus ל-106 מקרים כל אחת, וחבילת C++Builder ל-93 מקרים, עם כיסוי לערכי ברירת מחדל ול-round-trip של שלושת המאפיינים
Version 1.12.0
- נוספה טיפול בקישורים מונע-קליק ל-TPdfView. המאפיין החדש LinkOptions שולט בהתנהגות האוטומטית עבור ארבעת סוגי פעולות הקישורים ב-PDF: goto (קפיצת עמוד), URI (ShellExecute), launch (ShellExecute) ו-embedded GotoR (שמורה). ברירת המחדל מפעילה loAutoGoto ו-loAutoOpenURI; loAutoLaunch ו-loAutoEmbeddedGoto נשארים כבויים כך שלחיצה אקראית אינה יכולה להריץ תוכנית שרירותית
- נוספו האירועים OnAnnotationLinkClick ו-OnWebLinkClick שמופעלים לפני כל פעולה אוטומטית ומאפשרים לאפליקציות לבדוק את הקישור, לסמן אותו כ-Handled או לנתב אותו מחדש (לדוגמה, להציג בקשת אבטחה)
- זיהוי לחיצה על קישור פועל רק כאשר ה-gesture הוא לחיצה ולא גרירה, תוך שימוש בעוגן MouseDown חדש כך שתנועות pan עדיין זורמות דרך נתיב הגלילה הקיים ללא שינוי
- הורחבו חבילות הרגרסיה של Delphi ושל Lazarus ל-102 מקרים כל אחת, וחבילת C++Builder ל-91 מקרים, עם כיסוי לברירות המחדל של LinkOptions, round-trip של set והקצאת event-handler
Version 1.11.0
- נוסף ליטוש חזותי ל-TPdfView: מאפייני PageShadowSize, PageShadowColor ו-PageBorderColor מציירים צל אופציונלי מתחת למלבן העמוד וגבול בעובי פיקסל אחד סביבו. ברירות המחדל שומרות על המראה השטוח הקודם (PageShadowSize = 0; הגבול נצבע ב-clBlack כברירת מחדל אך מתמזג ברקע הלבן ברירת המחדל עד שהמתקשרים משנים את הצבעים)
- נוסף מאפיין SmoothScroll כדגל opt-in לאנימציית גלילה מצטברת עתידית; המאפיין עושה round-trip היום ומחובר כך שאפליקציות יוכלו לשמר את ההעדפה, בעוד שצד הרינדור עדיין משתמש בהתנהגות הגלילה המיידית הקיימת
- הורחבו חבילות הרגרסיה של Delphi ושל Lazarus ל-98 מקרים כל אחת, וחבילת C++Builder ל-89 מקרים, עם כיסוי לערכי ברירת מחדל, round-trip של מאפיין וקיבוע של shadow-size שלילי
Version 1.10.0
- נוסף קוד להכנסת תמונה ישירה דרך overloads חדשים של TPdf.AddImage ו-TPdfView.AddImage שמקבלים או נתיב קובץ או TBitmap, בנוסף ל-AddPicture הקיים מבוסס TPicture. AddImage(FileName) מזהה כל פורמט שנרשם עם יחידות הגרפיקה של VCL או LCL (BMP, PNG דרך יחידת PngImage, JPG וכו") ועובר באותו pipeline כמו AddPicture, כך שההתנהגות זהה
- AddImage(TBitmap) מדלג על התווך של TPicture, מה שמפשט מתקשרים שכבר מחזיקים TBitmap מרינדור או מעבודת יצירה באצווה
- הורחבו חבילות הרגרסיה של Delphi ושל Lazarus ל-92 מקרים כל אחת, וחבילת C++Builder ל-84 מקרים, עם כיסוי להכנסת bitmap, גבולות page-object, דחיית bitmap nil וטעינת קובצי BMP
Version 1.9.0
- נוספה תמיכה ברמת-על למטריצת טרנספורמציה דרך מחלקת TPdfMatrix החדשה ביחידת FPdfMatrix. TPdfMatrix עוטפת את FS_MATRIX של PDFium עם API מונחה-אובייקטים עבור Translate, Scale, Rotate, HorizontalFlip, VerticalFlip, CentralFlip, Skew ו-Multiply, ומתאימה להרכבת טרנספורמציות לפני העברתן ל-FPDFPageObj_SetMatrix ול-API-ים דומים של PDFium
- TPdfMatrix.Multiply מצלם כהלכה את ששת רכיבי המטריצה לפני חישוב ערכי השורה החדשים, וכך מתקן בעיה סמויה שבה היישומים החלופיים של Pascal דורסים רכיבים קודמים במהלך אותה קריאה ומייצרים תוצאות שגויות לכל הרכב שאינו translation טהור
- הורחבו חבילות הרגרסיה של Delphi ושל Lazarus ל-88 מקרים כל אחת, וחבילת C++Builder ל-81 מקרים, עם כיסוי ל-identity, reset, translate / scale / flip, סדר הרכבה פוסט-מכפילי ומקרה הרגרסיה של Multiply
Version 1.8.0
- נוספה טעינת stream לפי דרישה דרך המתודה TPdf.LoadCustomDocument(AStream, AOwnsStream) וה-helper class TPdfStreamAdapter החדשים, על בסיס FPDF_LoadCustomDocument של PDFium. PDFium קורא כעת בלוקים מתוך TStream המסופק רק כשצריך, כך ש-PDFים גדולים מאוד או מרוחקים כבר לא דורשים עותק זיכרון מלא מראש
- נוספה בעלות אופציונלית על stream: העברת AOwnsStream = True מעבירה את lifetime של TStream ל-TPdf, שמשחרר אותו כאשר UnloadDocument רצה
- הורחבו חבילות הרגרסיה של Delphi ושל Lazarus ל-79 מקרים כל אחת, וחבילת C++Builder ל-75 מקרים, עם כיסוי לטעינת stream דרך TFileStream, ניקוי stream בבעלות, וחוזה externally-owned-stream survives-unload
Version 1.7.0
- נוספו פרימיטיבים שיתופיים לביטול async ב-FPdfAsync החדש, עם IPdfCancellationToken / IPdfCancellationTokenSource ו-singleton לשימוש חוזר PdfNoCancellationToken כך ש-workflows ארוכים של רינדור וייצוא יוכלו לתמוך בסמנטיקת ביטול נקייה מהממשק
- נוסף helper קל משקל TPdfFuture<T> שמריץ worker על thread ברקע ומחזיר את מעטפת TPdfFutureResult<T> חזרה ל-thread הראשי, תוך הבחנה בין success, cancellation ו-failure
- הורחבו חבילות הרגרסיה של Delphi ושל Lazarus ל-76 מקרים כל אחת, וחבילת C++Builder ל-73 מקרים, עם כיסוי משותף למצב הביטול, cancel idempotent, fan-out של callbacks, ורישום לאחר ביטול
Version 1.6.10
- נוספה גישה ברמה גבוהה של TPdf.PrintPageRanges לטווח ההדפסה של העדפת ה-PDF viewer, עם החזרת טווחי עמודים מבוססי-1 עבור קוד האפליקציה
- נוספו TPdf.SetFormFieldFlags / SetFormFieldFlagsAt ועזרי TPdfView תואמים כך שאפליקציות יוכלו לעדכן דגלי שדות AcroForm דרך ה-API הציבורי, כולל כיסוי לדגלי password ו-multi-select
- כיסינו בחוזקה את ABI של bindings של PDFium עבור FPDF_DWORD בגודל Windows, callbacks של FPDF_FILEACCESS, ושדות slot של embedder ב-V8
Version 1.6.9
- נוספו bindings רינדור Skia ברמה נמוכה ל-API-ים FPDF_RenderPageSkia ו-FPDF_FFLDrawSkia שייצאו זה עתה ב-DLLs המצורפים של PDFium בגרסאות standard ו-V8
- כיסויי בדיקת ה-binding הציבורי הורחבו כך שטעינת DLLs של standard ו-V8 מאמתת כעת את נקודות הכניסה של רינדור Skia לצד בדיקות ה-capability הקיימות של V8 / XFA
Version 1.6.8
- נוספו TPdf.SetTextPositions ו-TPdfSingleArray כדי לקבוע מיקומי תו לכל תו על אובייקטי טקסט קיימים דרך ה-API החדש FPDFText_SetPositions שייצא
- FPDFText_SetPositions הועלה ל-binding נדרש עבור ה-DLLs המצורפים הנוכחיים של PDFium, תוך אישור שנקודות הכניסה של רינדור Skia עדיין אינן זמינות כי ה-DLLs עדיין לא מייצאים אותן
- הורחבו חבילות הרגרסיה של Delphi, C++Builder ו-Lazarus ל-65 מקרים כל אחת עם כיסוי לעמדות טקסט
Version 1.6.7
- נוספה גישה ברמה גבוהה של TPdf לפעולות JavaScript של name-tree במסמך, ומחזירה שמות פעולה וסקריפטים דרך JavaScriptAction ו-JavaScriptActions
- נוסף TPdf.FileIdentifier כדי לקרוא trailer IDs קבועים ומשתנים כ-TBytes בינאריים בלי תו הסיום של PDFium
- נוספו TPdf.PageBox, GetPageBox ו-SetPageBox עבור MediaBox, CropBox, BleedBox, TrimBox ו-ArtBox בעמוד הנוכחי
- אושר כי ה-DLLs המצורפים הנוכחיים של PDFium משאירים בזמן ריצה רק את נקודות הכניסה של רינדור Skia כלא זמינות כי ה-exports האלה אינם קיימים
- הורחבו חבילות הרגרסיה של Delphi, C++Builder ו-Lazarus ל-64 מקרים כל אחת עם כיסוי ל-JavaScript של מסמך, trailer ID ו-page-box
Version 1.6.6
- נוספה תמיכה בריצה ב-DLL של PDFium המצויד ב-V8. קביעת EnableV8Engine לפני הטעינה בוחרת כעת את pdfium.v8.dll מעץ DLLs\Win32 או DLLs\Win64 וחושפת bindings של V8/XFA בלבד כאשר ה-DLL שנטען מספק אותם
- נוספו V8FeaturesAvailable, XfaBStrHelpersAvailable, GetRecommendedV8Flags, ו-bindings אופציונליים ברמה נמוכה עבור FPDF_BStr_*, FPDF_GetRecommendedV8Flags ו-FPDF_GetArrayBufferAllocatorSharedInstance
- FPDFText_SetPositions נעשה אופציונלי כך ש-PDFiumPas ממשיך להיטען עם DLLs של PDFium שאינם מייצאים את setter הניסוי הזה למיקומי טקסט
- הורחבו חבילות הרגרסיה של Delphi, C++Builder ו-Lazarus ל-61 מקרים כל אחת עם כיסוי ל-capability של standard-DLL ושל V8-DLL
Version 1.6.5
- נוספה בדיקת עץ מבנה PDF מתויג ברמת-על דרך TPdf.StructureElements ו-TPdfView.StructureElements, כולל סוג אלמנט, כותרת, טקסט חלופי, טקסט בפועל, טקסט הרחבה, שפה, מזהי content מנותבים, מספרי ילדים ומספרי מאפיינים
- נוספה בחירת מצב הדפסה של Windows PDFium דרך TPdfPrintMode ו-SetPdfPrintMode, עם כיסוי ל-EMF, טקסט בלבד, PostScript, pass-through, image-mask ומצבי הדפסה Type 42
- נוספו bindings ברמה נמוכה עבור שאר exports הציבוריים של PDFium בדל ה-standard-DLL, עם כיסוי לפעולות JavaScript, דגלי טופס להערות / צבע גופן, מצב פעיל של page-object, הוספה באינדקס, ערכי float של content-mark, נתוני ICC profile של image, הסרת form-object ומיקומי טקסט
- הורחבו חבילות הרגרסיה של Delphi, C++Builder ו-Lazarus ל-59 מקרים כל אחת עם כיסוי לעץ מבנה PDF מתויג, מצב הדפסה ו-binding של exports ציבוריים
Version 1.6.4
- עודכנו דגימות Delphi, C++Builder ו-Lazarus כך שיפתחו אוטומטית PDFs שנוצרו, טקסט / images שנוצרו ותיקיות פלט של אצווה אחרי יצירה מוצלחת
Version 1.6.3
- הורחבו חבילות הרגרסיה המיושרות של Delphi, C++Builder ו-Lazarus ל-56 מקרים כל אחת עם כיסוי GUI של TPdfView לעזרי fit-zoom, round-trip של קואורדינטות device/page, בדיקת hit של תו ו-pan של עכבר דרך פקדי המציג בחלון נסתר
- Fixtures של TPdfView משתמשים כעת בגודל viewer מפורש וב-subclasses רק לבדיקות שמפעילות handlers של עכבר מוגנים תוך שמירה על חבילות headless לחלוטין
Version 1.6.2
- תוקן TPdf.AddPage(0, ...) כך שהעמוד הראשון המוכנס הופך מיד לעמוד הפעיל. דוגמאות קיימות ממשיכות לעבוד, בעוד PageNumber מדווח כעת על עמוד one-based תקין אחרי ההכנסה
- סונכרנה גרסת חבילת Lazarus והורחבו חבילות הרגרסיה המיושרות של Delphi, C++Builder ו-Lazarus ל-52 מקרים כל אחת
Version 1.6.1
- תוקנה דרישת גרסת מינימום שגויה בוולידטור v1.6.0 לתאימות גרסאות PDF: פעולת SetState סווגה מחדש מ-PDF 1.5 ל-PDF 1.2, בהתאמה ל-Reference 6.9.9 של PDF 1.2. יעדי SaveAs ל-PDF 1.3 / 1.4 שמכילים פעולות SetState נשמרים כעת בהצלחה במקום להידחות
- נוספו בדיקות לקסיקליות תואמות ל-PDF 1.2 עבור אותו סעיף spec: פעולות Sound, Movie ו-NOP יחד עם מרחב הצבע Separation נחסמים כעת כאשר גרסת היעד שנבחרה ישנה מ-PDF 1.2
- הורחבו חבילות הרגרסיה של Delphi, C++Builder ו-Lazarus ל-50 מקרים כל אחת על ידי הוספת מבחן קבלה חיובי של SetState ב-PDF 1.4 שמקבע את הגבול המתוקן
Version 1.6.0
- הוקשחו יעדי SaveAs מפורשים של PDF 1.0 עד PDF 1.7 עם מאמת תכונות־גרסה מלא המכסה את כל ציר הזמן של תכונות PDF 1.1 עד ISO 32000-1. המאמת חוסם כעת שמירות המכילות רשומות מילון, שמות מסננים, subtypes של הערות, סוגי פעולה, גופנים, מרחבי צבע או פרמטרי הצפנה שהוכנסו לאחר גרסת היעד שנבחרה. דוגמאות: JBIG2Decode (1.4+), MarkInfo / Tagged PDF (1.4+), OutputIntents (1.4+), ICCBased / DeviceN / BleedBox / TrimBox / ArtBox / StructTreeRoot (1.3+), הערות Polygon / PolyLine / Caret / Screen / Watermark / Redact, הצפנת AES ו־AES-256 (CFM AESV2 / AESV3), רשומות קטלוג Perms / Legal / Requirements / NeedsRendering, ופעולות מוגבלות־גרסה כגון JavaScript, Trans, SetState, Rendition, GoToE, GoTo3DView — כולן נדחות כאשר גרסת ה־PDF היעד אינה יכולה לייצג אותן
Version 1.5.13
- הורחבו חבילות הרגרסיה של Delphi, C++Builder ו-Lazarus ל-49 מקרים כל אחת, עם כיסוי ישיר לדחיית מרחבי צבע ICCBased, Tagged PDF MarkInfo, annotations מסוג Polygon, הצפנת AES (V2) ו-Redact annotations מול יעדי PDF 1.2 / 1.3 / 1.4 / 1.5 / 1.6 בהתאמה
Version 1.5.12
- תוקן post-processing של SaveAs עבור rewrite מצטבר של catalog. PDFiumPas מאמת כעת את ה-indirect object החוזר העדכני ביותר, כך ששינויי /Version קיימים ב-catalog מוחלפים כהלכה בעת שמירה לגרסת PDF ישנה מפורשת
- הורחבו חבילות הרגרסיה של Delphi, C++Builder ו-Lazarus ל-44 מקרים כל אחת, עם כיסוי ישיר להחלפת /Version מיושן ב-catalog, לנרמול גרסת catalog של PDF 1.4, ולדחיית תכונות transparency ו-portable-collection כאשר גרסת היעד שנבחרה אינה יכולה לייצג אותן
Version 1.5.11
- הקשחנו את פלט SaveAs הממוספר עבור יעדי PDF 1.3, 1.4, 1.5, 1.6 ו-1.7 מפורשים. PDFiumPas מנרמל כעת סמני גרסת catalog, שומר על גרסת ה-OpenAction הסטנדרטית של Fit Height, ודוחה תכונות PDF חדשות יותר כאשר גרסת היעד שנבחרה אינה יכולה לייצג אותן
- נוספה כיסוי רגרסיה של Delphi, C++Builder ו-Lazarus ששומר ויטען מחדש קבצי PDF מפורשים מ-1.3 עד 1.7, ומאמת את ה-header הסופי, את ה-OpenAction הסטנדרטי של Fit Height ואת גרסת ה-PDF המדווחת
Version 1.5.10
- עברנו מהאפשרות B של המפרט לאפשרות C על ידי הוספת בדיקות smoke של TPdfView בכל שלוש חבילות ה-IDE (Tests.PdfView). כל חבילה בונה TForm מוסתרת כהורה (דרך TForm.CreateNew בצד Pascal ו-
new TForm(NULL, 0)בצד C++Builder), מ-reattach TPdfView, קובעת Active := True, ואז מאמתת את משטח ה-round-trip עבור PageCount, ברירת המחדל של PageNumber, Zoom, Rotation, DisplayMode, ושה-View.Text תואם ל-TPdf.Text הבסיסי. כל חבילת IDE מריצה כעת 39 מקרים
Version 1.5.9
- עברנו מהאפשרות A של המפרט לאפשרות B על ידי הוספת בדיקות smoke של רינדור בכל שלוש חבילות ה-IDE. כל חבילת Tests.Render קוראת ל-TPdf.RenderPage על sample.pdf ומאמתת שלושה אותות יציבים במקום checksum-ים byte-for-byte: ה-bitmap המוחזר תואם בדיוק לגודל הפיקסלים המבוקש; גדלים מבוקשים שונים (200x100, 64x256) מפיקים bitmaps תואמים; והעמוד המרונדר הוא לפחות 95% רקע לבן עם לפחות 50 (ב-Lazarus: 20) פיקסלים שאינם לבנים המסמנים את הטקסט anti-aliased. כל חבילת IDE מריצה כעת 33 מקרים
Version 1.5.8
- הושלמו קבוצות תוכנית הבדיקות המקוריות מ־A(2) על־ידי הוספת שבע רגרסיות נוספות לכל IDE: בניית הערת anHighlight על־ידי TPdf.CreateAnnotation בצירוף מחזור SaveAs/LoadDocument, נתיב הקריאה של AcroForm על Demo/Delphi/FormFill/cmp_fill_out_and_merge_forms.pdf (FormType הוא ftAcroForm, FormFieldCount > 0, FlattenAllPages מוריד את השדות לאפס), וכיסוי קריאה שקט לסימניות, LinkAnnotationCount ו־WebLinkCount על מסמך שאין בו אף אחת מאותן תכונות. כל חבילת IDE מריצה כעת 30 מקרים
Version 1.5.7
- הורחבו חבילות Delphi (DUnitX), Lazarus (FPCUnit) ו-C++Builder (GoogleTest) עם שבע רגרסיות חדשות לכל IDE: PdfVersion, PageRotation, חיפוש substring של TPdf.FindFirst / FindNext, הסכמה בין CharacterOrigin / CharacterRectangle מול origin של AddText, רישום CreateAttachment יחד עם round-trip של SaveAs / LoadDocument, ו-round-trip של AddText לטקסט עם דגש שמאמת ש-path ההטמעה של European TrueType מ-v1.3.0 שומר על קודי הרחבה של Latin-1 שלמים
Version 1.5.6
- PDFים שנשמרו מקבלים כעת פעולת פתיחת Fit Height כברירת מחדל בעמוד הראשון כאשר אין OpenAction קיים, כך שקוראי PDF מציגים בתחילה מסמכים שנוצרו בזום של גובה עמוד
- נוספה כיסוי רגרסיה של Delphi, Lazarus ו-C++Builder עבור ה-OpenAction שנוצר ועבור הגדרת Fit Height
Version 1.5.5
- נוספו בדיקות רגרסיה בכל חבילות Delphi (DUnitX), Lazarus (FPCUnit) ו-C++Builder (GoogleTest) עבור משטח ה-API של בדיקת התווים והגופנים באינדקס (TPdf.FontBaseName, FontFamilyName, FontWeight, FontItalicAngle, FontData, FontIsEmbedded, CharacterFontWeight, CharacterAngle). חבילת Lazarus מדלגת בכוונה על FontData, שכיום גורמת ל-access violation בתוך FPDFFont_GetFontData תחת FPC
Version 1.5.4
- נוסף דמו C++Builder Attachment שהועבר מדגימת Delphi, ומכסה יצירת PDFs, הוספה, רשימה, חילוץ, מחיקה ושמירה של attachments מוטמעים עם תצוגת MIME subtype
Version 1.5.3
- חשפנו את חישוב ה-spread-page שמניע את מצבי שני-עמודים של TPdfView כ-helper ברמת היחידה ComputeSpreadPages(DisplayMode, PageNumber, PageCount, out LeftPageNo, out RightPageNo). ההתנהגות לא השתנתה; ה-helper הופך את הכלל המודע ל-cover לבדיקתי באופן עצמאי בלי לאתחל viewer
- נוספו חמש בדיקות רגרסיה בכל חבילות Delphi (DUnitX), Lazarus (FPCUnit) ו-C++Builder (GoogleTest) המכסות מסמכים ריקים, את צימוד שני-העמודים הסטנדרטי, את עמוד הכיסוי שנשאר לבדו ב-dmTwoPageContinuousWithCover, זוגות שאחרי ה-cover, והתנהגות קיבוע של העמוד האחרון / מחוץ לטווח
Version 1.5.2
- נוספה תמיכה בשפת המסמך דרך TPdf.Language, שממופה לערך /Lang של ה-PDF catalog
- נוספה גישה ל-MIME subtype של attachments עם TPdf.AttachmentType
- נוסף anRedact ל-TPdfAnnotationSubtype ונוספו helpers להסרת page-object עבור TPdf ו-TPdfView
- עודכנו דגימות viewer ו-attachment כדי להציג את המידע החדש על שפת המסמך ועל סוג ה-attachment כאשר הוא זמין
Version 1.5.1
- נוסף dmTwoPageContinuousWithCover ל-TPdfView כך שפריסות viewer יוכלו להציג את העמוד הראשון לבד ואז להמשיך עם spreads של שני עמודים
- עודכנו דגימות MultiPageViewer של Delphi, C++Builder ו-Lazarus כדי לחשוף את מצב התצוגה של שני עמודים שמודע ל-cover
Version 1.5.0
- נוספו חבילות בדיקה אוטומטיות ברמת smoke ל-Delphi (DUnitX), Lazarus (FPCUnit) ו-C++Builder (GoogleTest). שלוש החבילות חולקות קובץ PDF fixture יחיד ב-Tests\TestData ומריצות את אותן שבע בדיקות כל אחת, המכסות טעינת מסמך, מידע על עמוד, חילוץ טקסט, metadata, round-trip של שמירה, אימות header של PDF, והמאפיין Compressed
Version 1.4.3
- שופרה דוגמת FontProperties כדי להציג את ממשקי המטה-נתונים של הגופנים גם ב-TPdfView וגם ב-TPdf, כולל ידיות גופן, גודל נתוני גופן ומדדי תווים
- נוספו מאפייני בדיקת תווים וגופנים עם אינדוקס ל-TPdfView, ודוגמת FontProperties עודכנה כדי לשאול מטה-נתוני גופן של אובייקט טקסט
Version 1.4.2
- נוספו ל-TPdf מאפייני בדיקה של תווים וגופנים עם אינדוקס לצורך ניתוח טקסט בלי צורך במציג. מאפיינים עם אינדוקס תו (CharacterAngle, CharacterFontSize, CharacterFontWeight) שולפים מדדים לכל תו מזרם הטקסט של הדף הנוכחי. מאפיינים עם אינדוקס של אובייקט דף (FontAscent, FontBaseName, FontData, FontDescent, FontFamilyName, FontHandle, FontIsEmbedded, FontItalicAngle, FontWeight) שולפים מטה-נתוני גופן עבור כל אובייקט טקסט בדף הנוכחי
- אובייקטי דף שאינם טקסט מחזירים ערכים בטוחים של אפס או ריק עבור כל מאפייני Font* במקום להעלות שגיאה, כך שקל לעבור על כל אובייקט דף ולבדוק רק את אובייקטי הטקסט
- FontBaseName קורא ישירות את שם הגופן הבסיסי של PostScript במקום לחזור לשם משפחת הגופנים, וכך מספק מזהה מדויק יותר עבור גופנים מוטמעים
Version 1.4.1
- נוספו גרסאות C++Builder ו-Lazarus של הדוגמה EuropeanText, כך שכל משפחות ה-IDE הנתמכות יכולות לאמת יצירת טקסט אירופי עם סימני דיאקריטיקה באמצעות גופני TrueType מערכתיים
- נוספו גרסאות C++Builder ו-Lazarus של הדוגמה FormFill, כולל קובצי PDF לדוגמת טפסים, עריכת שדות, יצירה מחדש של מראה, שמירה עם ערכים מלאים וזרימות עבודה של שמירה לאחר Flattening
Version 1.4.0
- נוספה תמיכה ב-Lazarus / Free Pascal: החבילה החדשה PDFiumLaz מספקת את אותם TPdf, TPdfView ורכיבים קשורים תחת ערכת הווידג'טים LCL, ומרחיבה את הספרייה ל-Lazarus IDE ולמהדר Free Pascal לצד חבילות Delphi ו-C++Builder הקיימות
- נוספו גרסאות Lazarus של הדוגמאות, כך שמפתחי Lazarus יכולים לחקור כל תכונה באמצעות דוגמאות שניתן להריץ
- תוקנה בעיית הידור ב-Lazarus שבה הגדרות תנאי של Free Pascal הוערכו יחד עם בדיקות גרסת המהדר של Delphi, וגרמו ל-FPC builds לנסות לפתור שמות יחידות ייחודיים ל-Delphi ולכשל
Version 1.3.1
- תועד תהליך העבודה של form flattening ב-help set: GenerateFormAppearances, FlattenPage, FlattenAllPages והקבועים הקשורים FLAT_* / FLATTEN_* מכוסים כעת ב-TPdf, ב-TPdfView, ב-API reference, במטריצת התכונות ובדוגמאות התכנות
- תוקנה טבלת הארכיטקטורה בדף הסקירה כך שהיא מציגה את יחידות ה-binding בפועל שנשלחות בתיקיית Lib
Version 1.3.0
- שופר התמיכה בתווים אירופיים בעת יצירת PDF. כעת TPdf.AddText טוען ושומר במטמון את גופן TrueType המערכתי המתאים לפני יצירת אובייקט טקסט, וכך שומר על תווים עם סימני דיאקריטיקה מצ'כית, צרפתית, גרמנית, ספרדית, פורטוגזית, פולנית וטורקית ש-PDFium’s הגופנים הסטנדרטיים המובנים אינם יכולים לייצג
- יישומים שבעבר יצרו סימני שאלה או גליפי חלפה עבור טקסט לטיני שאינו ASCII יוצגו כעת כראוי בלי כל שינוי קוד. נוספה הדוגמה EuropeanText כדי להמחיש את התכונה
Version 1.2.0
- נוספה רענון מראה ל-AcroForm ב-TPdf: קריאה ל-GenerateFormAppearances לאחר שינוי הערכים של FormField[] מעדכנת את מראה הווידג'ט כך שערכים שמולאו נראים בקוראי PDF סטנדרטיים בלי צורך במושב עריכה אינטראקטיבי
- נוספו ל-TPdf עזרי form flattening (FlattenPage / FlattenAllPages) ול-TPdfView (FlattenPage עבור דף התצוגה הנוכחי). Flattening מטמיע לצמיתות ערכי שדות שמולאו כתוכן דף רגיל ומסיר את שכבת הטופס האינטראקטיבית, וכך נוצר מסמך סטטי שמוצג באופן עקבי בכל המציגים
- נוספה Demo\Delphi\FormFill כדי להדגים את זרימות העבודה של fill-and-save ו-fill-and-flatten עם קובץ AcroForm PDF לדוגמה
Version 1.1.2
- נוספה דחיסת זרמי PDF בזמן השמירה. המאפיין החדש TPdf.Compressed (מופעל כברירת מחדל) כותב מחדש זרמי תוכן לא דחוסים לזרמי FlateDecode דחוסים בעת השמירה, וכך מצמצם משמעותית את גודל הקובץ עבור PDFs שנוצרים בתכנות. יישומים שזקוקים לפלט לא דחוס יכולים להגדיר Compressed ל-False לפני הקריאה ל-SaveAs
Version 1.1.1
- Builds של חבילת Win64 כבר אינם כוללים יחידות רישום של זמן עיצוב, וכך נמנעים כשלי build כאשר חבילת Win64 נפרסת בהקשר של runtime בלבד
- טוען ה-PDFium DLL מחפש כעת תחילה בתת-התיקייה של היישום עבור Win32 או Win64, באמצעות השמות הסטנדרטיים pdfium.dll ו-pdfium.v8.dll, ואז נופל חזרה אל התיקייה השטוחה של היישום ואל תיקיית המערכת של Windows. כך מתקבל פריסת ה-DLL שמגיעה עם חבילת הרכיב, וההתקנה נעשית פשוטה
Version 1.1.0
- תוקנה תקלה חזותית של חיתוך במצב שני דפים של TPdfView: תוכן הדף גלש מעבר לשדרה משום שאריחי הדף השמאלי והימני חלקו מלבן חיתוך יחיד. כל אריח חותך כעת בנפרד, כך שהתוכן נשאר בתוך גבול הדף שלו
- שופרה הודעת השגיאה של דוגמת Delphi כאשר לא ניתן למצוא את PDFium DLL, עם הנחיה ברורה יותר הכוללת את שם ה-DLL והנתיב הצפויים