PDFiumPas Σημειώσεις έκδοσης
Ιστορικό εκδόσεων για λειτουργίες ορατές στον χρήστη, διορθώσεις, βελτιώσεις προβολής, παραγωγή εγγράφων, έξοδο PDF/A, απόδοση και ενημερώσεις τεκμηρίωσης του PDFiumPas
Τελευταία έκδοση
- Τελευταία έκδοση: 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 καλύπτουν πλέον περιορισμένη ακύρωση, ισοδύναμες (idempotent) ενημερώσεις, εκκαθάριση και ασφάλεια ανενεργής προβολής
- Το
TPdf.AboutInfo, τα μεταδεδομένα πακέτου Lazarus και τα μεταδεδομένα εγκαταστάτη αναφέρουν πλέον ομόφωνα την Version 2.56.2
Version 2.56.1
Αλλαγμένο (Changed)
- Το
TPdfThumbnailViewεπαναχρησιμοποιεί πλέον τα rendered bitmaps για σελίδες που παραμένουν ορατές μεταξύ repaints και παρακείμενων θέσεων κύλισης - Η cache διατηρεί μόνο το τρέχον ορατό εύρος σελίδων και απελευθερώνει καταχωρήσεις ακριβώς όταν οι σελίδες εγκαταλείπουν αυτό το εύρος, το εκχωρημένο έγγραφο αλλάζει, ή οι διαστάσεις μικρογραφίας αλλάζουν
- Οι δοκιμές Delphi, Lazarus και C++Builder καλύπτουν πλέον επαναχρησιμοποίηση cache, pruning θύρας προβολής, ακύρωση μεγέθους, αντικατάσταση εγγράφου και καταστροφή στοιχείου
- Το
TPdf.AboutInfo, τα μεταδεδομένα πακέτου Lazarus και τα μεταδεδομένα εγκαταστάτη αναφέρουν πλέον ομόφωνα την Version 2.56.1
Version 2.56.0
Προστέθηκε (Added)
- Τα
TPdfView.CutSelectedFormTextToClipboardκαιTPdfView.PasteFormTextFromClipboardπαρέχουν επεξεργασία πρόχειρου Unicode για το εστιασμένο επεξεργάσιμο widget φόρμας
Αλλαγμένο (Changed)
- Οι εστιασμένοι επεξεργαστές φορμών χειρίζονται πλέον τις τυπικές συντομεύσεις πληκτρολογίου copy, cut, paste και select-all πριν από την προώθηση της εισόδου κειμένου στο PDFium
- Τα cut και paste απορρίπτουν πεδία μόνο για ανάγνωση και συνεδρίες χωρίς άδεια συμπλήρωσης ή τροποποίησης φόρμας, ενώ το cut αντιγράφει επιτυχώς πριν από την αφαίρεση του επιλεγμένου κειμένου
- Οι δοκιμές Delphi, Lazarus και C++Builder καλύπτουν πλέον συμπεριφορά χωρίς εστίαση, round-trip συντόμευσης και απόρριψη μόνο για ανάγνωση
- Το
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 μετασχηματισμούς αντικειμένων, τμήματα διαδρομής, clip paths και παιδιά Form XObject - Η επιθεώρηση χαρακτήρων περιλαμβάνει πλέον χρώματα γεμίσματος και μολυβιάς, όνομα και σημαίες γραμματοσειράς, χαλαρά όρια glyph, ενεργές μήτρες, λαβές αντικειμένων κειμένου και μετατροπή δείκτη χαρακτήρα-σε-κείμενο
- Οι σχολιασμοί round-trip πλέον τη γεωμετρία περιγράμματος και τις ροές εμφάνισης normal, rollover και down
- Νέοι raw και decoded προσβάτες μικρογραφιών, μετασχηματισμοί περιεχομένου σελίδας και σχολιασμών, και το
RenderPageWithMatrixπαρέχουν απευθείας προχωρημένες διαδρομές απόδοσης και επεξεργασίας
Αλλαγμένο (Changed)
- Οι αλλαγές στυλ αντικειμένου σελίδας μπορούν πλέον να δεσμευτούν ως μία παρτίδα ώστε το PDFium να αναγεννά το περιεχόμενο σελίδας μόνο μία φορά
- Η απόδοση μήτρας χρησιμοποιεί την υπάρχουσα διαδρομή bitmap zero-copy όταν η διάταξη του bitmap προορισμού είναι συμβατή
Version 2.53.1
Διορθώθηκε (Fixed)
- Η ενσωματωμένη κινεζική λεζάντα μενού Copy χρησιμοποιεί πλέον σημεία κώδικα Unicode ανεξάρτητα από κωδικοποίηση και εμφανίζεται σωστά στα builds Lazarus
- Παλαιότερες toolchains Delphi μπορούν να μεταγλωττίσουν το
FPdfAsyncόταν η μονάδα τουςWinapi.Windowsπαραλείπει τη δήλωσηGetTickCount64
Version 2.53.0
Προστέθηκε (Added)
- Νέο σύνολο δοκιμών
Tests.ApiCoverageπου καλύπτει δημόσια API του TPdf που προηγουμένως δεν είχαν καθόλου end-to-end κάλυψη δοκιμών:GetPageBox/SetPageBox(ανάγνωση/εγγραφή MediaBox/CropBox, σφάλματα missing-box και round-trip αποθήκευσης),FlattenPage/FlattenAllPages(τιμή επιστροφής και διατήρηση αριθμού σελίδων),GenerateFormAppearances(no-op σε έγγραφα χωρίς φόρμες),SaveAsEncrypted/SaveAsEncryptedToStream(AES-256 με round-trip κωδικού πρόσβασης — επαλητεύει ότι το κρυπτογραφημένο αρχείο αρνείται να ανοίξει χωρίς τον κωδικό και ανοίγει με αυτόν), επικύρωση ορίωνDeletePage(σελίδα 0 και εκτός εύρους εγείρουνEPdfError), και οι φρουροί (sentinels) σχολιασμώνHasContents/HasAuthorπου εισήχθησαν στην v2.38.0 (επαλητεύοντας ότι τοDefault(TPdfAnnotation)τους αφήνειFalse)
Version 2.52.0
Προστέθηκε (Added)
- Το
TPdfView.CopySelectedFormTextToClipboardαντιγράφει την επιλογή κειμένου μέσα στο εστιασμένο widget AcroForm στο πρόχειρο των Windows ωςCF_UNICODETEXT
Αλλαγμένο (Changed)
- Οι λειτουργίες αντιγραφής κειμένου σελίδας και εστιασμένης φόρμας μοιράζονται πλέον τον ίδιο αμυντικό writer πρόχειρου 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 να φορτώθούν χωρίς να δεσμευτεί προσωρινό τμήμα πίνακα byte
Αλλαγμένο (Changed)
- Η φόρτωση εύρους byte απορρίπτει αρνητικά ή εκτός ορίων παράθυρα πριν από την αλλαγή της κατάστασης του εγγράφου και διατηρεί τις υπάρχουσες επιλογές διάρκειας ζωής ενδιάμεσης μνήμης και δανεικής ενδιάμεσης μνήμης
- Οι δοκιμές Delphi, Lazarus και C++Builder καλύπτουν πλέον παράθυρα ενσωματωμένων PDF και μη έγκυρα ορίσματα εύρους byte
- Το
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και τα ταξίδια επιστροφής απαρίθμησης - Το
TPdf.AboutInfo, τα μεταδεδομένα πακέτου Lazarus και τα μεταδεδομένα εγκαταστάτη αναφέρουν πλέον ομόφωνα την Version 2.49.1
Version 2.49.0
Προστέθηκε (Added)
- Η δημόσια επιφάνεια δεσμευτικού του PDFium καλύπτει πλέον και τις 470 εξαγόμενες συναρτήσεις στις αναθεωρημένες κεφαλίδες, συμπεριλαμβανομένης της πρόσβασης σε περιγραφές συνημμένων μέσω των
FPDFAttachment_SetDescriptionκαιFPDFAttachment_GetDescription - Το
TPdfεκθέτει πλέον περιγραφές συνημμένων, εγκυρότητα διασταυρούμενων αναφορών, μετατοπίσεις τέλους trailer, αναθεώρηση security-handler, φόρτωση μνήμης 64-bit, εύρη ψηφίων υπογραφής, εύρη κειμένου διαδικτυακών συνδέσμων και εκτεταμένα στιγμιότυπα δεδομένων εικόνας, φίλτρου, μεταδεδομένων και προφίλ 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εκθέτει πλέον εργοστάσια, κλωνοποίηση και ανάθεση, διαγνωστικά πεπερασμένης κατάστασης και αντιστρεψιμότητας, σύγκριση βασισμένη σε ανοχή, πρόσβαση μετάφρασης, αναφορά ορίζουσας και affine αποσύνθεση - Σύνθεση prepend, περιστροφή επίγνωστη του άξονα, κλιμάκωση, κλίση και αναστροφές, συν χαρτογράφηση ορθογωνίων stretch, contain και cover υποστηρίζουν ροές εργασίας τοπικού χώρου και προσαρμοσμένες διατάξεις χωρίς χειροκίνητη αριθμητική συντελεστών
- Μη μεταλλάξιμη αντίστροφη πρόσβαση, αντίστροφη χαρτογράφηση σημείων, μετασχηματισμοί διανυσμάτων και τετραπλεύρων, δυναμικές παρτίδες σημείων και ορθογωνίων, in-place παραλλαγές και μετασχηματισμένα όρια σε ένα πέρασμα επεκτείνουν την επαναχρησιμοποιήσιμη γεωμετρική επιφάνεια
Αλλαγμένο (Changed)
- Μετάφραση, κλιμάκωση και αναστροφές αξόνων ενημερώνουν πλέον μόνο τους επηρεαζόμενους συντελεστές αντί δρομολόγησης μέσω γενικού affine πολλαπλασιασμού
- Ο μετασχηματισμός ορθογωνίων κανονικοποιεί την είσοδό του μία φορά, χρησιμοποιεί μια εξειδικευμένη ακριβή ευθυγράμμιση-με-άξονες διαδρομή όπου είναι δυνατόν και υπολογίζει γενικά περιστραμμένα όρια χωρίς προσωρινές εγγραφές σημείων
- Οι μετασχηματισμοί παρτίδων σημείων και ορθογωνίων δεσμεύουν έναν πίνακα αποτελεσμάτων ή επαναχρησιμοποιούν τον αποθηκευτικό χώρο καλούντος, ενώ τα μετασχηματισμένα όρια σημείων συσσωρεύονται σε ένα πέρασμα χωρίς ενδιάμεσο πίνακα
Διορθώθηκε (Fixed)
- Η χαρτογράφηση ορθογωνίων απορρίπτει αποτελέσματα μηδενικού μεγέθους, μη πεπερασμένα και με υπερχείλιση
Singleπριν δημοσιεύσει έναν μη χρησιμοποιήσιμο πίνακα - Οι δοκιμές Delphi, Lazarus και C++Builder επαληθεύουν πλέον τη σειρά σύνθεσης, τα αναλλοίωτα του άξονα, τα αντίστροφα ταξίδια επιστροφής, τα προσαρμοσμένα ορθογώνια, την αποσύνθεση και τη συμπεριφορά μαζικής γεωμετρίας
- Το
TPdf.AboutInfo, τα μεταδεδομένα πακέτου Lazarus και τα μεταδεδομένα εγκαταστάτη αναφέρουν πλέον ομόφωνα την Version 2.48.0
Version 2.47.0
Προστέθηκε (Added)
- Το
FPdfAsyncπαρέχει πλέον δομημένους λόγους και μηνύματα ακύρωσης, αφαιρούμενες εγγραφές επιστροφής κλήσης, πηγές βασισμένες σε χρονικό όριο, αναμονή ακύρωσης και ατομικές λειτουργίες try-cancel μέσω εκτεταμένων διεπαφών που διατηρούν το αρχικό API - Το
TPdfFuture<T>.RunExπροσθέτει διαμορφώσιμη διανομή απάντησης και προτεραιότητα εργάτη ενώ οι φάκελοι αποτελεσμάτων εκθέτουν αναγνωριστικά λειτουργιών, εγκυρότητα τιμών, ονόματα κλάσεων εξαιρέσεων, χρονομέτρηση ολοκλήρωσης και επαναχρησιμοποιήσιμους βοηθούς ολοκλήρωσης - Το
TPdfAsyncExecutorπροσθέτει ένα επαναχρησιμοποιήσιμο σταθερό σύνολο εργατών με τέσσερα FIFO λωρίδες προτεραιότητας, προαιρετική οπισθενδοχή οριακής ουράς, ακυρώσιμες λαβές εργασιών, αναμονή επίγνωστη χρονικού ορίου, στιγμιότυπα εργασιών, συγκεντρωτικά στατιστικά και κομψή απενεργοποίηση
Αλλαγμένο (Changed)
- Επαναλαμβανόμενες ασύγχρονες εργασίες μπορούν να επαναχρησιμοποιήσουν νήματα εργατών και λειτουργίες ουράς O(1) αντί να δημιουργούν ένα νήμα για κάθε εργασία, ενώ ο συγχρονισμένος τερματισμός παραμένει διαθέσιμος για φορείς UI
- Αποτυχίες εκτελεστή και future διατηρούν διαγνωστικά κλάσης και μηνύματος εξαίρεσης, η ακύρωση διατηρεί τον αρχικό της λόγο και οι εξαιρέσεις επιστροφής κλήσης παραμένουν απομονωμένες από τον κύκλο ζωής του εργάτη και την απενεργοποίηση
- Οι δοκιμές Delphi, Lazarus και C++Builder καλύπτουν πλέον την εκτεταμένη επιφάνεια ακύρωσης, μεταδεδομένων future, ελέγχου εργασιών, οπισθενδοχής, διάταξης προτεραιοτήτων, στατιστικών, αποτυχίας και απενεργοποίησης
Διορθώθηκε (Fixed)
- Οι ταυτόχρονοι κάτοχοι ακύρωσης λαμβάνουν πλέον ένα ντετερμινιστικό αποτέλεσμα πρώτου-εγγραφέα αντί να βασίζονται σε ξεχωριστή ακολουθία παρατήρησης και ακύρωσης
- Η αναμονή αδράνειας του κύριου νήματος επεξεργάζεται συγχρονισμένες απαντήσεις εργασιών, αποτρέποντας έναν ολοκληρωμένο εργάτη από το να αφήσει τον εκτελεστή μόνιμα μη-αδρανή κατά τη συντονισμένη απενεργοποίηση
- Το
TPdf.AboutInfo, τα μεταδεδομένα πακέτου Lazarus και τα μεταδεδομένα εγκαταστάτη αναφέρουν πλέον ομόφωνα την Version 2.47.0
Version 2.46.0
Προστέθηκε (Added)
- Το
FPdfAsn1εκθέτει πλέον κλάσεις αναγνωριστικών, κωδικοποίηση και αποκωδικοποίηση αριθμών υψηλών ετικετών 64-bit, αναλυμένες εγγραφές TLV, παράθυρα θυγατρικού αναγνώστη μηδενικής αντιγραφής, τυποποιημένους αποκωδικοποιητές πρωτόγονων και φέτες περιεχομένου ή κωδικοποιημένων τιμών - Οι εγγραφείς DER υποστηρίζουν πλέον το πλήρες μη προσημασμένο εύρος INTEGER 64-bit, επικυρωμένο αυθαίρετο περιεχόμενο INTEGER, ENUMERATED, αυτόματη επιλογή UTCTime ή GeneralizedTime, application και private ετικέτες, πολυτιμικές SEQUENCE και κανονικά ταξινομημένη έξοδο SET OF
- Το
ValidateDerεπιστρέφει σφάλματα επικύρωσης επίγνωστα μετατόπισης επιβάλλοντας διαμορφώσιμα όρια φωλιάσματος, μέτρησης κόμβων, μήκους περιεχομένου, μέτρησης σφαλμάτων, ρίζας και προαιρετικής ταξινόμησης SET
Αλλαγμένο (Changed)
- Η concatentation 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 δεν περικόπτονται πλέον στα πέντε χαμηλά bits του αναγνωριστικού
- Παραμορφωμένα αναγνωριστικά υψηλών ετικετών, μη ελάχιστες ορισμένες μηκές, μη έγκυρο UTF-8, μη μηδενικό γέμισμα BIT STRING, μη έγκυρα πεδία χρόνου, τελικές ρίζες και παραβιάσεις ορίων πόρων απορρίπτονται ντετερμινιστικά
- Το
TPdf.AboutInfo, τα μεταδεδομένα πακέτου Lazarus και τα μεταδεδομένα εγκαταστάτη αναφέρουν πλέον ομόφωνα την Version 2.46.0
Version 2.45.0
Προστέθηκε (Added)
- Το
FPdfPreflightReportεκχωρεί πλέον σοβαρότητα Info, Warning ή Error σε κάθε πρόβλημα και εκθέτει API σοβαρότητας, κατάστασης, κατηγορίας, κωδικού προβλήματος, αναζήτησης, έρευνας, ισοπέδωσης και φιλτραρίσματος σε επίπεδο προτύπου και αναφοράς - Οι αναφορές 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 και αντικαθιστά απομονωμένες μονάδες κώδικα 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, μεταδεδομένων, προορισμού και μικρογραφιών χρησιμοποιούν επικυρωμένα two-pass buffers, γεωμετρική αύξηση συλλογών και cycle-safe traversal
- Η μετεπεξεργασία αποθήκευσης επιλύει τον ενεργό κατάλογο, το δέντρο σελίδων και την open action μέσω της τρέχουσας αναθεώρησης xref, αποθηκεύει σε κρυφή μνήμη τα αποκωδικοποιημένα object streams και σαρώνει τα PDF dictionaries με λεξικά όρια
- Η κοινόχρηστη ανάλυση PDF επιβάλλει τώρα ακριβείς κεφαλίδες αντικειμένων, generations, κλειδιά λεξικού, stream lengths, predictor geometry, integer ranges και όρια σχολίων, literal-string και hexadecimal-string
- Η επικύρωση απάντησης RFC 3161 δεσμεύει τώρα τόσο το nonce όσο και το SHA-256
messageImprint, απαιτεί έναν δομικά έγκυρο signer και εφαρμόζει αυστηρούς κανόνες μήκους DER, OID, INTEGER και GeneralizedTime
Διορθώσεις (Fixed)
- Τα incremental documents δεν επιλέγουν πλέον ανενεργά διπλά καταλόγους ή κακοσχηματισμένα επιθήματα αναφοράς κατά την προσθήκη μιας προεπιλεγμένης open action
- Τα timestamp tokens με long-form DER lengths διατηρούν το πλήρως κωδικοποιημένο token, ενώ η κακοσχηματισμένη σειρά προαιρετικών πεδίων CMS και τα κενά signer sets απορρίπτονται
- Οι καθαρές ενσωματώσεις Delphi γράφουν τώρα τα PAdES nonce seed fields μέσω aligned-safe byte copies και περνούν τα XFA response bytes με τον ακριβή native pointer type
Version 2.43.0
Προστέθηκε (Added)
- Οι εγγραφές field και annotation του XFDF εκθέτουν τώρα presence flags που διακρίνουν μια παραλειφθείσα τιμή XML από μια ρητά κενή τιμή
Αλλαγές (Changed)
- Η εισαγωγή XFDF αποδέχεται στοιχεία και χαρακτηριστικά με πρόθεμα namespace, μεικτό περιεχόμενο κειμένου και CDATA, entity references και whitespace-significant τιμές, ενώ απορρίπτει μη έγκυρα Unicode scalar references
- Η εισαγωγή και εξαγωγή XFDF χρησιμοποιούν indexed field matching και bounded geometric buffers, βελτιώνοντας το throughput και τη συμπεριφορά peak allocation για βαθιά nested φόρμες, μεγάλες συλλογές annotation, ink lists, vertices και markup quadrilaterals
- Η επικύρωση PDF/A και PDF/UA χρησιμοποιεί bounded growth για μεγάλες συλλογές σελίδων, stream, structure-name και RoleMap; Η επίλυση PDF/UA RoleMap ακολουθεί τώρα direct arrays και indirect name ή array objects ακριβούς παραγωγής
Διορθώσεις (Fixed)
- Τα XFDF round-trips διατηρούν τώρα βαθιά nested διαδρομές field, ρητές κενές τιμές field, ρητά κενά περιεχόμενα annotation και τη διάκριση μεταξύ απόντων και κενών περιεχομένων
- Οι μη έγκυρες φορτώσεις memory-buffer και out-of-range αναθέσεις σελίδων απορρίπτονται χωρίς να αφήνουν μερική κατάσταση εγγράφου ή σελίδας, και ένα αποτυχημένο native page reload διατηρεί την προηγουμένως ενεργή σελίδα
- Τα μεγάλα marked-content identifiers και signature metadata buffers περιορίζονται και επικυρώνονται πριν από το allocation ή τη native πρόσβαση
Version 2.42.0
Προστέθηκε (Added)
- Το
TPdfMatrixπαρέχει τώρα ταInvert,TryInvert,TransformPointκαιTransformRectγια coordinate mapping, hit testing, normalized bounds και ρητό χειρισμό singular-matrix - Το
TPdf.WrapTextαπέκτησε μια υπερφόρτωσηBreakLongWordsπου διασπά CJK και άλλο κείμενο χωρίς κενά, διατηρώντας παράλληλα έγκυρα UTF-16 surrogate pairs μαζί - Το
TPdfAnnotation.AttachmentPointSetsεκθέτει κάθε quadrilateral σε multi-line markup annotations, ενώ το υπάρχον πεδίοAttachmentPointsπαραμένει ένα alias για το πρώτο set
Αλλαγές (Changed)
- Η εξαγωγή κειμένου, η κατασκευή readable-content, η αναζήτηση λέξεων και το offset mapping ομιλούμενου κειμένου χρησιμοποιούν τώρα bounded allocation και binary lookup paths, μειώνοντας τις επαναλαμβανόμενες αναθέσεις μνήμης και τα linear scans σε μεγάλες σελίδες
- Η σειριοποίηση ASN.1 και η κρυπτογραφημένη παραγωγή PDF χρησιμοποιούν τώρα geometric output buffers; Η διάταξη των encrypted-objects χρησιμοποιεί ταξινόμηση
O(n log n)και οι σειρές xref γράφονται απευθείας στο τελικό buffer - Το
WrapTextδιατηρεί τα όρια γραμμών CR, LF και CRLF και επαναχρησιμοποιεί ένα native measurement object για ολόκληρη τη λειτουργία - Η εισαγωγή και εξαγωγή XFDF διατηρούν κάθε markup quadrilateral; Η εισαγωγή εφαρμόζει επίσης χρώματα RGB/interior και αναλύει δεκαδικές συντεταγμένες ανεξάρτητα από το locale της διεργασίας
Διορθώσεις (Fixed)
- Οι παλαιοί καλούντες μπορούν και πάλι να ενημερώσουν το περιεχόμενο και τον συγγραφέα ενός annotation αναθέτοντας μη κενές συμβολοσειρές, χωρίς να ορίσουν τα νεότερα sentinel
HasContentsκαιHasAuthor - Οι ρητά κενές συμβολοσειρές annotation χρησιμοποιούν τώρα ένα έγκυρο zero-terminated native buffer, επομένως η εκκαθάριση των
/Contents,/T, και άλλων προαιρετικών κλειδιών κειμένου δεν περνά πλέον nil pointer στο 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 αντιμετωπίζει ένα UTF-8 CSV ως κωδικοσελίδα 1252 και αλλοιώνει τυχόν χαρακτήρες μη-ASCII
Διορθώσεις (Fixed)
- Η επίδειξη
ExtractImagesπαρουσίαζε διαρροή των αποθηκευμένων αντικειμένωνTBitmapστοFExtractedImagesόταν η φόρμα έκλεινε χωρίς να καθαριστούν ρητά πρώτα; Η φόρμα παρακάμπτει τώρα τη μέθοδοDestroyγια να καλέσει τηClearExtractedImages, απελευθερώνοντας κάθε προσωρινά αποθηκευμένο bitmap
Version 2.40.0
Αλλαγές (Changed)
- Το
TPdf.RenderPage(HDC, ...)καλύπτει τώρα τις εξαιρέσεις FPU/SSE γύρω από την κλήσηFPDF_RenderPage, ταιριάζοντας με τοTPdfView.RenderPage(HDC)(διορθώθηκε στην έκδοση v2.25.0) και κάθε σημείο εισόδου απόδοσης που επιστρέφει bitmap; Η υπερφόρτωση απευθείας-σε-DC επιπέδουTPdfάφηνε προηγουμένως τις εξαιρέσεις FPU ακάλυπτες σε μεταγλωττιστές πριν από την έκδοση D12
Διορθώσεις (Fixed)
- Το
ColorToARGBεπιστρέφει τώρα ένα πλήρως διαφανές εικονοστοιχείο (alpha 0) για ταclNoneκαιclDefaultαντί να αντιμετωπίζει την τιμή φρουρό ως κυριολεκτικό χρώμα RGB; Η προηγούμενη συμπεριφορά παρήγαγε ένα σκούρο, σχεδόν αδιαφανές γέμισμα όταν ο καλών περνούσεclNoneαναμένοντας “no colour”
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 υποβάλλουν τώρα αποθηκεύσεις στην ίδια διαδρομή μέσω αντικατάστασης αρχείου ασφαλούς για επαναφορά, ώστε μια αποτυχημένη μετονομασία να μην μπορεί να αφαιρέσει το αρχικό 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', ...)(το οποίο διαβάζει το λεξικό widget); Το widget συνήθως δεν φέρει/V, επομένως το/ASδεν συγχρονιζόταν ποτέ με την επιλεγμένη κατάσταση και ένα επιπεδοποιημένο πλαίσιο επιλογής ή κουμπί επιλογής αποδιδόταν ως μη επιλεγμένο
Version 2.37.0
Αλλαγές (Changed)
- Το
ParseTsaUrlπεριορίζει τώρα τη θύρα στο1..65535μετά την ανάλυση; Μια υπερμεγέθης τιμή θύρας διαφορετικά θα αναδιπλωνόταν μέσω αποκοπήςDWORDκαι θα μπορούσε να καταλήξει σε μια έγκυρη θύρα - Το XFDF
ParseFieldδέχεται τώρα μια παράμετρο βάθους (προεπιλογή 0, με ανώτατο όριο 64) και επιστρέφει ένα κενό πεδίο στο όριο, έτσι ώστε μια κακόβουλα φωλιασμένη αλυσίδα 100 000 επιπέδων<field>να μην μπορεί πλέον να υπερχειλίσει τη στοίβα
Διορθώσεις (Fixed)
- Η αίτηση TSA HTTP προστατεύεται τώρα από ένα κενό σώμα αίτησης πριν περάσει το
@ReqDer[0]στοWinHttpSendRequest; Μια αποαναφορά δυναμικού πίνακα μηδενικού μήκους θα είχε πρόσβαση σε έναν μη γειωμένο δείκτη; ΤοBuildTimeStampReqεπιστρέφει πάντα μια μη κενή SEQUENCE, αλλά η θέση κλήσης προστατεύει τώρα τη σύμβαση
Σημειώσεις (Notes)
- Το σχόλιο κεφαλίδας του
FPdfTsaWinσχετικά με τον έλεγχο ανάκλησης HTTPS διορθώθηκε: Το WinHttp επικυρώνει την αλυσίδα πιστοποιητικών διακομιστή από προεπιλογή, αλλά δεν εκτελεί έλεγχο ανάκλησης CRL/OCSP εκτός εάν ενεργοποιηθεί ρητά μέσω τουWinHttpSetOption; Η προηγούμενη διατύπωση ισχυριζόταν ότι ο έλεγχος ανάκλησης “comes for free”, κάτι που ήταν παραπλανητικό
Version 2.36.0
Αλλαγές (Changed)
- Οι αιτήσεις TSA HTTP στέλνουν τώρα μια ρητή κεφαλίδα
Content-Lengthεπιπλέον των κεφαλίδωνContent-TypeκαιAccept; Το WinHttp τη συνθέτει από το συνολικό μήκος, αλλά ορισμένοι διακομιστές μεσολάβησης RFC 3161 απαιτούν μια ρητή κεφαλίδα και απορρίπτουν την αίτηση με411 Length Requiredχωρίς αυτήν - Η εξαγωγή XFDF απορρίπτει τώρα τους χαρακτήρες ελέγχου C0 (εκτός από τους TAB/LF/CR που έχουν ήδη διαφύγει) αντί να εκπέμπει μια μη έγκυρη ακολουθία backslash-hex; Η προηγούμενη διαφυγή
\-01Fδεν είναι έγκυρη XML (η ανάστροφη κάθετος δεν έχει ειδική σημασία στην XML), επομένως οποιοσδήποτε συμμορφούμενος αναγνώστης θα είχε απορρίψει το έγγραφο ως κακοσχηματισμένο - Η μέθοδος
InjectAssociatedFilesγράφει τώρα το/Subtypeστο λεξικό ροής EmbeddedFile όταν ο καλών παρέχειTAssociateFile.MIMEType; Το πεδίο είχε δηλωθεί και τεκμηριωθεί, αλλά ο εγχυτήρας προηγουμένως κωδικοποιούσε σκληρά το/Type /EmbeddedFileκαι το αγνοούσε (το ISO 32000-2 §7.11.4 επιτρέπει το/Subtypeστη ροή)
Διορθώσεις (Fixed)
- Η εισαγωγή XFDF παρέλειπε το πρώτο byte περιεχομένου μετά από ένα UTF-8 BOM και το πρώτο byte όταν δεν υπήρχε BOM: οι μέθοδοι
BytesToAnsi(Bytes, 4, ...)(BOM) καιBytesToAnsi(Bytes, 1, ...)(χωρίς BOM) χρησιμοποιούσαν μετατοπίσεις έναρξης με σφάλμα κατά ένα επειδή ηBytesToAnsiλαμβάνει έναν δείκτη πίνακα με βάση το 0; Οι κλήσεις χρησιμοποιούν τώρα3και0 - Το
ExtractSignatureValueείχε δύο σφάλματα εσοχής dangling-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) θα μπορούσε να διαφέρει κατά μία σειρά σε οριακά ύψη, σπαταλώντας uma απόδοση σε μια σειρά εκτός σελίδας ή χάνοντας την τελευταία ορατή σειρά
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, ταιριάζοντας με τη μορφή κρυπτογράφησης ροής (IV 16 byte + κρυπτογραφημένο κείμενο PKCS7); Οι δεκαεξαδικές συμβολοσειρές<...>παραμένουν ανέπαφες
Version 2.33.0
Προστέθηκε (Added)
- Εγχυτήρας κρυπτογράφησης AES-256-CBC πλήρους εγγράφου στη νέα μονάδα
FPdfEncrypt.pas; ΤοEncryptDocumentBytesλαμβάνει ένα PDF απλού κειμένου και έναν κωδικό πρόσβασης, κρυπτογραφεί κάθε έμμεσο αντικείμενο ροής (IV 16 byte + AES-256-CBC PKCS7 υπό το κλειδί αρχείου), διορθώνει το/Length, προσαρτά το αντικείμενο λεξικού/Encryptκαι ανακατασκευάζει έναν πλήρη κλασικό πίνακα διασταυρούμενων αναφορών + trailer με/Encryptκαι/ID; Ολοκληρώνει τη στοίβα κρυπτογράφησης PDF 2.0 (AES block + GCM + SHA-512/384 + εξαγωγή κλειδιού R6 + λεξικό + σάρωση εγγράφου) - Βοηθητικό πρόγραμμα
EncryptStreamPayload— η μορφή ροής PDF 2.0 AES-256 (IV προσαρτημένο στο κρυπτογραφημένο κείμενο AES-CBC-PKCS7), επαναχρησιμοποιήσιμο από καλούντες που διαχειρίζονται τη δική τους διάταξη αντικειμένων
Version 2.32.0
Προστέθηκε (Added)
- Κατακερματισμός SHA-512 / SHA-384 (FIPS 180-4) στη νέα μονάδα
FPdfSha512.pas; Καθαρή Pascal, μεταφέρθηκε από το HotPDF; Απαιτείται από την επανάληψη κατακερματισμού κωδικού πρόσβασης PDF 2.0 R6, η οποία διακλαδίζεται σε μια τιμή mod-3 128 bit για να επιλέξει SHA-256/384/512 σε κάθε γύρο; Επαληθεύτηκε με γνωστές απαντήσεις FIPS-180-4 B.1 - Εξαγωγή κλειδιού κρυπτογράφησης PDF 2.0 και δημιουργός λεξικού Encrypt στη νέα μονάδα
FPdfEncrypt.pas; Υλοποιεί τον αλγόριθμο 2.B της παραγράφου §7.6.4.3 του ISO 32000-2 (χορός κατακερματισμού R6: AES-128-CBC + επαναληπτική επιλογή SHA-256/384/512), εξάγει το κλειδί κρυπτογράφησης αρχείου 32 byte συν τις καταχωρήσεις/O,/U,/OE,/UE,/Permsκαι κατασκευάζει το λεξικό Encrypt V=5/R=5/R=6 με/CFM /AESV3; Μεταφέρθηκε από το PDFlibPas, προσαρμοσμένο σε στυλ TBytes
Version 2.31.0
Προστέθηκε (Added)
- Βασικές λειτουργίες κρυπτογράφησης μπλοκ AES (FIPS 197) στη νέα μονάδα
FPdfAes.pas; Καθαρή Pascal, κρυπτογραφήσεις μπλοκ AES-128 και AES-256 συν βοηθήματα λειτουργίας CBC και ένα backend CSPRNG, μεταφέρθηκε από το HotPDF; Οι δοκιμές γνωστών απαντήσεων FIPS-197 Appendix C.2 / C.3 επαληθεύουν την ορθότητα; Αυτό είναι το κρυπτογραφικό θεμέλιο για τη στοίβα κρυπτογράφησης PDF 2.0 - Πιστοποιημένη κρυπτογράφηση AES-GCM (NIST SP 800-38D) στη νέα μονάδα
FPdfAesGcm.pas; Υλοποιεί GHASH (πολλαπλασιασμός GF(2^128)), GCTR και την κατασκευή GCM AEAD πάνω στις βασικές λειτουργίες μπλοκ AES; Οι περιπτώσεις δοκιμής NIST GCM 1 και 3 (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 Table 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 Table 8.70), αλλά οι δοκιμές Delphi και C++ εξακολουθούσαν να αναμένουν την απόρριψη του/OFF; Οι δοκιμές χρησιμοποιούν τώρα μια πραγματικά μη έγκυρη τιμή (/Undefined) και μια νέα θετική δοκιμή κλειδώνει την αποδοχή του/OFF - Υπερβολική αντιστοίχιση γεωχωρικού
/Subtype /GEO: τοContainsDictionarySubtype('GEO')ταίριαζε με οποιοδήποτε λεξικό έφερε το διακριτικό, συμπεριλαμβανομένων μη σχετικών, όπως ένα αδέσποτο/ViewerPreferences << /Subtype /GEO >>; Το νέοContainsMeasureDictionarySubtypeαπαιτεί επιπλέον/Type /Measureή ένα αποκλειστικό για Measure αδελφό κλειδί, έτσι ώστε τα λεξικά που δεν αφορούν Measure να μην προκαλούν πλέον την απαίτηση ExtensionLevel 3 της ADBE
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 με τα base + F (φόρμα) + E (προσβασιμότητα); ΤοValidatePdfAδιαβάζει ένα πακέτο XMPpdfaid:part=4(το base παραλείπει το στοιχείο συμμόρφωσης), το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 επισημαίνεται τώρα - PDF/R-1 (ISO 23504-1)
pvriEncryptVersionMismatch— η κρυπτογράφηση επιτρέπεται μόνο σε μια κεφαλίδα%PDF-2.0; ένα σώμα 1.x που φέρει/Encryptεπισημαίνεται τώρα (προηγουμένως ήταν δήλωση χωρίς αποτέλεσμα) - PDF/R-1
pvriBadMediaBox— τοMediaBoxκάθε σελίδας πρέπει να είναι[0 0 w h]; ΤοPdfRHasNonZeroMediaBoxOriginείναι ένας ανεξάρτητος από τις τοπικές ρυθμίσεις σαρωτής ASCII που παρακάμπτει τα MediaBoxes έμμεσης αναφοράς - PDF/A Level A
pvaiRoleMapUnresolved(ISO 19005-1 §6.8.3.4) — ένα παρόν αλλά ημιτελές RoleMap που αφήνει τους προσαρμοσμένους τύπους δομής/Sχωρίς αντιστοίχιση επισημαίνεται τώρα, κλείνοντας το κενό που άφηνε ο υπάρχων έλεγχος μόνο για παρουσίαpvaiRoleMapMissing
Διορθώσεις (Fixed)
- Το
PdfVersionToName(20)επέστρεφε"1.0"αντί για"2.0", καταστρέφοντας την καταχώρηση/Versionτου καταλόγου και τα μηνύματα του επικυρωτή για κάθε αποθήκευση PDF 2.0; Ο μορφοποιητής διαχωρίζει τώρα ρητά major.minor για κωδικούς έκδοσης>= 20 - Ο κωδικοποιητής αρνητικών-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]) και παρήγαγε υπερβολικά byte για άλλα αρνητικά; Ο κωδικοποιητής εξάγει τώρα byte συμπληρώματος ως προς δύο με μετατοπίσεις επέκτασης προσήμου και σταματά σωστά όταν το υπόλοιπο είναι καθαρή επέκταση προσήμου; Τα πεδία INTEGER του CMS/PAdES είναι θετικά, επομένως αυτό επηρεάζει μόνο τους καλούντες που περνούν αρνητικές τιμές, αλλά η διαδρομή είναι τώρα σωστή - Οι μέθοδοι
TPdf.GetCharacterOriginκαιTPdfView.GetCharacterOriginαγνοούσαν την τιμή επιστροφής τουFPDFText_GetCharOriginκαι επέστρεφαν ένα μη αρχικοποιημένο σημείο σε περίπτωση αποτυχίας; Το αποτέλεσμα είναι τώρα αρχικοποιημένο με μηδέν και μια αποτυχημένη ανάγνωση επιστρέφει την αρχή (ταιριάζοντας με τη σύμβαση τουGetCharacterRectangle)
Version 2.27.0
Αλλαγές (Changed)
- Οι επιδείξεις
PDFViewerκαιMultiPageViewerχειρίζονται αναζήτηση καιEnter/F3, ενώ τοEscακυρώνει - Η εκτύπωση ακολουθεί την περιστροφή του viewer
- Οι επιδείξεις
ViewerInteractionLabυποστηρίζουν τα βασικά shortcuts
Διορθώσεις (Fixed)
- Η ακύρωση εκτύπωσης διακόπτει την εργασία εκτυπωτή
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 και mask 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)
- Οι επικυρώσεις
/BaseStateκαι/Intentδέχονται τα επιτρεπτά/OFF,/Designκαι arrays - Η ανίχνευση Geospatial Measure δεν απαιτεί
/Type /Measure
Version 2.22.0
Αλλαγές (Changed)
- Το fit zoom χρησιμοποιεί
ClientWidth/ClientHeight - Το
AddSignatureTimestampToCmsεγείρει ρητήException
Διορθώσεις (Fixed)
- Τα CNG handles ελευθερώνονται και το
EcDsaP1363ToDerαπορρίπτει μηδενικάr/s
Version 2.21.12
Διορθώθηκε (Fixed)
- Απορρίπτονται εσφαλμένες
/OCProperties
Version 2.21.11
Διορθώθηκε (Fixed)
- Απορρίπτονται μη έγκυρες
/Annots
Version 2.21.10
Διορθώθηκε (Fixed)
- Οι γεωχωρικές δομές δηλώνουν επεκτάσεις
Version 2.21.9
Διορθώθηκε (Fixed)
- Οι RichMedia σχολιασμοί δηλώνουν επεκτάσεις
Version 2.21.8
Διορθώθηκε (Fixed)
- Οι ροές PRC δηλώνουν επεκτάσεις
Version 2.21.7
Διορθώθηκε (Fixed)
- Απορρίπτονται μη έγκυρα
/SMaskInData
Version 2.21.6
Διορθώθηκε (Fixed)
- Απορρίπτονται μη υποστηριζόμενες εικόνες
Version 2.21.5
Διορθώθηκε (Fixed)
- Απορρίπτονται μη έγκυρες διατάξεις σελίδας
Version 2.21.4
Διορθώθηκε (Fixed)
- Η επικύρωση γλώσσας ακολουθεί την έκδοση PDF
Version 2.21.3
Διορθώθηκε (Fixed)
- Η ρητή αποθήκευση PDF 1.3 απορρίπτει τώρα δένδρα ονομάτων
/EmbeddedFilesστο έγγραφο, τα οποία απαιτούν PDF 1.4 ή νεότερο, χωρίς να απορρίπτει ροές ενσωματωμένων αρχείων που αναφέρονται μέσω παλαιότερων προδιαγραφών αρχείων
Version 2.21.2
Διορθώθηκε (Fixed)
- Τελευταία έκδοση: 2.21.4; Ημερομηνία κυκλοφορίας:
Version 2.21.1
Διορθώθηκε (Fixed)
- Η επικύρωση υβριδικών αναφορών εφαρμόζει τώρα συμπληρωματικές εγγραφές
/XRefStmπριν από τα κλασικά xref placeholders της ίδιας αναθεώρησης, ώστε συμπιεσμένες σημειώσεις και άλλα αντικείμενα που προστατεύονται από εκδοχή δεν παραλείπονται όταν ο πίνακας συμβατότητας τους χαρακτηρίζει ως ελεύθερα
Version 2.21.0
Αλλάχθηκε (Changed)
- Όλα τα παραδείγματα επισκόπησης Delphi, C++Builder και Lazarus μπορούν να ανοίξουν PDF που περνάει ως το πρώτο ορίσματα γραμμής εντολών, και τα παραδείγματα
MultiPageViewerγια C++Builder και Lazarus παρέχουν ρητές συντομεύσεις επιλογής όλων και αντιγραφής
Διορθώθηκε (Fixed)
- Τελευταία έκδοση: 2.21.12; Ημερομηνία κυκλοφορίας:
Version 2.20.0
Αλλάχθηκε (Changed)
- Όλα τα παραδείγματα επισκόπησης Delphi, C++Builder και Lazarus παρέχουν τώρα συνεπής συντομεύσεις για άνοιγμα, αναζήτηση, αποθήκευση, εκτύπωση, μεγέθυνση και πλοήγηση σελίδας, ενώ κάθε παραλλαγή
ViewerInteractionLabυποστηρίζει επίσης μετάβαση σελίδας, επαληθευμένη χειροκίνητη μεγέθυνση 10–600%, σταθερά αρχεία αλληλεπίδρασης και ελέγχους επιστροφής συντεταγμένων κλικ
Version 2.19.1
Διορθώθηκε (Fixed)
- Η ρητή επικύρωση εκδοχής PDF ακολουθεί τώρα την ενεργή αλυσίδα αναθεωρήσεων classic, hybrid ή xref-stream εγγράφου, συμπεριλαμβανομένων συμπιεσμένων καταχωρήσεων αντικειμένων, ώστε τα αντικατεστημένα, ελεύθερα και μη αναφερόμενα αντικείμενα δεν προκαλούν πλέον εσφαλμένα αποτελέσματα εκδοχής εκδόσεων
Version 2.19.0
Αλλάχθηκε (Changed)
- Τα παραδείγματα συνημμένων, εξαγωγής εικόνων, εξαγωγής κειμένου, μετατροπής σελίδας και διαχωρισμού για C++Builder και Lazarus χρησιμοποιούν τώρα αφιερωμένους φακέλους εξόδου ή ασφαλώς ολοκληρωμένα αρχεία, σταθερά ονόματα με μηδενικά διαχωρισμός, ανταποκριτικές ενημερώσεις προόδου και συνοπτικά ολοκλήρωσης με αριθμούς σφαλμάτων ανά στοιχείο
Διορθώθηκε (Fixed)
- Το παράδειγμα
CJKTextLabγια C++Builder μετράει τώρα κείμενο μέσω των εξαγόμενων συναρτήσεων επεξεργασίας PDFium, και τοMergePDFαποφεύγει αμβίγυα VCL message overload, επιτρέποντας καθαρά RAD Studio 37 builds
Version 2.18.3
Διορθώθηκε (Fixed)
- Το Document Time-stamp PAdES B-LTA καταχωρείται τώρα ως ανακαλύψιμο πεδίο υπογραφής — αόρατο Widget προσβάσιμο μέσω του
/Annotsτης πρώτης σελίδας και του AcroForm/Fields(ETSI EN 319 142-1 §5.4.3) — αντί για μη προσβάσιμο orphan αντικείμενο που οι επικυρωτές εναρίθμησης πεδίων υπογραφής δεν μπορούσαν να βρουν• οι υπάρχουσες σημειώσεις και πεδία διατηρούνται
Version 2.18.2
Διορθώθηκε (Fixed)
- Η υπογραφή PAdES και η κλασική εγγραφή cross-reference εμφανίζουν τώρα σαφές σφάλμα όταν byte offset υπερβαίνει το σταθερό πλάτος 10-ψήφιου πεδίου (~9,3 GB) αντί να αφήνει αθόρυβα το placeholder
/ByteRangeαγράφωσ (ISO 32000-1 §7.5.4)• η έξοδος xref-stream χρησιμοποιεί 8-byte binary πεδία και δεν επηρεάζεται
Version 2.18.1
Διορθώθηκε (Fixed)
- Η υπογραφή PAdES επιλύει τώρα έμμεσες αναφορές
/Annots,/AcroFormκαι/Fieldsτης πρώτης σελίδας με ολόκληρη κεφαλίδα αντικειμένου (ISO 32000-1 §7.5.3) και τον πραγματικό αριθμό γενιάς της αναφοράς• η αναζήτηση απλού υποσυνόλου προηγούμενα μπορούσε να αντιστοιχίσει αριθμό αντικειμένου μέσα σε μακρύτερο (επιλύοντας5 0 Rσε15 0 obj) - Όταν ο κατάλογος, η πρώτη σελίδα,
/Annots,/AcroFormή/Fieldsβρίσκεται μέσα σε object stream, η υπογραφή δοκιμάζει τώρα σε ανεπτυγμένο αντίγραφο πριν αποτύχει αντί να απορρίπτει το έγγραφο απευθείας
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 όταν επαναλαμβάνουν μόνο τις αρχικές τιμές graphics-state του PDF 1.3 - Τα αρχεία με hybrid-reference, xref-stream και object-stream δεν επιγράφονται πλέον από τον classic xref compressor, αποτρέποντας την απώλεια compressed-object εγγραφών
- Ονόματα που μοιάζουν με κλειδιά διαφάνειας ή καταλόγου μέσα σε strings, comments ή μη σχετικούς χάρτες πόρων δεν προκαλούν πλέον ψευδή αποτυχία εκδοχής στόχου έκδοσης
Version 2.17.0
Προστέθηκε (Added)
- Οι υπογραφές PAdES καταχωρούνται τώρα ως αόρατες σημειώσεις Widget στον πίνακα
/Annotsτης πρώτης σελίδας και στον πίνακα/Fieldsτου AcroForm, διατηρώντας υφιστάμενες σημειώσεις και πεδία φόρμας
Αλλάχθηκε (Changed)
- Οι αυξητικές ενημερώσεις PDF/A, PDF/X, PDF/E, PDF/R, PDF/UA, PDF/VT και PAdES διατηρούν τώρα την αναπαράσταση cross-reference του αρχείου πηγής: τα έγγραφα xref-stream λαμβάνουν ενημέρωση xref-stream σύμφωνα με ISO 32000-1 §7.5.8.1, ενώ τα κλασικά συνεχίζουν να λαμβάνουν πίνακα xref
- Τα offsets cross-reference,
startxref,/Prev, οι τιμές ByteRange PAdES και η επεξεργασία εύρους SHA-256 χρησιμοποιούν τώρα 64-bit θέσεις με chunked hashing, επιτρέποντας αρχεία μεγαλύτερα από 2 GB σε 64-bit builds - Τα γεννημένα εγγράφιμα XMP packets αραρούν τώρα 2048 bytes padding πριν την οδηγία κλεισίματος packet
Version 2.16.10
Διορθώθηκε (Fixed)
- Η ανάπτυξη object-stream δεν αναβιώνει πλέον παρατημένα αντίγραφα αντικειμένων που μια αυξητική ενημέρωση μετακίνησε εκτός object-stream σε απλή ορισμό (ISO 32000-1 §7.5.7)• οι έλεγχοι συμμόρφωσης και η εγχύτευση markers επίλυαν προηγουμένως τον απαρχαίο κατάλογο ή λεξικό μεταδεδομένων σε τέτοια αρχεία
Version 2.16.9
Διορθώθηκε (Fixed)
- Στο Free Pascal, τα string τεξτ δεν είναι έγκυρο UTF-8 επεκτείνονται byte-by-byte ως Latin-1 και γράφονται ως UTF-16BE hex strings• τα ακατέργαστα υψηλά bytes διέρρεαν πριν σε literal string, που δεν είναι έγκυρη PDF 1.7 text-string κωδικοποίηση
- Η αποκωδικοποίηση ροής αναγνωρίζει τώρα ακατέργαστα deflate data χωρίς RFC 1950 zlib wrapper (συνηθισμένο ελάττωμα εσφαλμένων writers) και τα αποσυμπιέζει σε raw μορφή, ώστε οι έλεγχοι συμμόρφωσης δεν είναι πλέον αισθητά τυφλοί σε τέτοιες ροές
Version 2.16.8
Διορθώθηκε (Fixed)
- Οι αυξητικές ενημερώσεις που γράφονται μέσω του μονοπατιού post-processing ανανεώνουν τώρα το δεύτερο (μεταβαλλόμενο) στοιχείο trailer
/IDσύμφωνα με ISO 32000-1 §14.4• τα εργαλεία caching και συγχρονισμού έβλεπαν αγένητο αναγνωριστικό μετά από κάθε ενημέρωση
Version 2.16.7
Διορθώθηκε (Fixed)
- Το blanking σώματος ροής απαιτεί τώρα τη λέξη-κλειδί
streamνα ακολουθείται από end-of-line (ISO 32000-1 §7.3.8.1)• η λέξη μέσα σε literal string όπως(downstream)προηγουμένως ανείγε όλη την ακόλουθη δομή έως το επόμενοendstream - Οι σκάν απαγορευμένων χαρακτηριστικών PDF/X και PDF/E κάνουν επίσης blank literal strings και σχόλια (§7.2.2), ώστε τιμές όπως
/Title (see /JavaScript docs)ή commented token δεν προκαλούν πλέον ψευδή εύρεσηJavaScript,AcroFormήLZWDecode
Version 2.16.6
Διορθώθηκε (Fixed)
- Οι εγγραφές DPM PDF/VT επικυρώνονται τώρα κατά την εγγραφή όπως τεκμηριώνεται: ονόματα κλειδιών που παραβιάζουν τον κανόνα NMTOKEN ISO 16612-2 §6.6 ή τον κανόνα προθέματος καταχωρητή Annex E, και διπλότυπα ονόματα απορρίπτονται αντί να γράφονται στο λεξικό DPart
Version 2.16.5
Διορθώθηκε (Fixed)
- Η αφαίρεση εγγραφής λεξικού της οποίας η τιμή είναι hex string (δηλ.
/Check <...>) αφαιρεί τώρα ολόκληρη την εγγραφή• οι injectors άφηναν προηγουμένως ορφανή hex τιμή, δημιουργώντας συντακτικά κατεστραμμένο λεξικό - Η αφαίρεση εγγραφής της οποίας η έμμεση αναφορά χρησιμοποιεί newlines μεταξύ των tokens (ISO 32000-1 §7.3.10) δεν αφήνει πλέον πίσω τον αριθμό γενιάς και τη λέξη-κλειδί
R
Version 2.16.4
Διορθώθηκε (Fixed)
- Η σάρωση μέγιστου object-number δεν απαιτεί πλέον οι κεφαλίδες αντικειμένων να αρχίζουν γραμμή (ISO 32000-1 §7.5.3), ώστε οι injectors δεν μπορούν πλέον να δεσμεύσουν object number που συγκρούεται με inline κεφαλίδα
N G obj• τα object numbers ορίζονται από το ανώτατο όριο Annex C - Οι ροές των οποίων το
/Lengthείναι έμμεση αναφορά επιλύουν τώρα το αναφερόμενο integer object και χρησιμοποιούν την τιμή του όταν αντιστοιχεί στο κλειστικόendstream
Version 2.16.3
Διορθώθηκε (Fixed)
- Οι διαβάσεις συμπίεσης ροών περνούν ανεπηρέαστα έγγραφα cross-reference-stream (PDF 1.5+ χωρίς κλασική λέξη-κλειδί
trailer)• το path ανασκευής προηγουμένως αναλυούσε λάθοςstartxrefως θέση πίνακα και συνέθεσε εικαζόμενο trailer - Ο συμπιεστής παραλείπει ροές XMP metadata ώστε ένα εγγραφο PDF/A διατηρεί την υποχρεωτική αναφιλτράριστη ροή μεταδεδομένων (ISO 19005-1 §6.7.2)
- Ο ανακατασκευασμένος πίνακας cross-reference σαρώνει αντίγραφο του εγγράφου με αφαιρεμένες ροές, ώστε το δυαδικό περιεχόμενο ροής δεν μπορεί να πλαστογραφήσει κεφαλίδες αντικειμένων
- Η εύρεση του αρχικού πίνακα cross-reference αποδέχεται τερματισμούς γραμμής CR-only (ISO 32000-1 §7.5.1) και δεν μπορεί να αντιστοιχίσει τα γράμματα
xrefμέσα στοstartxref
Version 2.16.2
Διορθώθηκε (Fixed)
- Η ανάλυση ακεραίων σε PDF readers επιπέδου bytes αποδέχεται τώρα το ρητό σύμβολο
+(ISO 32000-1 §7.3.3) και απορρίπτει σειρές ψηφίων που θα προκαλούσαν υπερχείλιση, ώστε εχθρικά ή κατεστραμμένα έγγραφα δεν μπορούν να περιτυλίξουν lengths και offsets
Version 2.16.1
Διορθώθηκε (Fixed)
- Ο injector PDF/UA γράφει την τιμή καταλόγου
/Langως κανονικό PDF text string• προηγουμένως την έπερνε μέσω XML escaper, ώστε γλωσσικά tags με&ή παρενθέσεις δημιουργούσαν κατεστραμμένη εγγραφή και non-ASCII εισαγωγή γραφόταν ως raw UTF-8 - Η εγγραφή Info
/ISO_PDFEVersionPDF/E χρησιμοποιεί τον κοινό κωδικοποιητή text string, διατηρώντας νόμιμες non-ASCII τιμές στο PDF 1.7 - Η αποφυγή XML για XMP packets αφαιρεί χαρακτήρες ελέγχου που είναι μη έγκυροι στο XML 1.0, ώστε metadata από κατεστραμμένο έγγραφο πηγής δεν μπορούν να καταστήσουν τη ροή μεταδεδομένων μη επεξεργάσιμη
- Η μετατροπή ημερομηνίας PDF-σε-XMP επικυρώνει ότι τα πεδία ημερομηνίας είναι αριθμητικά και συμπληρώνει απουσιάζον πεδίο λεπτων
Version 2.16.0
Προστέθηκε (Added)
- Η αποκωδικοποίηση ροών ανακατασκευάζει τώρα predictors
/DecodeParms(PNG predictors 10–15 και TIFF predictor 2, ISO 32000-1 §7.4.4.4) μετά από FlateDecode, τιμώντας/Colors,/BitsPerComponentκαι/Columns• τα object streams με predictor δείχναν προηγουμένως differenced bytes, άρα τα αντικείμενα που μεταφέρουν ήταν αόρατα στους ελέγχους συμμόρφωσης
Διορθώθηκε (Fixed)
- Η ανίχνευση FlateDecode αναλύει τώρα την τιμή
/Filterως όνομα ή πίνακα αντί για αντιστοίχιση substring, ώστε cascaded filter chains και εμφανίσεις της λέξης σε μη σχετικές τιμές δεν προκαλούν πλέον εσφαλμένη αποσυμπίεση
Version 2.15.1
Διορθώθηκε (Fixed)
- Ο σαρωτής λεξικού παραλείπει τώρα literal strings, hex strings και σχόλια κατά την ισορροπία
<</>>(ISO 32000-1 §7.2.2), ώστε λεξικά με τιμές όπως(A >> B)ή hex string παρακείμενο στο κλειστικό delimiter δεν κοπόνονται πλέον - Η εξαγωγή literal strings αποκωδικοποιεί τώρα ολόκληρη σειρά escape §7.3.4.2 Table 3 —
\n \r \t \b \f, octal\ddd, συνέχειες γραμμής και κανονικοποίηση EOL — αντί να αντιγράφει το escape γράμμα - Τα literal strings που γράφουν οι marker injectors διαφεύγουν τώρα CR, LF και άλλους control characters
Version 2.15.0
Διορθώθηκε (Fixed)
- Οι αυξητικές ενημερώσεις από injectors PDF/A, PDF/X, PDF/E, PDF/R, PDF/UA, PDF/VT και από paths PAdES και DSS διατηρούν τώρα τον μόνιμο αναγνωριστικό αρχείου του εγγράφου πηγής: το πρώτο στοιχείο trailer
/IDμεταφέρεται αυτούσια (ISO 32000-1 §14.4) και ανανεώνεται μόνο το δεύτερο (μεταβαλλόμενο) στοιχείο - Οι υπογραφές PAdES, η εγχύτευση DSS και τα Document Time-stamps B-LTA μεταφέρουν τώρα την αναφορά
/Infoτου source trailer (ISO 32000-1 §7.5.6) - Η εγγραφή fallback
/Infotrailer για cross-reference-stream εγγραφα εντοπίζει τώρα σωστά το XRef stream dictionary
Version 2.14.4
Διορθώθηκε (Fixed)
- Η ημερομηνία
/Mτου λεξικού υπογραφής που γράφεται απόTPdf.SignPadesκαιSignPadesBytesφέρει τώρα την υποχρεωτική πρόθεμηD:και τον δείκτη UTC offsetZ(ISO 32000-1 §7.9.4)
Version 2.14.3
Διορθώθηκε (Fixed)
- Οι αναζητήσεις κλειδιών λεξικού στον κοινό PDF reader αντιστοιχίζουν τώρα ολόκληρα tokens ονομάτων (ISO 32000-1 §7.3.5)
- Οι αναζητήσεις trailer
/Encrypt,/Root,/Sizeκαι/Infoδεν αντιστοιχίζουν πλέον μακρύτερα κλειδιά με κοινό πρόθεμα - Η ανάπτυξη object-stream δεν εμπιστεύεται πλέον σε κατεστραμμένες ή εχθρικές τιμές
/N
Version 2.14.2
Διορθώθηκε (Fixed)
- Οι injectors markerσ PDF/X, PDF/VT, PDF/UA, PDF/E και PDF/R αντιγράφουν τώρα κρυπτογραφημένα έγγραφα πηγής ανεπηρέαστα αντί να προσθέτουν plaintext update sections
- Τα
TPdf.SignPades,SignPadesBytesκαιInjectPadesDssMarkersεκπέμπουν τώραEPadesCryptoόταν το έγγραφο πηγής είναι κρυπτογραφημένο
Version 2.14.1
Διορθώθηκε (Fixed)
- Τα
TPdf.SignPadesκαιSignPadesBytesσυμπληρώνουν τώρα πίσω και τα τέσσερα πεδία/ByteRangeτου λεξικού υπογραφής - Τα λεξικά Document Time-stamp PAdES B-LTA λαμβάνουν την ίδια διόρθωση back-fill
/ByteRange - Το
ValidatePadesComplianceαποδέχεται τώρα την τυπική διάταξη υπογραφής όπου το κενό διάστημα byte range περιέχει την hex τιμή/Contents
Version 2.14.0
Προστέθηκε (Added)
- Το
TPdf.ExportXFDFσειριοποιεί κάθε τιμή πεδίου φόρμας και σημείωση σε όλες τις σελίδες σε XFDF έγγραφο (ISO 19444-1) - Το
TPdf.ImportXFDFεισάγει XFDF έγγραφο πίσω στο φορτωμένο PDF, αναδημιουργώντας σημειώσεις στις αντίστοιχες σελίδες - Η εγγραφή
TPdfAnnotationαπέκτησε τα πεδίαName,Subject,ModificationDate,CreationDate,Icon,Opacityκαι άλλα - Νέο παράδειγμα
XfdfLabστα sets Delphi, C++Builder και Lazarus επιδεικνύει το round-trip export/import
Version 2.13.6
Διορθώθηκε (Fixed)
- Το
ValidatePdfAθεωρεί τώρα ροές catalog/Metadataχωρίς/Type /Metadataή/Subtype /XMLως απούσα XMP metadata μέσωpvaiMissingXmpMetadata - Οι εκθέσεις preflight PDF/A κατηγοριοποιούν
pvaiMissingXmpMetadataως Metadata
Version 2.13.5
Διορθώθηκε (Fixed)
- Το
ValidatePdfAαναφέρει τώρα Widget σημειώσεις χωρίς λεξικό εμφάνισης και σημειώσεις PDF/A-2/PDF/A-3 χωρίς/APμέσωpvaiAnnotationApDictViolation - Οι εκθέσεις preflight PDF/A κατηγοριοποιούν
pvaiAnnotationApDictViolationως περιεχόμενο που οι injectors δεν μπορούν να επιδιορθώσουν
Version 2.13.4
Διορθώθηκε (Fixed)
- Το
ValidatePdfAαναφέρει τώρα inline εικόνες PDF/A-2 και PDF/A-3 με/Iή/Interpolateίση μεtrueμέσωpvaiImageDictionaryViolation - Οι εκθέσεις preflight PDF/A κατηγοριοποιούν
pvaiImageDictionaryViolation
Version 2.13.3
Διορθώθηκε (Fixed)
- Το
ValidatePdfAαναφέρει τώρα inline εικόνες PDF/A-1 με/LZWDecodeή/LZWμέσωpvaiInlineImageLzwForbidden - Ο σαρωτής φίλτρων inline εικόνων προχωρεί τώρα περνώντας αρχικά ονόματα πόρων όπως
/GS1
Version 2.13.2
Προστέθηκε (Added)
- Το
TPdf.SetFocusedFormFieldTextγράφει κείμενο στο buffer επεξεργασίας του εστιασμένου πεδίου φόρμας μέσωFORM_ReplaceSelection - Η πλατφόρμα JavaScript host συνδέεται τώρα όταν V8 είναι διαθέσιμο, ανεξάρτητα αν XFA — ώστε AcroForm JavaScript να εκτελείται
Αλλάχθηκε (Changed)
- Η σύνδεση πλατφόρμας JavaScript είναι τώρα ανεξάρτητη από XFA στο
InitializeFormFill
Version 2.13.1
Προστέθηκε (Added)
- Νέα host events εμφανίζουν πληροφορίες που απώρροφαν callbacks v2.13.0:
OnXfaUriAction,OnXfaPageCountChanged,OnXfaFocusChange,OnXfaEmail,OnXfaHttpRequest,OnXfaOpenFile,OnJavaScriptBeep,OnJavaScriptPrint,OnJavaScriptMail,OnJavaScriptSubmitForm - Η ιδιότητα
TPdf.XfaFormPacketsμόνο ανάγνωσης επιστρέφει στιγμιότυπη όλων των XFA packets (TXfaPacketList) - Οι XFA-specific κωδικοί σφάλματος PDFium
FPDF_ERR_XFALOAD/FPDF_ERR_XFALAYOUTδεσμεύονται τώρα και εμφανίζονται μέσωLastPdfError
Αλλάχθηκε (Changed)
- Το
FFI_DoURIActionWithKeyboardModifierδιαβουλεύεται τώρα μεOnXfaUriActionπριν από την εκτέλεση URI από πεδίο XFA - Το
DecodeFormFieldTypeδρομολογεί τώρα τύπους πεδίων XFA μέσωIsXfaFormField
Διορθώθηκε (Fixed)
- Το
ValidatePdfAαναφέρει τώρα αιτήσεις PDF/A-1 που χρησιμοποιούν cross-reference streams PDF 1.5 ή object streams με νέοpvaiPdfA1Pdf15Structure
Version 2.13.0
Προστέθηκε (Added)
- Πλήρης υποστήριξη XFA (XML Forms Architecture) runtime: το
TPdf.InitializeFormFillσυνδέει τώρα όλα τα 14 callbacks έκδοσης 2FPDF_FORMFILLINFO - Νέα μονάδα
Lib\FPdfXfa.pasδηλώνει τις σταθερές XFA και τους τύπουςTXfaPacket/TXfaSaveFormat - Static XFA packet reader στο
TPdf:GetXfaPacketCount/GetXfaPacketName/GetXfaPacketContent/GetXfaPacketByNameκαι άλλα - Capability probes:
XfaFeaturesAvailable,TPdf.XfaRuntimeAvailableκαιTPdf.XfaStaticReadable - Το
TPdfFormFieldTypeεπεκτάθηκε με τιμές XFA - JavaScript host events:
OnJavaScriptAlert,OnJavaScriptResponse,OnXfaGotoUrlκαιOnXfaRuntimeMissing - Νέο παράδειγμα
XfaLabγια Delphi
Αλλάχθηκε (Changed)
- Το
TPdf.LoadDocumentπροσκανάρει τώρα για markers XFA και επιλέγει αυτόματαpdfium.v8.dll - Το
TPdf.GetPageCountαντικατοπτρίζει τώρα τον αριθμό σελίδων που αναφέρει ο XFA engine - Όταν XFA δεν είναι διαθέσιμο, το
InitializeFormFillθέτειversion=1καιxfa_disabled=1
Version 2.12.2
Διορθώθηκε (Fixed)
- Το
ValidatePdfAComplianceαναφέρει τώρα custom XMP namespaces χωρίςpdfaExtension:schemas - Η επικύρωση PDF/A-3 embedded file απαιτεί τώρα και
/Fκαι/UFστα filespec dictionaries
Version 2.12.1
Διορθώθηκε (Fixed)
- Το
ValidatePdfAComplianceαποκωδικοποιεί τώρα escaped name tokens πριν από την αντιστοίχιση απαγορευμένων ονομάτων - Οι έλεγχοι inline image PDF/A απορρίπτουν τώρα
/LZWDecode,/LZWή/Crypt - Η επικύρωση PDF/A αναφέρει τώρα streams μεταδεδομένων με απαγορευμένα φίλτρα και άλλα
Version 2.12.0
Προστέθηκε (Added)
- Τα HTTP requests TSA ρυθμίζουν τώρα ρητά timeouts 30 s για κάθε φάση μέσω
WinHttpSetTimeouts - Παραγωγή nonce για κάθε αίτηση χρονικής σήμανσης PAdES B-T / B-LTA
- Το
PdfInflateορίζει τώρα την αποσυμπιεσμένη έξοδο στα 256 MiB (“zlib bomb”)
Αλλάχθηκε (Changed)
- Το ανάμειγμα overlays
TPdfViewχρησιμοποιεί τώρα off-screenTBitmap32-bpp καιScanLineαντί για per-pixel GDI - Το
FPdfAsn1.TDerReader.ReadIntegerαπορρίπτει INTEGER > 8 bytes - Το
ParseTimeStampRespδεν επιστρέφει πλέον nonce αίτησης ωςTPadesTimestamp.Nonce
Διορθώθηκε (Fixed)
- Το
PointsToPixelsεπέστρεφε αμετάβλητη την είσοδο για κάθε DPI: ο διαιρέτης ήτανPointsPerInchαντί για το literal 72 - Το
PdfMaxObjNumυπολόγιζε λάθος σε έγγραφα με object streams (ObjStm) - Το
InjectPdfAMarkersδεν πλαστογραφεί πλέον PDF/A επί- Το
PdfReadStreamBytesαρνείται τώρ¬/Lengthμεγαλύτερο από όλο το αρχείο - Το
Version 2.11.0
Προστέθηκε (Added)
- Το record PDFium
FPDF_FILEHANDLERδηλώνει τώρα τα έξι callbacks του ως πραγματικά πεδία - Το φόρτωμα και αποφόρτωμα βιβλιοθήκης PDFium σειριοποιούνται με critical section
- Τομέας
initialization/finalizationκαλεί τώραUnloadLibraryκατά την αποφόρτωση μονάδας
Αλλάχθηκε (Changed)
- Το
TPdf.SetActiveαπορροφά τώρα κάθε exception κατά τη φόρτωση - Για metadata keys PDFium, χρησιμοποιείται τώρα κοινή κωδικοποίηση
- Απαλοιφωθήκαν helpers
BytesToAnsi,AnsiToBytes,WriteBytesκαιWriteStr
Διορθώθηκε (Fixed)
- Διαρροή πόρων στο
TPdf.LoadDocumentκαιTPdf.CreateDocument - Βελτιωμένη διαγνωστική φόρτωσης PDFium DLL
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 — τα serial συχνά ξεπερνούν το εύρος τουInt64, επομένως το ακατέργαστο TLV είναι υποχρεωτικό. Η μορφήsubjectKeyIdentifierπαραμένει ως εναλλακτική μόνο όταν η ανάλυση του DER του πιστοποιητικού αποτυγχάνει
Αλλάχθηκε (Changed)
- Το
TCmsSignerId.SerialNumber: Int64αντικαταστάθηκε μεSerialDer: TBytes(το ακατέργαστο serialNumber TLV). Ο κατασκευαστής CMS ενσωματώνει το κομμένο TLV αυτούσιο στοIssuerAndSerialNumber, αποφεύγοντας την υπερχείλισηInt64σε serial 20-byte CA (ανώτατο όριο 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 που ζητήθηκε — το μοτίβο long-term-archival container που προτείνει το EN 319 142-1 Annex A.7
Version 2.9.0
Προστέθηκε (Added)
- Εμπιστευτικό χρονόσημο PAdES B-T: το
TPadesSignOptionsαποκτά τα πεδίαLevel,TsaUrlκαιNonce. ΌτανLevel >= plB_Tκαι έχει οριστεί τοTsaUrl, τοSignPadesBytesεξάγει την τιμή υπογραφής από το χτισμένο CMS, ζητά ένα χρονόσημο RFC 3161 πάνω της και ενσωματώνει το επιστρεφόμενο TimeStampToken ως μη υπογεγραμμένο χαρακτηριστικό SignerInfosignature-time-stamp— το βήμα B-T trusted-time (EN 319 142-1 §6.3 req 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 WinHttp των Windows, δυναμικά συνδεδεμένο από winhttp.dll (μηδενική νέα εξάρτηση χρόνου μεταγλώττισης· το HTTPS διαπραγματεύεται από το Windows certificate store). Αντικατοπτρίζει το μοτίβο δυναμικής σύνδεσης του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 που απαιτεί το CMSFPdfCms: κατασκευαστής CAdES SignedData (BuildSignedData) που εκπέμπει τα υπογεγραμμένα χαρακτηριστικά 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που απαιτεί το CMSSignPadesBytes: έγχυση υπογραφής σε επίπεδο byte — δεσμεύει μια υποδοχή 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 shape, και ανιχνεύουν τα τέσσερα επίπεδα βάσης (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, εύρος έκδοσης), τα απαιτούμενα υπογεγραμμένα χαρακτηριστικά (content-type,message-digest,signing-certificate/v2), τους απαγορευμένους κατακερματισμούς (MD5, SHA-1), την αμοιβαία αποκλειστικότητα/Reasonέναντιcommitment-type-indication(req 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), διατηρώντας τα αρχικά bytes — το βήμα ενσωμάτωσης υλικού επικύρωσης 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 γραμμές το βάρος συντήρησης copy-paste - Ποιότητα 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 (Annex A.2): ο επικυρωτής MIME εκτελεί πλέον
ValidatePdfVTComplianceσε κάθε inline μέροςapplication/pdfκαι επισημαίνει σώμα μη-PDF/VT μέσωvtmviInlinePdfNotPdfVT
Version 2.5.1
Προστέθηκε (Added)
- Επικύρωση κομματιοποίησης DParts (ISO 16612-2 §6.5 Table 4): το
pvviDPartsBadChunkingεπισημαίνει έναν πίνακα/DPartsτου οποίου οι μη τελικοί υπο-πίνακες δεν έχουν ακριβώς 8192 καταχωρήσεις ή του οποίου ο τελευταίος υπο-πίνακας βρίσκεται εκτός 1..8192 - Συνοχή RecordLevel μεταξύ ροών (Annex A.2): ο επικυρωτής MIME PDF/VT-2s εξάγει πλέον το
/RecordLevelκάθε inline PDF και επισημαίνει διαφωνία μέσω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 (Annex A.2): το
vtmviForwardReferenceεπισημαίνει ένα inline PDF που παραθέτει όνομα αρχείου (μέσω/EF /F) που δεν έχει εισαχθεί από προηγούμενο μέρος συνημμένου στη ροή
Διορθώθηκε (Fixed)
- Τα
ExtractNodeNameListFromPdfκαιExtractRecordLevelFromPdfστοFPdfPdfvtMimeδιόρθωσαν ένα επαναλαμβανόμενο σφάλμα off-by-one όπου η 1-based μετατόπιση που επέστρεφε τοAnsiFindKeyαντιμετωπιζόταν ως απόλυτη μετατόπιση byte στο εκτεταμένο 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 του Annex E και των κανόνων NMTOKEN / μοναδικότητας / σχήματοςGTS_Managedτης §6.6 στην πλευρά του επικυρωτή - Ανταλλαγή ροής PDF/VT-2s (Annex A): η νέα μονάδα
FPdfPdfvtMimeπαρέχει ταBuildPdfVT2sStreamκαιValidatePdfVT2sStreamγια τον φάκελο MIMEmultipart/mixedπου μεταφέρει inline κομμάτια PDF/VT συν συνημμένα προφίλ ICC, με τον κανόνα ταξινόμησης κεφαλίδαςX-PDFVT-Stream-version: 1και τον έλεγχο συνοχήςNodeNameListμεταξύ ροών - Το
TPdf.ValidatePdfVTεκτελεί πλέον μια έγκυρη μέτρηση ενεργειών JavaScript μέσωFPDFDoc_GetJavaScriptActionCount, συμπληρώνοντας τη σάρωση ονόματος/JavaScriptσε επίπεδο byte
Διορθώθηκε (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) να είναι προσπελάσιμο από τις αναζητήσεις σε επίπεδο byte
Αλλάχθηκε (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; το ICC literal 3144-byte υπάρχει πλέον ακριβώς μία φορά στη βάση κώδικα
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 που παράγονται από εργαλεία που χρησιμοποιούν indirect 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
Αλλαγή
- Δοκιμές παλινδρόμησης ροής διασταυρούμενων αναφορών: η υπάρχουσα
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 που διέθεταν ήδη αντίστοιχες δοκιμές, ενώ δύο ακόμη enums μηδενικής κάλυψης απέκτησαν θετικές δοκιμές:pvaiUnembeddedFontκαιpvaiSubsetMissingCidSet
Version 2.1.0
Διορθώθηκε
- Το PDF/E παραλείφθηκε ακούσια από τη διόρθωση ροής διασταυρούμενων αναφορών της έκδοσης v2.0.0: τόσο η
InjectPdfEMarkersόσο και ηValidatePdfEComplianceεξακολουθούσαν να καλούν τηνPdfReadTrailerχωρίςAcceptXrefStream, με αποτέλεσμα ο εγχυτήρας PDF/E να αποτυγχάνει σιωπηλά σε έξοδο PDF 1.5+ (η προεπιλογήSaveAsCopyτου pdfium) — και οι δύο τοποθεσίες κλήσης μεταβιβάζουν τώραTrue - Η κοινόχρηστη εφεδρική λειτουργία ροής διασταυρούμενων αναφορών της
PdfReadTrailerφέρει τώρα την προστασία/Type /XRefπου διέθεταν ήδη τα τοπικά αντίγραφα των PDF/A και PDF/X, έτσι ώστε μια κατεστραμμένη μετατόπισηstartxrefπου δείχνει σε ένα άσχετο λεξικό να αποτυγχάνει καθαρά αντί να αναλύεται εσφαλμένα ως trailer - Ο επιλυτής έμμεσης αναφοράς
/LangστοValidatePdfUaCompliance(v2.0.0) ήταν απρόσιτος: ηPdfFindObjDictβρίσκει μόνο λεξικά<<, αλλά ένα αντικείμενο συμβολοσειράς/Langείναι(...)ή<...>χωρίς λεξικό — αντικαταστάθηκε με μια απευθείας σάρωση σώματος αντικειμένου που εντοπίζει το διακριτικό συμβολοσειράς
Αλλαγή
- Επτά περιττά διπλότυπα βοηθητικών συναρτήσεων (PdfStructureBytes, PdfHasName, PdfCountName, BuildStreamObj) που ήταν πανομοιότυπα αντίγραφα byte των κοινόχρηστων εκδόσεων του
FPdfPdfCommonαφαιρέθηκαν από ταFPdfPdfaκαιFPdfPdfua— οι κοινόχρηστες εκδόσεις εφαρμόζονται πλέον παντού μέσωuses
Version 2.0.0
Διορθώθηκε
- Σιωπηλή αποτυχία μεταξύ προτύπων: η κοινόχρηστη βοηθητική συνάρτηση
PdfReadTrailer(που χρησιμοποιείται από τους εγχυτήρες και επικυρωτές δεικτών των PDF/UA, PDF/X, PDF/VT και PDF/R) δέχεται τώρα μια παράμετροAcceptXrefStreamκαι επιστρέφει στο λεξικό αντικειμένων της ροής διασταυρούμενων αναφορών όταν δεν υπάρχει η λέξη-κλειδίtrailer(PDF 1.5+) — προηγουμένως, η έξοδοςSaveAsCopyτου pdfium (η οποία χρησιμοποιεί ροή διασταυρούμενων αναφορών) προκαλούσε τη σιωπηλή αποτυχία κάθε εγχυτήρα δεικτών (τα byte προέλευσης αντιγράφονταν αμετάβλητα και η κλήση εξακολουθούσε να επιστρέφει επιτυχία), ο επικυρωτής PDF/R-1.0 (του οποίου η βάση PDF 2.0 είναι πάντα μια ροή διασταυρούμενων αναφορών) ήταν ουσιαστικά ανενεργός, ενώ η ώριμη υλοποίηση του επικυρωτή PDF/A μεταφέρθηκε στον κοινόχρηστο βοηθό ώστε να επωφελούνται όλα τα πρότυπα - Η σάρωση λεξικού trailer στις
InjectPdfUaMarkersκαιInjectPdfAMarkersχρησιμοποιεί τώρα τοPdfDictEndπου λαμβάνει υπόψη το βάθος αντί για μια απλή αναζήτηση>>, έτσι ώστε ένα trailer που περιέχει ένα φωλιασμένο λεξικό (π.χ./Encrypt << ... >>) να μην διακόπτεται πλέον πρόωρα πριν από μια τελική καταχώριση/Info
Αλλαγή
- Η
TPdf.ValidatePdfUaκαταστέλλει τώρα το γενικόpvuaiFontNotEmbeddedσε επίπεδο byte όταν έχει ήδη ενεργοποιηθεί το ακριβέςpvuaiPdfiumFontNotEmbeddedτου μοντέλου αντικειμένων Pdfium, έτσι ώστε η αναφορά προετοιμασίας πτήσης (preflight) να μην περιέχει πλέον δύο σχεδόν πανομοιότυπες γραμμές "ενσωματώστε τις γραμματοσειρές σας" για το ίδιο ελάττωμα - Το
pvuaiLangInvalidFormat(§7.2) επιλύει τώρα μια έμμεση αναφορά/Lang(N 0 R) στο αντικείμενο συμβολοσειράς της και επικυρώνει το περιεχόμενο, έτσι ώστε μια ετικέτα γλώσσας με έμμεση αναφορά να μην αποτελεί πλέον τυφλό σημείο
Version 1.99.0
Διορθώθηκε
- Το
pvuaiLangInvalidFormat(§7.2) δεν επιτρέπει πλέον την ελεύθερη διέλευση σε συμβολοσειρές/Langμε δεκαεξαδική κωδικοποίηση: τα ζεύγη UTF-16BE (με BOMFE FF) και οι απλές δεκαεξαδικές συμβολοσειρές ASCII αποκωδικοποιούνται πλέον και υποβάλλονται στον ίδιο γραμματικό έλεγχο BCP 47 όπως οι κυριολεκτικές συμβολοσειρές(...), με αποτέλεσμα να εντοπίζεται μια μη έγκυρη δεκαεξαδική συμβολοσειρά/Langενώ μια συμμορφούμενη (π.χ. μια UTF-16BEen-US) δεν κινδυνεύει πλέον να επισημανθεί
Αλλαγή
- Το
pvuaiFontMissingToUnicode(§7.21.7) εξαιρεί πλέον το/MacExpertEncodingμαζί με τα/WinAnsiEncodingκαι/MacRomanEncoding, ευθυγραμμιζόμενο με τις τέσσερις συνθήκες εξαίρεσης που αναφέρει η ρήτρα
Version 1.98.0
Προστέθηκε
- Το
pvuaiNeedAppearancesTrue(§7.18.4) επισημαίνει ένα AcroForm του οποίου η σημαία/NeedAppearancesείναι αληθής, έτσι ώστε οι εμφανίσεις γραφικών στοιχείων να μην κλειδώνονται αξιόπιστα και η υποστηρικτική τεχνολογία να μην μπορεί να τα συσχετίσει με το δέντρο δομής. Μεταφέρθηκε από τον επικυρωτή PDF/A και περιορίζεται από την παρουσία του/AcroFormγια τη μείωση της επιφάνειας σάρωσης
Αλλαγή
- veraPDF corpus regression: συνδέθηκαν το ζεύγος pass+fail του §7.20 Reference-XObject και τα ζεύγη pass+fail CIDSet/CharSet του υποσυνόλου §7.21.4.2 στο
Live_Corpus_ValidatePdfUaMatchesConformance. Τα δείγματα pass του §7.21.7 ToUnicode-forbidden-value και του §7.18.6.2 media-clip συνδέθηκαν επίσης ως προστασίες ψευδώς θετικών (τα δείγματα fail τους χρησιμοποιούν διατάξεις λεξικού που δεν ανιχνεύει η σάρωση σε επίπεδο byte, επομένως μόνο η πλευρά pass έχει συνδεθεί) - Η λίστα ισχυρισμών διαδρομής pass του corpus απέκτησε 15 νέες προστασίες μηδενικών ψευδώς θετικών, έτσι ώστε κάθε ενεργός έλεγχος δομής και επιπέδου byte
pvuai*να δοκιμάζεται πλέον έναντι συμμορφούμενων δειγμάτων (προηγουμένως προστατεύονταν μόνο περίπου 30 από τα 60 ενεργά ζητήματα). Η προστασίαpvuaiLangInvalidFormatπαραλείφθηκε σκόπιμα επειδή ο ελεγκτής επιπέδου byte επισημαίνει συντηρητικά συμβολοσειρές/Langμε δεκαεξαδική κωδικοποίηση που δεν μπορεί να αποκωδικοποιήσει
Version 1.97.0
Διορθώθηκε
- Θωράκιση του
ValidatePdfUaStructureElements: η διαδρομή αλυσίδας γονέαEnclosingTableφέρει πλέον έναν μετρητή βημάτων (που περιορίζεται από το πλήθος των στοιχείων), έτσι ώστε ένας κακόμορφος κύκλοςParentIndexσε έναν συνθετικό πίνακα στοιχείων δομής να μην μπορεί πλέον να προκαλέσει κρέμασμα του καλούντος. Η κατανομή πίνακα marked-content-ID τουValidatePdfUaPageContentTaggingπεριορίζεται πλέον στο ένα εκατομμύριο καταχωρίσεις, αποτρέποντας μια κατανομή πολλών GB σε περίπτωση κακόμορφου ή κακόβουλουMarkedContentID
Αλλαγή
- Το σχόλιο τεκμηρίωσης του enum
pvuaiOrderedListMissingListNumberingπεριγράφει πλέον με ακρίβεια τι κάνει ο έλεγχος: επισημαίνει ένα στοιχείοLτου οποίου η τιμήListNumberingβρίσκεται εκτός του συνόλου του Πίνακα 347 του ISO 32000-1 (ένα απόν χαρακτηριστικό δεν επισημαίνεται). Το προηγούμενο σχόλιο υπονοούσε ότι ανίχνευε επίσης ταξινομημένες λίστες που στερούνταν το χαρακτηριστικό, κάτι που δεν κάνει η υλοποίηση - Τα δύο δείγματα αποτυχίας corpus
7.21.3.3-t02για αναντιστοιχία WMode είναι πλέον συνδεδεμένα στοLive_Corpus_ValidatePdfUaMatchesConformance— από την έκδοση v1.95.0 η ροή CMap αποσυμπιέζεται με FlateDecode, οπότε η σύγκριση λεξικού έναντι περιεχομένου εκτελείται πλέον σε αναγνώσιμη πλευρά. Το παρωχημένο σχόλιο “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), καθιστώντας τον σύνδεσμο μη χρησιμοποιήσιμο από την AT
Διορθώθηκε
- Συγχώνευση δέντρου δομής μεταξύ σελίδων: ο βρόχος συσσώρευσης
AllElemsστοTPdf.ValidatePdfUaεπαναπροσδιορίζει πλέον τη βάση τουParentIndexκάθε στοιχείου από τον τοπικό πίνακα σελίδας στον συγχωνευμένο πίνακα. Χωρίς αυτό, τα θυγατρικά στοιχεία της σελίδας 2 διατηρούσαν έναν τοπικό δείκτη σελίδας που έδειχνε στο τμήμα της σελίδας 1, καταστρέφοντας σιωπηλά κάθε έλεγχο που εξαρτάται από το ParentIndex (δομή πίνακα/λίστας, πλήθος παιδιών Η §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” φέρουν πλέον ακριβείς κατηγορίες (Structure / Content / Metadata / Security) και συστάσεις ειδικές για κάθε ρήτρα. Διορθώθηκε επίσης το τυπογραφικό λάθοςpuaNone / pua1→pucNone / puc1στοPDFSpecComplianceMatrix.md
Version 1.95.0
Αλλαγή
- Έλεγχος ανάκλησης και ορθότητας του
TPdf.ValidatePdfUa: ο έλεγχος §7.21.3.3pvuaiCMapWModeMismatchκαι ο έλεγχος §7.21.7pvuaiToUnicodeForbiddenValueαποσυμπιέζουν πλέον τις ροές CMap / ToUnicode που είναι συμπιεσμένες μεFlateDecodeπριν από τη σάρωση (προηγουμένως κρίνονταν μόνο οι μη συμπιεσμένες ροές, ένα γνωστό ψευδώς αρνητικό). Οι κοινόχρηστοι βοηθοίPdfInflate/PdfReadAndDecodeStreamπροήχθησαν από ταFPdfPdfa/FPdfPdfxστοFPdfPdfCommonέτσι ώστε κάθε μονάδα συμμόρφωσης να μοιράζεται ένα αντίγραφο
Προστέθηκε
- Το
pvuaiSubsetCharSetEmpty(§7.21.4.2) επισημαίνει ένα υποσύνολο Type 1FontDescriptorπου φέρει ένα κλειδί/CharSetτου οποίου η τιμή συμβολοσειράς είναι κενή — το υπάρχονpvuaiSubsetMissingCharSetεντόπιζε μόνο ένα κλειδί που έλειπε. Ένα κενό/CIDSetδεν επισημαίνεται, καθώς μια γραμματοσειρά χωρίς CIDs μπορεί νόμιμα να φέρει έναν κενό ψηφιακό χάρτη
Version 1.94.0
Προστέθηκε
- Ο έλεγχος
TPdf.ValidatePdfUaδεύτερου περάσματος έκλεισε έξι κενά του ISO 14289-1 που προέκυψαν από μια ανασκόπηση ανά ρήτρα και μια εκ νέου σάρωση των εγγενών APIs του 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 — εξαλείφοντας τα ψευδώς θετικά της ευρετικής μεθόδου σε επίπεδο byte, η οποία δεν μπορεί να διαβάσει τις σημαίες/Fή το/Rect
Version 1.93.0
Προστέθηκε
- Το
TPdf.ValidatePdfUaπροσθέτει πλέον ένα πέρασμα μοντέλου αντικειμένων Pdfium πάνω από τον επιθεωρητή επιπέδου byte, αντικατοπτρίζοντας την αρχιτεκτονική γύρου 7 του PDF/A: διατρέχει τα αντικείμενα κειμένου κάθε σελίδας μέσω τουFPDFTextObj_GetFont→FPDFFont_GetIsEmbedded(pvuaiPdfiumFontNotEmbedded, §7.21.4) και σαρώνει κάθε χαρακτήρα μέσω τουFPDFText_HasUnicodeMapError(pvuaiPdfiumUnicodeMapError, §7.21.7) και τουFPDFText_GetUnicode(pvuaiPdfiumNotDefGlyph, §7.21.8) — πιο ακριβές από τις ευρετικές μεθόδους επιπέδου byte, οι οποίες ενεργοποιούνται μόνο όταν δεν υπάρχουν προγράμματα γραμματοσειρών ή δεν εμφανίζεται καθόλου/ToUnicode. Η διαδρομή βραχυκυκλώνει σε τρία επίπεδα: ο βρόχος σελίδας τερματίζεται όταν έχουν ήδη οριστεί και τα τρία ζητήματα επιπέδου Pdfium, ο βρόχος ανά αντικείμενο τερματίζεται στην πρώτη μη ενσωματωμένη γραμματοσειρά και η σάρωση χαρακτήρων παρακάμπτει το πέρασμα.notdefόταν έχει ήδη σημειωθείUnicodeMapError. Το PDF/UA ήταν ο τελευταίος επικυρωτής προτύπου PDF χωρίς επίπεδο μοντέλου αντικειμένων Pdfium
Version 1.92.0
Προστέθηκε
- Δημιουργήθηκε το
Tests.PdfR— το πρώτο αρχείο δοκιμών για τον επικυρωτή PDF/R-1 (FPdfPdfr), που καλύπτει την επικύρωση κεφαλίδας, την απαγόρευση 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 πάνω από τον επιθεωρητή επιπέδου byte: διατρέχει τα αντικείμενα κειμένου κάθε σελίδας μέσω τουFPDFTextObj_GetFont→FPDFFont_GetIsEmbeddedκαι αναφέρει μια μη ενσωματωμένη γραμματοσειρά ωςpvxiPdfiumFontNotEmbedded— πιο ακριβές από την ευρετική μέθοδο επιπέδου byte που ενεργοποιείται μόνο όταν δεν υπάρχουν προγράμματα γραμματοσειρών. Η διαδρομή βραχυκυκλώνει στην πρώτη μη ενσωματωμένη γραμματοσειρά που εντοπίζεται
Αλλαγή
- Διαδρομή δέντρου δομής του
TPdf.ValidatePdfUa: η κλήσηValidatePdfUaPageContentTaggingανά σελίδα (η οποία δημιουργεί έναν χάρτη αξιώσεων marked-content-ID και διασταυρώνει κάθε αντικείμενο κειμένου/εικόνας) παρακάμπτεται πλέον σε επόμενες σελίδες μόλις εντοπιστεί τοpvuaiUntaggedContent— τα στοιχεία δομής εξακολουθούν να συλλέγονται για τους ελέγχους μεταξύ σελίδων (μοναδικό αναγνωριστικό σημείωσης, αλληλουχία επικεφαλίδων), αλλά το δαπανηρό πέρασμα σήμανσης περιεχομένου ανά σελίδα σταματά νωρίς
Version 1.89.0
Αλλαγή
- Απόδοση επιπέδου μοντέλου αντικειμένων Pdfium του
TPdf.ValidatePdfA: η διαδρομή σελίδας/αντικειμένου βραχυκυκλώνει πλέον σε τρία επίπεδα — ο βρόχος σελίδας τερματίζεται όταν έχουν ήδη βρεθεί όλα τα ισχύοντα ζητήματα επιπέδου Pdfium, ο βρόχος ανά αντικείμενο τερματίζεται όταν έχουν οριστεί και τα δύο ζητήματα ανά αντικείμενο (ενσωμάτωση γραμματοσειράς + διαφάνεια) και η σάρωση χαρακτήρων σελίδας κειμένου παρακάμπτει το πέρασμα.notdefόταν έχει ήδη σημειωθείUnicodeMapError. Οι έλεγχοι διαθεσιμότητας APIAssigned()και οι σημαίες συμμόρφωσης αποθηκεύονται σε τοπικές λογικές μεταβλητές μία φορά πριν από τον βρόχο αντί να επανεκτιμώνται σε κάθε σελίδα/αντικείμενο/χαρακτήρα. Σε ένα μεγάλο μη συμμορφούμενο έγγραφο η διαδρομή μπορεί πλέον να σταματήσει μετά την πρώτη σελίδα αντί να σαρώνει όλες τις σελίδες· σε ένα συμμορφούμενο έγγραφο η επιβάρυνση ανά σελίδα είναι χαμηλότερη (χωρίς επαναλαμβανόμενες κλήσεις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επισημαίνει (flags) γραμματοσειρές 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
Αλλαγή
- Ο έλεγχος σειράς καρτελών (tab-order)
pvuaiMissingTabsOrderτου ISO 14289-1 §7.18.3 εκτελείται πλέον ανά σελίδα: κάθε σελίδα που φέρει σχολιασμούς (annotations) πρέπει να δηλώνει/Tabs /Sστο δικό της λεξικό σελίδας, οπότε μια συμμορφούμενη αδελφή σελίδα δεν καλύπτει πλέον μια σελίδα χωρίς τη δήλωση αυτή
Version 1.85.0
Προστέθηκε
- Η επικύρωση PDF/UA διακρίνει πλέον τις δυναμικές από τις στατικές φόρμες XFA σύμφωνα με το ISO 14289-1 §7.15: το
pvuaiXfaDynamicεπισημαίνει φόρμες των οποίων η διαμόρφωση XFA ορίζει τοdynamicRenderσεrequired
Αλλαγή
- Η πρώην σημαία υποψήφιου any-XFA
pvuaiXfaPresentκαταργείται και δεν εγείρεται πλέον (το στατικό XFA συμμορφώνεται με το §7.15)· η τιμή enum διατηρείται για συμβατότητα API
Version 1.84.0
Προστέθηκε
- Η επικύρωση PDF/UA εντοπίζει πλέον πραγματικό περιεχόμενο χωρίς ετικέτα (untagged real content) που απαιτείται από το ISO 14289-1 §7.1: το
pvuaiUntaggedContentεπισημαίνει αποδιδόμενα αντικείμενα κειμένου και εικόνας που δεν ανακτώνται ούτε από το δέντρο δομής της σελίδας (μέσω των αναγνωριστικών σημείου επισήμανσης) ούτε έχουν επισημανθεί ως Artifact - Νέα βοηθητικά στοιχεία σελίδας
GetPageContentMarkInfosκαιValidatePdfUaPageContentTaggingμε την εγγραφήTPdfPageContentMarkInfoγια άμεση χρήση
Version 1.83.0
Προστέθηκε
- Η επικύρωση PDF/UA επιβάλλει πλέον το μοντέλο επικεφαλίδων (heading model) του 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(με αποκωδικοποίηση διαφυγής ονόματος PDF#hh) καιValidatePdfUaRoleMapUsageγια άμεση χρήση
Version 1.81.0
Προστέθηκε
- Η επικύρωση PDF/UA καλύπτει πλέον την επισήμανση λίστας (list tagging) ISO 32000-1 που απαιτείται από το ISO 14289-1 §7.6: το
pvuaiListStructureInvalidεπισημαίνει στοιχεία LI εκτός κοντέινερ L και μέρη Lbl/LBody εκτός στοιχείου LI, ενώ αποδέχεται φωλιασμένες λίστες και τη νόμιμη χρήση Lbl εντός στοιχείων Note και BibEntry
Version 1.80.0
Προστέθηκε
- Η επικύρωση PDF/UA καλύπτει πλέον την επισήμανση πίνακα (table tagging) ISO 32000-1 που απαιτείται από το ISO 14289-1 §7.5: το
pvuaiTableStructureInvalidεπισημαίνει κελιά TH/TD εκτός γραμμής TR και γραμμές ή ομάδες γραμμών εκτός του κοντέινερ Table, τοpvuaiTableHeaderMissingScopeεπισημαίνει κελιά κεφαλίδας (header) των οποίων η σχέση δεν μπορεί να προσδιοριστεί ούτε μέσω χαρακτηριστικού Scope ούτε μέσω σύνδεσης Headers/ID, και τοpvuaiTableHeadersUndefinedIdεπισημαίνει αναφορές Headers σε έγγραφα που δεν ορίζουν αναγνωριστικά στοιχείων δομής - Το
TPdfStructureElementεκθέτει τα χαρακτηριστικά πίνακαScope,HasHeaders,HeadersIds,ColSpanκαιRowSpan, τα οποία επιλύονται κατά τη διέλευση του δέντρου δομής
Αλλαγή
- Η διέλευση του δέντρου δομής διαβάζει πλέον όλα τα χαρακτηριστικά διάταξης (layout) και πίνακα σε μια ενιαία δίοδο (pass) πάνω στα λεξικά χαρακτηριστικών κάθε στοιχείου, αντί για μια σάρωση ανά χαρακτηριστικό
Version 1.79.1
Προστέθηκαν
- Μεταφέρθηκε (ported) το παράδειγμα (sample)
AnnotationsLabστα Lazarus και C++Builder, πλαισιώνοντας το ήδη υπάρχον παράδειγμα κονσόλας Delphi
Διορθώθηκαν
- H
TPdf.CreateAnnotationμπορούσε να εγείρει το σφάλμα “Cannot set attachment points” για σχολιασμούς σημείωσης (markup) που χρησιμοποιούν σημεία τετραγώνου (quad points - π.χ. Highlight, Underline, StrikeOut, Squiggly) επειδή ο νέος σχολιασμός δεν είχε ακόμη υποδοχή (slot) σημείου τετραγώνου για αντικατάσταση. Πλέον προσαρτά (appends) το πρώτο τετράγωνο αντί αυτού
Version 1.79.0
Προστέθηκαν
- Νέο παράδειγμα κονσόλας Delphi,
AnnotationsLab: Δημιουργεί σχολιασμούς κειμένου (Text), επισήμανσης (Highlight), τετραγώνου (Square) και κύκλου (Circle), τους εγγράφει σε ένα PDF, στη συνέχεια επαναφορτώνει το αρχείο και απαριθμεί τη λίστα σχολιασμών της σελίδας
Version 1.78.0
Προστέθηκαν
- Νέα
TPdf.MeasureTextκαιTPdf.MeasureTextWidth: Υπολογίζουν το οπτικό πλάτος (width) και το ύψος (height) μιας συμβολοσειράς για μια δεδομένη γραμματοσειρά (font) και ένα συγκεκριμένο μέγεθος (size) (σε μονάδες χρήστη PDF, όπου 1 μονάδα = 1/72 ίντσας) χωρίς να προσθέτουν περιεχόμενο (content) σε μια σελίδα. Αυτό καθιστά δυνατή τη δημιουργία λογικής διάταξης (layout) και αναδίπλωσης λέξεων (word-wrap) πάνω στοAddText, και παρέχεται από την αυτόνομη (standalone) μονάδαFPdfMeasureως βοηθητική κλάση (class helper) - Νέα
TPdf.WrapText: Εφαρμόζει την απληστη (greedy) αναδίπλωση λέξεων με βάση τοMeasureTextWidth, η οποία διαχωρίζει το κείμενο με βάση τα κενά διαστήματα και πακετάρει τις λέξεις σε γραμμές που δεν υπερβαίνουν ένα συγκεκριμένο πλάτος (σε μονάδες χρήστη PDF). Μια υπερβολικά μεγάλη μοναδική λέξη καταλαμβάνει τη δική της γραμμή (χωρίς διαχωρισμό (breaking) στο εσωτερικό της) και επιστρέφει τις αναδιπλωμένες γραμμές (wrapped lines) ως πίνακας (array)
Version 1.77.0
Προστέθηκαν
- To
ValidatePdfAαπέκτησε τρεις νέες τιμέςTPdfAValidationIssueπου καλύπτουν όρους (clauses) που προηγουμένως είχαν αξιολογηθεί ως “NO” ή “συμπεριφορά αναγνώστη (reader behaviour)” κατά τον προηγούμενο έλεγχο κενών (gap audit) (προσαρτημένες σε αύξοντα σειρά (appended ordinals), οι υπάρχουσες τιμές παραμένουν αμετάβλητες):pvaiPdfiumNotDefGlyph(PDF/A-2 6.2.11.8 — ένας χαρακτήρας που επιλύεται σε Unicode 0 χωρίς σφάλμα αντιστοίχισης (mapping error), που είναι το σύμπτωμα χρόνου εκτέλεσης (runtime symptom) μιας αναφοράς γλυφής.notdef. Εντοπίζεται μέσω του επιπέδου μοντέλου αντικειμένων (object-model layer) Pdfium),pvaiWordBreakMissing(Επίπεδο (Level) A 6.8.3.2 — μια συμβολοσειρά εμφάνισης (show string) ροής περιεχομένου (content-stream) μεγαλύτερη από 20 χαρακτήρες χωρίς κενό διάστημα (space), μια πιθανή παραβίαση συγχωνευμένων λέξεων (merged-words violation). Αποτελεί χονδροειδή ευρετική (coarse heuristic) που αποφεύγει τα ψευδώς θετικά CJK), καιpvaiLinkActionMissingTarget(6.6.3 — μια ενέργεια (action) GoToR/URI/SubmitForm που της λείπει το κλειδί στόχου εμφάνισης (display target key), με αποτέλεσμα ο αναγνώστης να μην μπορεί να την εμφανίσει)
Version 1.76.0
Προστέθηκε (Added)
- Η
ValidatePdfAαπέκτησε τρεις νέες τιμέςTPdfAValidationIssue(προστέθηκαν τακτικά, οι υπάρχουσες τιμές παραμένουν αμετάβλητες):pvaiNameNotValidUtf8(PDF/A-2/3 6.1.8 — ένα διακριτικό/BaseFontή/FontNameπου περιέχει bytes ≥ 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-bit προσημασμένων ακεραίων 2,147,483,647),pvaiBlendModeNotWhitelisted(PDF/A-2/3 6.2.10 — μια τιμή/BMεκτός του προτύπου blend-mode συνόλου ISO 32000-1 §11.3.5· συμπληρώνει τοpvaiTransparentColorSpaceτου PDF/A-1 που επιτρέπει μόνο Normal/Compatible), καιpvaiHexStringOddDigits(6.1.6 — ένα<...>hex string με περιττό αριθμό δεκαεξαδικών ψηφίων)
Version 1.74.0
Προστέθηκε (Added)
- Η
ValidatePdfAαπέκτησε τρεις νέες τιμέςTPdfAValidationIssue(προστέθηκαν στο τέλος, οι υπάρχουσες τιμές παραμένουν αμετάβλητες):pvaiPermissionsViolation(6.1.12 — ένα λεξικό/Permsπου φέρει/DigestLocation,/DigestMethodή/DigestValueμαζί με/DocMDP),pvaiTransActionForbidden(PDF/A-2 6.5.1 — μια ενέργεια μετάβασης Trans, η οποία εντοπίζεται μέσω του μοτίβου action-dict/S /Transγια την αποφυγή λανθασμένης αντιστοίχισης με το/Transparency), καιpvaiPdfiumObjectTransparency(PDF/A-1 6.4 — ένα αντικείμενο σελίδας φέρει πραγματική διαφάνεια σύμφωνα με τοFPDFPageObj_HasTransparency, επεκτείνοντας το επίπεδο μοντέλου αντικειμένων του Pdfium που εισήχθη στην έκδοση v1.73.0 για τον εντοπισμό εφέ blend-mode/soft-mask τα οποία μπορεί να παραλείψει η σάρωση ονομάτων σε επίπεδο byte)
Version 1.73.0
Προστέθηκε (Added)
- Η
TPdf.ValidatePdfAπροσθέτει πλέον ένα πέρασμα μοντέλου αντικειμένων του Pdfium πάνω από τον επιθεωρητή επιπέδου byte: διατρέχει τα αντικείμενα κειμένου κάθε σελίδας μέσωFPDFPage_GetObject→FPDFTextObj_GetFont→FPDFFont_GetIsEmbeddedκαι αναφέρει μια μη ενσωματωμένη γραμματοσειρά που έχει αποδοθεί ωςpvaiPdfiumFontNotEmbedded(ISO 19005 6.3.4), και φορτώνει κάθε σελίδα κειμένου για να σαρώσει τοFPDFText_HasUnicodeMapErrorκαι να αναφέρει μια σπασμένη αντιστοίχιση Unicode ωςpvaiPdfiumUnicodeMapError(6.3.8). Αυτοί είναι έλεγχοι που δεν μπορεί να κάνει ο επιθεωρητής επιπέδου byte — βλέπει μόνο name tokens, όχι επιλυμένους δείκτες (handles) γραμματοσειράς ή κατάσταση αντιστοίχισης ανά χαρακτήρα — και συγχωνεύονται στο αποτέλεσμα του επιπέδου byte. Η αυτόνομη συνάρτηση επιπέδου byteValidatePdfAComplianceπαραμένει αμετάβλητη
Version 1.72.0
Προστέθηκε (Added)
- Η
ValidatePdfAαπέκτησε πέντε νέες τιμέςTPdfAValidationIssue(προστέθηκαν στο τέλος, οι υπάρχουσες τιμές παραμένουν αμετάβλητες):pvaiNeedsRenderingPresent(PDF/A-2 6.4.2 — ο κατάλογος δεν πρέπει να φέρει/NeedsRendering),pvaiDestOutputProfileRef(PDF/A-3 6.2.3 — ένα OutputIntent δεν πρέπει να φέρει/DestOutputProfileRef),pvaiEmbeddedFileMissingUF(PDF/A-3 6.8 — μια προδιαγραφή αρχείου με/EFπρέπει επίσης να φέρει/UF),pvaiXmpPacketBytesAttr(6.7.5 — η επικεφαλίδα πακέτου XMP δεν πρέπει να φέρει το καταργημένο (deprecated) χαρακτηριστικόbytes=ήencoding=), καιpvaiAnnotationToggleNoView(PDF/A-2 6.3.2 — το bit ToggleNoView του σχολιασμού/F, τιμή 512, απαγορεύεται)
Version 1.71.0
Τροποποιήθηκε
- Η
ValidatePdfUaτώρα εγείρει τοpvuaiOrderedListMissingListNumbering(ISO 14289-1 7.6): ο περιηγητής του δέντρου δομής επιλύει το χαρακτηριστικό διάταξηςListNumberingσε κάθε στοιχείοLμέσω του API χαρακτηριστικών του Pdfium και επισημαίνει οποιαδήποτε τιμή εκτός του συνόλου του Πίνακα 347 του ISO 32000-1 (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 — έναFontDescriptorυποσυνόλου CID πρέπει να δηλώνει/CIDSet),pvuaiToUnicodeForbiddenValue(7.21.7 — ένα ToUnicode CMap δεν πρέπει να αντιστοιχίζει κανέναν κώδικα στο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 — έναFontDescriptorυποσυνόλου Type 1 πρέπει να δηλώνει/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 — η παρουσία ενός/XFAAcroForm επισημαίνεται επειδή το δυναμικό XFA απαγορεύεται),pvuaiTrapNetAnnotation(7.18.2 — οι σχολιασμοί/TrapNetαπαγορεύονται), καιpvuaiReferenceXObject(7.20 — τα Reference XObjects, με κλειδί τον δείκτη/Ref, απαγορεύονται)
Διορθώθηκε
- Η
ValidatePdfUaδεν δίνει πλέον ψευδώς θετικά αποτελέσματαpvuaiEncryptionPresentσε κάθε κρυπτογραφημένο αρχείο: το PDF/UA επιτρέπει την κρυπτογράφηση εφόσον το κλειδί/Pτου λεξικού κρυπτογράφησης έχει ορισμένη τη θέση bit 10 (τιμή 1024), η οποία παρέχει πρόσβαση σε υποστηρικτική τεχνολογία (7.16). Η ακριβής παράβαση αναφέρεται τώρα μέσω του νέουpvuaiEncryptionPBitMissing· τοpvuaiEncryptionPresentδιατηρείται στο enum για συμβατότητα API αλλά δεν εγείρεται πλέον από τον επικυρωτή επιπέδου byte
Version 1.65.0
Προστέθηκε
- Η
ValidatePdfAαπέκτησε πέντε νέες τιμέςTPdfAValidationIssue(προστέθηκαν στο τέλος, οι υπάρχουσες τιμές παραμένουν αμετάβλητες):pvaiCidFontMissingCidToGidMap(ISO 19005-1 6.3.3.2 Cor.2 — μια ενσωματωμένη CIDFont Type 2 πρέπει να φέρει/CIDToGIDMap),pvaiSubsetMissingCharSet(6.3.5 — έναFontDescriptorυποσυνόλου Type 1 πρέπει να φέρει/CharSet),pvaiSubsetMissingCidSet(6.3.5 — έναFontDescriptorυποσυνόλου CID πρέπει να φέρει/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πρέπει να ακολουθείται από ένα σχόλιο%με τουλάχιστον τέσσερα byte μεγαλύτερα από 127),pvaiExternalStreamRef(6.1.7 — ένα λεξικό ροής δεν πρέπει να φέρει/F,/FFilterή/FDecodeParms),pvaiOutputIntentScheme(6.2.2 — το OutputIntent/Sπρέπει να είναι/GTS_PDFA1),pvaiInfoXmpDateMismatch(6.7.3 — οι πληροφορίεςCreationDate/ModDate(Info) πρέπει επίσης να εμφανίζονται ωςxmp:CreateDate/xmp:ModifyDate),pvaiMarkInfoMissing(6.8.2.2 — το Επίπεδο Α απαιτεί/MarkInfoμε/Marked true),pvaiAnnotationApDictViolation(6.5.3 Cor.2 — το λεξικό σχολιασμού/APπρέπει να περιέχει μόνο/N),pvaiEmbeddedFileMissingAFRelationship(ISO 19005-3 Παράρτημα 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 Παράρτημα E.2) - Προστέθηκε η καταργημένη (deprecated) ενέργεια
/SetStateστο σύνολο απαγορευμένων ενεργειών μαζί με την/SetOCGState, έτσι ώστε το όνομα ενέργειας του PDF Reference να εντοπίζεται άμεσα (6.6.1)
Version 1.63.0
Προστέθηκαν (Προστέθηκε)
- Προστέθηκαν
TPdf.MeasureTextκαιTPdf.MeasureTextWidth: μετρούν το εμφανιζόμενο πλάτος και ύψος κειμένου σε δεδομένη γραμματοσειρά και μέγεθος χωρίς να προσθέτουν περιεχόμενο στη σελίδα (μονάδες PDF, 1 μονάδα = 1/72 ίντσα), επιτρέποντας υπολογισμούς διάταξης και αυτόματη αναδίπλωση γραμμών επιπλέον τουAddText· παρέχεται από την αυτόνομη μονάδαFPdfMeasureως class helper
Αλλαγές (Τροποποιήθηκε)
- Τα
Demo\Delphi\MergePDF,Demo\CBuilder\MergePDFκαιDemo\Lazarus\MergePDFβελτιώθηκαν και για τα τρία IDE: εύρος σελίδων ανά αρχείο, προαιρετική διαδρομή εξόδου, αφαίρεση διπλότυπων, αρχείο καταγραφής εκτέλεσης, κουμπί ακύρωσης, σύνοψη συγχώνευσης· σελιδοδείκτες και μεταδεδομένα μεταφέρονται από την πρώτη πηγή - Τα demos
CreatePDFκαι για τα τρία IDE περιλαμβάνουν πλέον επιλογή European Text για κείμενο με τόνους Τσέχικα/Γαλλικά/Γερμανικά/Ισπανικά/Πορτογαλικά/Πολωνικά/Τουρκικά, επαληθεύοντας την επιλογή γραμματοσειράς και τη διαχείριση Unicode (το προηγούμενο δείγμα EuropeanText ενσωματώθηκε) - Αφαιρέθηκαν τα δείγματα
ExtractTextPagesκαιEuropeanText: η εξαγωγή σελίδα προς σελίδα τουExtractTextPagesκαλύπτεται από τις επιλογές εύρους σελίδων/διαχωριστικού στο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του εγγράφου host κατά τη ζωγραφική; παλαιότερα κάθε επαναζωγράφιση φόρτωνε ξανά σελίδες, ενεργοποιούσεOnPageChangeκαι απέρριπτε τη σελίδα κειμένου, κάτι που μπορούσε να διαταράξει ένα συνδεδεμένοTPdfViewκαι να προκαλέσει βρόχους επαναζωγράφισης. Οι μικρογραφίες αποδίδονται πλέον μέσωRenderPageThumbnailχωρίς τέτοιες παρενέργειες - Η επικύρωση συμμόρφωσης PDF/X επιθεωρεί πλέον έγγραφα με cross-reference streams (PDF 1.6, τυπικά για PDF/X-4) και αντικείμενα αποθηκευμένα σε συμπιεσμένα object streams, αντί να αναφέρει τέτοια αρχεία συνολικά ως μη συμμορφούμενα; ο δείκτης
GTS_PDFXVersionδιαβάζεται τόσο από element form όσο και από RDF attribute form στο XMP - Η επικύρωση PDF/R αναφέρει πλέον
pvriInfoXmpMismatchόταν το Info dictionary και το XMP διαφωνούν σε Producer ή Creator; το ζήτημα είχε δηλωθεί προηγουμένως αλλά δεν αναφερόταν ποτέ - Οι form-fill timers παρακολουθούνται ανά αίτημα, ώστε ένα έγγραφο που εκτελεί πολλούς timers ταυτόχρονα (για παράδειγμα ένα JavaScript interval μαζί με το αναβόσβημα του field caret) να τους διατηρεί όλους αντί να χάνει κάθε timer εκτός από τον πιο πρόσφατο
- Η ζωγραφική του
TPdfViewκαι οι δημόσιες μέθοδοιRenderPage/RenderTileκρατούν πλέον το document render lock, σειριοποιώντας την απόδοση από worker thread του ίδιουTPdf(το PDFium δεν είναι thread-safe) - Το μη ASCII κείμενο που γράφεται στα metadata PDF/X, PDF/R και PDF/VT (ονόματα συνθηκών OutputIntent, Creator, Producer) κωδικοποιείται πλέον ως UTF-16BE string σύμφωνα με ISO 32000-1 §7.9.2.2 αντί για raw UTF-8, το οποίο οι συμβατοί readers θα διάβαζαν λανθασμένα
- Οι helpers συμμόρφωσης διαβάζουν σωστά ενσωματωμένα metadata streams των οποίων το
/Lengthείναι indirect reference, φορτώνουν source bytes μεReadBuffer(ώστε ένα short read να αποτυγχάνει καθαρά) και απορρίπτουν αρνητικό offsetstartxrefαντί να διακινδυνεύουν ανάγνωση εκτός ορίων
Version 1.61.0
Άλλαξε (Τροποποιήθηκε)
- Διορθώσεις στις δηλώσεις FFI/ABI που ίσως απαιτήσουν επαναμεταγλώττιση κώδικα ο οποίος υλοποίησε τα επηρεαζόμενα callbacks: το callback form-fill
FFI_OpenFileφέρει πλέονcdecl(Win32 stack convention) και η παράμετροςvalueτωνFPDFAnnot_SetStringValueκαιFPDFAttachment_SetStringValueείναι πλέονFPDF_WIDESTRING(UTF-16LE) ώστε να ταιριάζει με τα headers του PDFium - Τα callbacks progressive-load
FX_FILEAVAIL.IsDataAvailκαιFX_DOWNLOADHINTS.AddSegmentδέχονται πλέον offsetssize_tκαι τοsize_tέχει πλάτος δείκτη στο Free Pascal / Lazarus Win64 (προηγουμένως αποκόπτονταν σε 32-bit), διορθώνοντας τα API calls διαθεσιμότητας δεδομένων και ταoutsize_tστο FPC Win64
Διορθώθηκε (Διορθώθηκε)
- Ασφάλεια μνήμης: χρήση μετά την απελευθέρωση του form-fill timer κατά την καταστροφή ενός
TPdfμε ενεργό AcroForm caret· διπλόFPDF_CloseDocumentστη διαδρομή σφάλματος τουImportNPagesToOne· εξαιρέσεις Pascal που διαφεύγουν από τα callbacksFPDF_FILEWRITE/FPDF_FILEACCESSπέρα από το όριο C κατά την αποθήκευση και την εισαγωγή JPEG· και υπερχείλιση ακεραίου στην εξαγωγή κειμένου κατά την ανάγνωση από αρχικό δείκτη έως το τέλος της σελίδας TPdfFuture<T>παραδίδει πλέον αξιόπιστα το callback αποτελέσματος· η απάντηση προηγουμένως σχεδόν πάντα χανόταν (και μπορούσε να αγγίξει νήμα που είχε ελευθερωθεί) επειδή το worker απελευθέρωνε τον εαυτό του πριν εκτελεστεί η ουρά της απάντησης- Η έξοδος PDF/A, PDF/X, PDF/E, PDF/R, PDF/VT και PDF/UA γράφει πλέον εγγραφές cross-reference που είναι ακριβώς 20 bytes, όπως απαιτεί το ISO 32000-1 §7.5.4
- Η έγχυση δεικτών προτύπων δεν καταστρέφει πλέον ένα dictionary όταν το κλειδί που αφαιρέθηκε (για παράδειγμα
/Trapped) ήταν η τελευταία καταχώριση, κάτι που προηγουμένως κατάπινε το κλείσιμο>>και παρήγαγε malformed object - Τα streams ICC profile του OutputIntent δηλώνουν πλέον το απαιτούμενο πλήθος component
/Nγια PDF/X και PDF/VT (ήδη υπήρχε για PDF/A)· τα κρυπτογραφημένα source documents αποκρυπτογραφούνται πριν γίνει έγχυση των markers PDF/X, PDF/E, PDF/R, PDF/VT και PDF/UA, ώστε η έξοδος να είναι έγκυρη αντί για σιωπηρά κατεστραμμένη - Το BOM xpacket UTF-8 στο παραγόμενο XMP εκπέμπεται ως ακριβή bytes, διορθώνοντας τη φθορά σε εγκαταστάσεις Delphi των οποίων η ANSI code page δεν είναι Latin-1· τα incremental-update trailers διατηρούν πλέον την αναφορά
/Infoτου εγγράφου - Το
SaveAsμε συμπίεση δεν περικόπτει πλέον streams των οποίων το/Lengthείναι indirect reference και οι ανακατασκευασμένοι cross-reference tables χρησιμοποιούν πλέον εγγραφές 20 bytes, πραγματικούς generation numbers και απορρίπτουν το παλιό pointer/Prev - Η validation συμμόρφωσης διαβάζει πλέον τα XMP version markers μορφής attribute για PDF/E και PDF/X, ώστε να αναγνωρίζονται τα αρχεία PDF/X-4 που έχουν serialised ως attribute, απαιτεί το ακριβές αναγνωριστικό
PDF/E-1, διαβάζει σωστά metadata streams με indirect/Lengthκαι δεν ταιριάζει πλέον λανθασμένα ένα key/IDή/StructTreeRootενός structure element όταν ελέγχει το trailer του PDF/UA· ένα malformed offsetstartxrefδεν προκαλεί πλέον range error TPdfThumbnailView: η τελευταία σελίδα είναι πλέον προσβάσιμη με το scrollbar, η τρέχουσα σελίδα του host document αποκαθίσταται αφού ζωγραφιστούν τα thumbnails και ο τυπικός χειρισμός mouse-leave αποστέλλεται ξανά- Τα grayscale page και image bitmaps δεν αποδίδονται πλέον με λανθασμένη palette· το
TPdfViewδεν μένει πλέον με dangling reference όταν πρώτα ελευθερώνεται τοTPdfτου - Αναφορές preflight: το HTML αποθηκεύεται ως UTF-8 ώστε να ταιριάζει με το δηλωμένο charset του και το JSON string escaping παράγει σωστές ακολουθίες
\uγια μη ASCII χαρακτήρες στο Free Pascal - Builds trial: το dialog υπενθύμισης trial εμφανίζεται πλέον αντί να καταστέλλεται πριν προλάβει να εμφανιστεί
TPdfStreamAdapterαπορρίπτει πλέον streams μεγαλύτερα από 4 GiB με σαφές σφάλμα αντί να περικόπτει σιωπηρά το length που περνά στο PDFium
Version 1.60.1
Άλλαξε (Τροποποιήθηκε)
- Τα demos AccessibilityReader για Delphi, Lazarus και C++Builder τρέχουν πλέον read-aloud πάνω στο
TPdfReadingSession: κάθε σελίδα συγκροτείται σε ένα spoken chunk με τοBuildSpokenTextFromWords, οι θέσεις λέξης του SAPI τροφοδοτούν τοFeedSpokenPosition, και η συνεδρία προχωρά σελίδες και κινεί τον word cursor της προβολής, αντικαθιστώντας τη χειροκίνητη ορχήστρωση που είχε πριν κάθε demo - Η παρακολούθηση karaoke σε επίπεδο λέξης στα demos λειτουργεί πλέον και όταν NVDA είναι η μηχανή ομιλίας: το
EstimatePacingρυθμίζει τον reading cursor με βάση τον χρόνο ομιλίας που έχει περάσει, ενώ παλαιότερα το NVDA διάβαζε φωναχτά χωρίς καθόλου παρακολούθηση λέξεων - Η Παύση και η Συνέχιση στα demos λειτουργούν πλέον και με NVDA: το
ResumeRestartsChunkξαναδιαβάζει την τρέχουσα σελίδα από την αρχή όταν γίνεται Resume, ενώ το SAPI διατηρεί την εγγενή παύση και συνέχισή του επιτόπου
Version 1.60.0
Προστέθηκε (Προστέθηκε)
- Ζωντανή απόδοση για χαμηλή όραση στο
TPdfView: οι νέες επιλογές απόδοσηςreInvertκαιreNightDuotoneξαναχρωματίζουν κάθε αποδομένο tile σελίδας (πλήρης αντιστροφή χρωμάτων ή παλέτα νυχτερινού duotone) πριν σχεδιαστούν τα overlays αναζήτησης, επιλογής, ανάγνωσης και word cursor, φέρνοντας τους υπάρχοντες μετασχηματισμούς χρωμάτων bitmap στον διαδραστικό viewer και για διατάξεις μίας σελίδας και διπλής σελίδας; η εναλλαγή των επιλογών προκαλεί άμεσο repaint NightDuotoneInkκαιNightDuotonePaperρυθμίζουν τη νυχτερινή παλέτα, με προεπιλογή κεχριμπαρένιο κείμενο σε μαύρη σελίδα; τοreInvertυπερισχύει όταν είναι ενεργές και οι δύο επιλογές
Version 1.59.0
Προστέθηκε (Προστέθηκε)
TPdfReadingSession: ένα component ορχήστρωσης read-aloud ανεξάρτητο από τη μηχανή ομιλίας. Διατηρεί τον chunk cursor, τον word cursor και την κατάσταση αναπαραγωγής (Play/PlayFrom/Pause/Resume/Stop), προχωρά μέσα από τα φορτωμένα chunksTPdfSpokenTextκαθώς ο host αναφέρει ότι η μηχανή είναι αδρανής μέσω τουTick, μεταφράζει τα offsets του spoken text πίσω σε χαρακτήρες σελίδας και οδηγεί αυτόματα έναν συνδεδεμένο word cursor τουTPdfView; ο host συνδέει οποιαδήποτε speech engine μέσω τουOnSpeakκαι των request events ακύρωσης / παύσης / συνέχισης, έτσι ώστε η βιβλιοθήκη να μην συνδέει καμία speech API από μόνη τηςFeedSpokenPositionκαταναλώνει θέσεις λέξης της μηχανής (όπως το SAPIStatus.InputWordPosition); τοEstimatePacingμεEstimatedWordsPerMinuteρυθμίζει μηχανές χωρίς σήμα θέσης; τοResumeRestartsChunkξαναδιαβάζει το τρέχον chunk για μηχανές χωρίς εγγενή παύσηOnChunkChange,OnWordChangeκαιOnFinishedενεργοποιούνται μόνο σε πραγματικές αλλαγές, και μια αποδεσμευμένη συνδεδεμένη προβολή αποσυνδέεται αυτόματα, ώστε ο κώδικας του host να παραμένει χωρίς flicker και ασφαλής από κρασαρίσματα
Version 1.58.0
Προστέθηκε (Προστέθηκε)
- Το
EstimateSpokenWordIndexεκτιμά ποια λέξη προφέρει μια μηχανή ομιλίας από τον χρόνο που έχει περάσει και έναν ρυθμό λέξεων ανά λεπτό, δίνοντας στις μεγαλύτερες λέξεις αναλογικά περισσότερο χρόνο, ώστε οι μηχανές που δεν αναφέρουν θέση λέξης (όπως ο NVDA controller client) να μπορούν ακόμη να οδηγούν τον word-level reading cursor; ο caller δίνει τον χρόνο που έχει περάσει, έτσι ώστε η ρουτίνα να μένει χωρίς ρολόι και κατάλληλη για unit tests
Version 1.57.0
Προστέθηκε (Προστέθηκε)
- Συναρμολόγηση spoken text με χαρτογράφηση δύο πεδίων για παρακολούθηση read-aloud: το
BuildSpokenTextFromWordsκαι τοSpokenTextAppendχτίζουν το string που δίνεται σε μια text-to-speech engine από word boxes της σελίδας ενώ καταγράφουν έναν πίνακα spans, και τοSpokenToPageCharμεταφράζει ένα spoken offset που αναφέρει η μηχανή (όπως το SAPIStatus.InputWordPosition) πίσω στον δείκτη χαρακτήρα της σελίδας, ώστε η παρακολούθηση highlight σε επίπεδο λέξης να μένει σωστή όταν το spoken text δεν είναι ολόκληρο το κείμενο της σελίδας (παραλειπόμενες περιοχές, ανάγνωση ανά μονάδα, παρακάμψεις προφοράς) TPdfSpokenTextκαιTPdfSpokenSpanτύποι μεταφέρουν το spoken string μαζί με τα αρχικά εύρη σελίδας από τα οποία χτίστηκε; τα offsets σε παρεμβαλλόμενα διαχωριστικά επιλύονται στην επόμενη αντιστοιχισμένη λέξη και τα offsets πέρα από τα mapped runs αναφέρουν ότι δεν υπάρχει αντιστοίχιση
Version 1.56.9
Προστέθηκε
Demo\Delphi\PreflightReportπροσθέτει μια προεπισκόπηση Action Plan που συμπυκνώνει τα πρότυπα που δεν πέρασαν, τις προτεραιότητες, τις επόμενες ενέργειες, τους κωδικούς ζητημάτων και τις συστάσεις σε μια λίστα αποκατάστασηςDemo\Delphi\PreflightReportCliδέχεταιplan/actionplanως format εξόδου για εκτελέσεις ενός αρχείου και batch, γράφοντας την ίδια λίστα αποκατάστασης σε text file
Τροποποιήθηκε
- Και τα δύο demos Delphi PreflightReport εμφανίζουν πλέον μετρητές κατάστασης pass / action / review μαζί με το σύνολο προτύπων και ζητημάτων
Version 1.56.8
Τροποποιήθηκε
ViewerInteractionLabπεριλαμβάνει πλέον controls για page-jump, χειροκίνητα controls zoom, καταγραφή συντεταγμένων με click μέσωDeviceToPage/PageToDevice, και σαφέστερο interaction log για ελέγχους επιλογής, αναζήτησης, περιστροφής και πλοήγησης- Οι σελίδες readme του
ViewerInteractionLabτεκμηριώνουν πλέον τη νέα ροή αλληλεπίδρασης σε όλο το τοπικοποιημένο σύνολο demo readme
Version 1.56.7
Προστέθηκε
AccessibilityWorkbenchCliαντιστοιχίζει κάθε εύρημα που ενεργοποιείται στα Success Criteria του WCAG 2.1 και στην περιοχή διάταξης του ISO 14289-1 (PDF/UA-1) και εμφανίζει μια ενότητα κάλυψης προτύπων στις αναφορέςAccessibilityWorkbenchCliυπολογίζει ένα τεκμηριωμένο σκορ προσβασιμότητας 0-100 με δημοσιευμένο rubric ποινών και μπάντες excellent / good / needs work / poor, ορατές ανά αρχείο και ως μέσος όρος batchAccessibilityWorkbenchCliδέχεταιfailscore=Nγια να αποτυγχάνει η εκτέλεση (exit code 2) όταν οποιοδήποτε αρχείο σκοράρει κάτω από NAccessibilityWorkbenchCliγράφει ένα SARIF 2.1.0 log όταν το όνομα της batch summary τελειώνει σε.sarif, με έναν κανόνα ανά είδος ευρήματος που φέρει τις ετικέτες WCAG 2.1 και PDF/UA για εισαγωγή σε CI και code-scanningAccessibilityWorkbenchCliπροσθέτει μια εντολήversionπου εκτυπώνει την συνδεδεμένη έκδοση PDFiumPas
Version 1.56.6
Προστέθηκε
IntakeWorkbenchCliυπολογίζει ένα forensic hash SHA-256 για κάθε αρχείο εισόδου (υποβαθμίζοντας σεunavailableσε compilers χωρίςSystem.Hash) και το αναφέρει σε κάθε formatIntakeWorkbenchCliδέχεταιpasswords=file.txtγια να δοκιμάζει το ξεκλείδωμα εγγράφων που απαιτούν κωδικό από μια λίστα υποψηφίων, καταγράφοντας το index του ταιριαστού υποψηφίου χωρίς ποτέ να γράφει το κείμενο του κωδικούIntakeWorkbenchCliδέχεταιcopyto=dirγια να δρομολογεί κάθε ελεγμένο αρχείο σε έναν υποφάκελο ανά επίπεδο κινδύνου, μετατρέποντας τον auditor σε intake sorterIntakeWorkbenchCliγράφει ένα SARIF 2.1.0 log όταν το όνομα της batch summary τελειώνει σε.sarif, με έναν κανόνα ανά flag κινδύνου και ένα αποτέλεσμα ανά επισημασμένο αρχείο για εισαγωγή σε CI και code-scanningIntakeWorkbenchCliπροσθέτει μια εντολήversionπου εκτυπώνει την συνδεδεμένη έκδοση PDFiumPas
Version 1.56.5
Προστέθηκε
IntakeWorkbenchCliπαράγει πλέον προτεινόμενες ενέργειες μετά το intake όπως accept, request-password, manual-review, quarantine και deduplicate, και εκθέτει μετρητές ενεργειών στις batch summariesAccessibilityWorkbenchCliπαράγει πλέον προτεινόμενες ενέργειες αποκατάστασης όπως pass-through, remediate-tags, run-ocr, remediate-semantics και manual-review, με αντίστοιχους μετρητές ενεργειών batch
Τροποποιήθηκε
- Και τα δύο CLI demos επιπέδου εργαλείου εμφανίζουν την προτεινόμενη ενέργεια σε console, text, HTML, JSON και CSV output, ώστε οι χειριστές batch να μπορούν να δρομολογούν αρχεία χωρίς post-processing πεδία κινδύνου ή κατάστασης
Version 1.56.4
Διορθώθηκε
- Η ανάγνωση annotations, bookmarks ή link annotations σε βρόχο δεν διαρρέει πλέον τα text strings του προηγούμενου στοιχείου: τα result records
TPdfAnnotation,TBookmarkκαιTLinkAnnotationμηδενίζονται τώρα με αρχικοποίηση aware σε managed types αντί για raw memory zeroing, έτσι ώστε έγγραφα με πολύ μεγάλους αριθμούς text-bearing annotations να μην φουσκώνουν πλέον τη μνήμη διεργασίας για όλη τη διάρκεια ζωής της εφαρμογής - Η καταστροφή ενός
TPdfπου είχε καταχωρίσει handlerOnUnsupportedFeatureτον αποσυνδέει πλέον από το process-global callback του PDFium, ώστε ένα μεταγενέστερο document load από άλληTPdfinstance χωρίς δικό της handler να μην μπορεί πλέον να κατευθυνθεί στο ελεύθερο component (use-after-free)
Version 1.56.3
Διορθώθηκε
AccessibilityWorkbenchCliδεν μετρά πλέον τις κενές σελίδες ως heuristic reading-order pages, έτσι ώστε τα tagged documents με κενές separator pages να διατηρούν τη σωστή κατάσταση προσβασιμότητας; οι σελίδες χωρίς αναγνώσιμο περιεχόμενο αναφέρονται πλέον ξεχωριστάAccessibilityWorkbenchCliη ανίχνευση table-header δεν αποδίδει πλέον σε έναν εξωτερικό πίνακα ταTHcells που ανήκουν σε φωλιασμένο πίνακα, και τα ονόματα form-field και font αντιστοιχίζονται με διάκριση πεζών-κεφαλαίων ώστε τα διακριτά πεδία να μην συγχωνεύονταιIntakeWorkbenchCliτα URL host inventories αφαιρούν πλέον userinfo, query και fragment μέρη, ώστε ένας κατασκευασμένος σύνδεσμος όπωςtrusted.example@evil.exampleνα αποδίδεται στον πραγματικό host, και οι στόχοιmailto:συνεισφέρουν το domain τους αντί να είναι αόρατοιIntakeWorkbenchCliοι αναφορές Markdown κάνουν escape τα backticks σε paths, hosts και attachment names που ελέγχονται από εισβολέα, ώστε η μορφοποίηση της αναφοράς να μην μπορεί να σπάσει από μέσα από ένα document
Τροποποιήθηκε
AccessibilityWorkbenchCliαναφέρει τα failures του font-scan και του form-field-scan ως ξεχωριστούς μετρητές, σημειώνει μη ενσωματωμένες γραμματοσειρές που έχουν επίσης ενσωματωμένες παρουσίες, και περιορίζει τις μεγάλες λίστες γραμματοσειρών με ρητό marker αποκοπήςIntakeWorkbenchCliοι batch summaries προσθέτουν μια στήλη count για attachment-annotation, και η απογραφή annotations ανά σελίδα περιορίζεται σε 20000 annotations ανά σελίδα με το όριο να αναφέρεται σε κάθε format
Version 1.56.2
Προστέθηκε
AccessibilityWorkbenchCliελέγχει πλέον embedding γραμματοσειρών, tooltips form-field, πηγή reading order, document outlines, δομή πινάκων και λιστών, ύποπτο εναλλακτικό κείμενο και πλουσιότερες λεπτομέρειες ελέγχου ανά σελίδα, ώστε οι batch αναφορές προσβασιμότητας να εντοπίζουν περισσότερους στόχους αποκατάστασηςIntakeWorkbenchCliαναφέρει πλέον όρια page scan, ενέργειες launch και remote-go-to, inventories URI host, μετρητές annotations, μη υποστηριζόμενα features του PDFium, διπλά document identifiers και διευρυμένα risk flags για αυτοματοποιημένο intake review
Τροποποιήθηκε
IntakeWorkbenchCliδέχεταιmaxpages=Nσε single-file και batch modes για να περιορίζει τα page scans ανά document, ενώ εξακολουθεί να ολοκληρώνει τα metadata, attachments, script, XFA, signature και risk reporting
Version 1.56.1
Διορθώθηκε
- Το φόρτωμα μιας παλαιότερης
pdfium.dllπου λείπει ένα νεότερο export αποτυγχάνει πλέον καθαρά: η διαδρομή αποτυχίας επαναφέρει κάθε δεσμευμένο API entry point, ώστε οι έλεγχοιAssigned()(για παράδειγμα στοFPDF_GetLastErrorή στοFPDF_GetSecurityHandlerRevision) να αναφέρουν ότι η βιβλιοθήκη δεν έχει φορτωθεί αντί να καλούν το ήδη unloaded module και να καταρρέουν με access violation UnloadLibraryκαθαρίζει πλέον όλα τα bindings του PDFium API αντί μόνο τα προαιρετικά βοηθητικά του V8, ώστε να μην επιβιώνουν παλιές function pointers μετά την απελευθέρωση της DLL
Version 1.56.0
Προστέθηκε
- Ο word-level karaoke reading cursor στο
TPdfView: τοTrackReadingWordAtχαρτογραφεί το current-word character offset μιας text-to-speech engine (όπως το SAPIStatus.InputWordPosition) πάνω στα page word boxes, επισημαίνει τη λέξη που το περιέχει ως ξεχωριστό overlay πάνω από το reading block, το φέρνει σε προβολή και επιστρέφει το word index, ώστε η προφορική λέξη να ανάβει καθώς η φωνή προχωρά SetReadingWordκαιClearReadingWordορίζουν ή καθαρίζουν απευθείας την επισημασμένη λέξη από έναTPdfWordBox; η επανεγκατάσταση της ίδιας λέξης δεν κάνει τίποτα, έτσι ώστε η παρακολούθηση ανά λέξη να μην προκαλεί ποτέ flicker στην προβολήReadingWordColorκαιReadingWordFollowελέγχουν το χρώμα του word cursor και το αν η προβολή auto-scrolls την προφορική λέξη μέσα στο οπτικό πεδίο
Version 1.55.2
Διορθώθηκε
- Το ViewerInteractionLab δίνει πλέον στις γραμμές της εργαλειοθήκης περισσότερο κάθετο χώρο, ώστε τα Open PDF, Create Sample, navigation, search και selection controls να μην αλληλεπικαλύπτονται πλέον κάτω από κλιμακωμένες γραμματοσειρές
Version 1.55.1
Διορθώθηκε
- Το ViewerInteractionLab τοποθετεί πλέον τα Prev, Next και Rotate στη δεύτερη γραμμή της εργαλειοθήκης, αποφεύγοντας την επικάλυψη εκκίνησης με τα Open PDF και Create Sample
Version 1.55.0
Προστέθηκε
- Γέφυρα από word σε selection για ανάγνωση "read it, select it": τα
TPdfView.SelectWordBoxκαιSelectWordSpanεπιλέγουν ένα μόνο word box ή ένα same-page span word boxes (απόPageWordBoxes) με βάση τα character ranges τους, ώστε η λέξη ή η γραμμή που διαβάζεται αυτή τη στιγμή να μπορεί επίσης να επιλεγεί και να αντιγραφεί WordBoxIndexAtCharIndexχαρτογραφεί έναν δείκτη χαρακτήρα πίσω στο word box που τον περιέχει, οδηγώντας το word-by-word highlight καθώς προχωρά ο TTS reading cursor
Version 1.54.0
Προστέθηκε
- Accessors για voice form-filling που διαβάζουν το focused field απευθείας από τον λογικό cursor: τα
FocusedFormFieldValue,FocusedFormFieldNameκαιFocusedFormFieldDetailsσταTPdfκαιTPdfViewαναφέρουν την τιμή του τρέχοντος πεδίου, το ανθρώπινα αναγνώσιμο όνομα (/TUtooltip, με επιστροφή στο/T) και το πλήρεςTPdfFormFieldInfo(τύπος, flags, options) — όλα όσα χρειάζεται να ανακοινώσει ένα voice UI καθώς κινείται μέσα σε μια φόρμα
Διορθώθηκε
FocusedFormFieldValueδιαβάζει το πεδίο μέσω τουFocusedFormFieldIndexαντί του pdfium interactive focus, ώστε ένα voice-driven form filler να παίρνει τη σωστή τιμή ακόμη κι όταν δεν υπάρχει on-screen caret (το υπάρχονFocusedFormFieldTextεξακολουθεί να αντικατοπτρίζει το pdfium focus και δεν αλλάζει)
Version 1.53.0
Προστέθηκε
- Υποστήριξη για word-level highlighting: τα
TPdf.PageWordBoxesκαιTPdfView.PageWordBoxesχωρίζουν μια σελίδα σε recordsTPdfWordBox, το καθένα με το κείμενο της λέξης, το εύρος χαρακτήρων της και ένα page-space bounding rectangle, ώστε ένας accessibility reader να μπορεί να επισημαίνει κάθε προφορική λέξη με τη σειρά ("karaoke" reading) περνώντας το rectangle στοSetReadingHighlight BuildWordBoxesεκθέτει το βήμα tokenizer μόνο του, μετατρέποντας το κείμενο της σελίδας σε word boxes με εύρη χαρακτήρων
Version 1.52.0
Προστέθηκε
- Οι helpers low-vision rendering
InvertPdfBitmap,GrayscalePdfBitmapκαιDuotonePdfBitmapεφαρμόζουν in-place μετασχηματισμούς χρώματος σε ένα αποδομένο bitmap 32-bit, ώστε ένας accessibility reader να μπορεί να παρουσιάζει σελίδες με αντιστροφή / dark-mode, grayscale ή σε ένα προσαρμοσμένο δύο-χρωμο σχήμα (για παράδειγμα σκοτεινό φόντο με ανοιχτό κείμενο) για χρήστες χαμηλής όρασης - Οι μετασχηματισμοί εκτελούνται ανά pixel και συμπεριφέρονται ακριβώς το ίδιο σε VCL και Lazarus/LCL, αφήνοντας ανέπαφες τις διαστάσεις του bitmap
Version 1.51.0
Προστέθηκε
- Sentence-level reading units για assistive listen-reading: τα
TPdf.ReadingUnits,TPdf.DocumentReadingUnitsκαιTPdfView.ReadingUnitsγραμμικοποιούν το ρεύμα αναγνώσιμου περιεχομένου σε ταξινομημένα recordsTPdfReadingUnitμεγέθους πρότασης — το καθένα φέρει το κείμενο που θα ειπωθεί μαζί με το σημασιολογικό του είδος, τη σελίδα, τα rectangles highlight και το language tag, ώστε μια εφαρμογή screen-reader να μπορεί να περνά από μια σελίδα ή ολόκληρο το έγγραφο ένα spoken unit τη φορά - Σημασιολογική πλοήγηση με το
NextReadingUnitOfKind, που επιτρέπει σε ένα voice UI να πηγαίνει στο επόμενο ή προηγούμενο heading, figure, list item ή table cell χωρίς να ψάχνει χειροκίνητα το ρεύμα BuildReadingUnitsμετατρέπει απευθείας οποιοδήποτεTPdfContentFragmentsσε reading units: τα headings και οι περιγραφές figure/alt μένουν ενιαίες ενώ οι παράγραφοι χωρίζονται σε όρια προτάσεων, οι τελείες σε δεκαδικούς αριθμούς διατηρούνται και ο reading cursor είναι ένας απλός δείκτης που ανήκει στον caller
Version 1.50.0
Προστέθηκε
- Το
ValidatePdfAμπορεί πλέον να επιθεωρεί έγγραφα PDF 1.5+ που αποθηκεύουν το catalog, το OutputIntent ή άλλα dictionaries μέσα σε compressed object streams (/Type /ObjStm) Τα object streams αποσυμπιέζονται και τα objects που περιέχουν επιλύονται, έτσι ώστε αυτά τα έγγραφα να επικυρώνονται με βάση την αξία τους αντί να αναφέρονται ως ελλιπή σε PDF/A markers
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 attributes (pdfaid:part="2") αντί για child elements, ώστε τα έγγραφα σε μορφή attribute να μην αναφέρονται πλέον με άγνωστο επίπεδο Αυτό διορθώνει επίσης μια αλυσίδα όπου ένα μη ανιχνευμένο επίπεδο έκανε τους part-specific ελέγχους να πέφτουν πίσω στους αυστηρούς κανόνες PDF/A-1 και να επισημαίνουν λανθασμένα embedded files και transparency που επιτρέπουν τα PDF/A-2 και PDF/A-3
Version 1.49.3
Διορθώθηκε
- Το
ValidatePdfAεπιθεωρεί πλέον έγγραφα PDF 1.5+ των οποίων τα cross-reference data είναι cross-reference stream (αρχεία που δεν έχουν το keywordtrailer) Το επίπεδο συμμόρφωσης, το trailer/IDκαι τα υπόλοιπα markers διαβάζονται από το dictionary του cross-reference stream, ώστε αυτά τα έγγραφα να επικυρώνονται με βάση την αξία τους αντί να αναφέρονται ως πλήρως μη συμβατά
Version 1.49.2
Διορθώθηκε
- Το
ValidatePdfAδεν αναφέρει πλέον ψευδές issue μη ενσωματωμένης γραμματοσειράς σε έγγραφα που ενσωματώνουν όλες τις γραμματοσειρές τους Η προηγούμενη heuristic συνέκρινε τον αριθμό των tokens/FontDescriptorμε τα embedded font programs, αλλά κάθε embedded font συνεισφέρει δύο tokens/FontDescriptor(το reference του font dictionary συν το descriptor object), άρα κάθε αρχείο με embedded γραμματοσειρές επισημαινόταν λανθασμένα Ο έλεγχος αναφέρει πλέον μόνο ένα έγγραφο που αναφέρεται σε γραμματοσειρές αλλά δεν ενσωματώνει καθόλου font program, όπως και η αντίστοιχη διόρθωση τουValidatePdfUa
Version 1.49.1
Διορθώθηκε
- Η έξοδος PDF/A επικυρώνεται πλέον ως συμβατό PDF/A-1b και PDF/A-1a με το veraPDF: το embedded sRGB OutputIntent ICC profile stream (που αναφέρεται από το
/DestOutputProfile) δηλώνει πλέον το απαιτούμενο πλήθος component/N(3 για το ενσωματωμένο RGB profile), όπως ορίζει το ISO 19005-1 6.2.3.2 Τα έγγραφα που παράγει τοSaveAsPdfAαποτύγχαναν παλαιότερα τον αυστηρό έλεγχο PDF/A-1 επειδή το stream του profile προορισμού παρέλειπε το/NΗ τιμή προκύπτει από το ICC profile header, έτσι ώστε και ένα CMYK ή Gray profile που δίνει ο caller να παίρνει σωστά τον αριθμό
Version 1.49.0
Διορθώθηκε
ValidatePdfUaδεν αναφέρει πλέον ψευδώς ότι λείπει η XMP identification σε συμβατά tagged PDFs — το PDF/UA identifier (pdfuaid:part), τοdc:title, οι XMP dates και το trailer/IDδιαβάζονται πλέον από τα αρχικά bytes του εγγράφου αντί από το ξανασώσιμο αντίγραφο, το οποίο παραλείπει το XMP stream/Metadataκαι, για αρχεία cross-reference-stream, το trailer/ID- Ο έλεγχος embedding γραμματοσειρών του
ValidatePdfUaδιορθώθηκε ώστε ένα έγγραφο που ενσωματώνει όλες τις γραμματοσειρές του να μην αναφέρεται πλέον ότι έχει μη ενσωματωμένες γραμματοσειρές Εντοπίζει πλέον μόνο ένα έγγραφο που αναφέρεται σε γραμματοσειρές αλλά δεν ενσωματώνει καθόλου font program ValidatePdfUaδέχεται πλέον ένα structure elementFormulaτου οποίου το εναλλακτικό κείμενο δίνεται μέσωActualTextαντί για entryAlt(ISO 14289-1 §7.7), σε συμφωνία με τον υπάρχοντα κανόνα γιαFigure
Version 1.48.0
Προστέθηκε
- Προγραμματική επιλογή κειμένου στο
TPdfView: ταSelectTextRange(ανά σελίδα και εύρος χαρακτήρων) καιSetSelection(με ρητά per-page ranges) επιλέγουν κείμενο από κώδικα — για παράδειγμα για να διαβαστεί και να επισημανθεί ένα απόσπασμα Και τα δύο κάνουν repaint και ενεργοποιούν τοOnSelectionChangeόταν αλλάζει η επιλογή ΤοSelectionRangesδιαβάζει την τρέχουσα επιλογή ως per-page character ranges και τοSelectionRectanglesεπιστρέφει τα rectangles της σε συντεταγμένες σελίδας για προσαρμοσμένο highlighting ή scroll-to
Version 1.47.0
Προστέθηκε
- Πλοήγηση πεδίων φόρμας για voice-driven form filling, τόσο στο
TPdfόσο και στοTPdfView:FormFieldTabOrder,FocusedFormFieldIndex,FocusFormField,FocusNextFormField,FocusPreviousFormField,ClearFormFieldFocusκαιFocusedFormFieldTextΑυτά μετακινούν έναν λογικό field cursor πάνω στα widget fields της σελίδας με τη σειρά tab order (τυλίγοντας στα άκρα), ώστε ένας βοηθητικός αναγνώστης να μπορεί να περάσει τη φόρμα, να αναγγείλει κάθε πεδίο μέσω τουFormFieldInfo[Index].AlternateName(το /TU tooltip) και να το συμπληρώσει μέσω τουFormField[Index] - Το event
TPdfView.OnFormFieldFocusChange, που ενεργοποιείται όταν ο field cursor μετακινείται (μεταφέροντας το νέο index πεδίου, ή -1 όταν καθαριστεί)
Version 1.46.0
Προστέθηκε
- Ροή περιεχομένου για assistive listen-reading: τα
TPdf.ReadableContent,TPdf.ReadablePageContent,TPdf.DocumentReadableContentκαιTPdfView.ReadableContentεπιστρέφουν μια ταξινομημένη λίστα semanticTPdfContentFragmentστοιχείων, το καθένα με το προφορικό κείμενο (πραγματικά glyphs ήActualText/Alt για figures), είδος fragment (heading με level, paragraph, figure, list item, table cell, link, plain), γλώσσα, 1-based σελίδα και block plus per-line highlight rectangles Τα tagged PDFs γραμμικοποιούνται με τη λογική σειρά ανάγνωσης από το structure tree ενώ οι untagged σελίδες ακολουθούν τη σειρά render, ώστε κάθε document να μπορεί να διαβαστεί φωναχτά - Συγχρονισμένο reading highlight στο
TPdfView: ταSetReadingHighlight,ClearReadingHighlightκαι το δημοσιευμένοReadingHighlightColorεπισημαίνουν το block που διαβάζεται αυτή τη στιγμή, πάνω από τα overlays αναζήτησης και επιλογής - Νέοι δημόσιοι τύποι
TPdfContentFragment,TPdfContentFragments,TPdfReadableContent,TPdfContentFragmentKindκαιTPdfReadingOrderSource, και ο νέος helperClassifyStructType
Version 1.45.0
Προστέθηκε
ValidatePdfUaπερπατά πλέον και το ζωντανό tagged structure tree και αναφέρει τρεις content violations με υψηλή βεβαιότητα που το byte-level scanning δεν μπορεί να εντοπίσει: ένα elementFigureχωρίς entry Alt ή ActualText (ISO 14289-1, 7.3), ένα elementFormulaχωρίς attribute Alt (7.7) και ένα elementNoteπου δεν έχει μοναδικό ID (7.9) Τρεις νέες τιμέςTPdfUaValidationIssueτα εκθέτουν αυτά:pvuaiFigureMissingAlt,pvuaiFormulaMissingAltκαιpvuaiNoteMissingIdΤο tree walk παραλείπεται για untagged documents- Ο νέος δημόσιος helper
ValidatePdfUaStructureElementsεφαρμόζει αυτούς τους κανόνες του structure tree σε μια flat λίστα στοιχείων (όπως επιστρέφει τοTPdf.StructureElements), ώστε οι έλεγχοι να μπορούν να τρέξουν ή να unit-testαριστούν χωρίς φόρτωση ολόκληρου εγγράφου
Version 1.44.5
Διορθώθηκε
- Ο έλεγχος embedding γραμματοσειρών του
ValidatePdfA(pvaiFontNotEmbedded, ISO 19005-1, 6.3.4) εντοπίζει πλέον και απλές γραμματοσειρές που δεν είναι ενσωματωμένες και δεν έχουν/FontDescriptor, κυρίως τις 14 standard Type 1 γραμματοσειρές (Helvetica, Times, Courier κ.ο.κ.) που το PDF/A απαιτεί να ενσωματώνονται χωρίς εξαίρεση Παλαιότερα μια τέτοια γραμματοσειρά περνούσε απαρατήρητη Ο έλεγχος μετρά πλέον και τα simple-font dictionaries (/Type1,/TrueType,/MMType1) απέναντι στα embedded font programs, ακολουθώντας τη διόρθωση PDF/UA στο 1.44.3
Version 1.44.4
Διορθώθηκε
ValidatePdfVTαπορρίπτει πλέον κακοσχηματισμένα ISO 16612-2 §6.5 DPart trees όπου το/DPartsείναι flat reference array αντί για το απαιτούμενο array of arrays, ή όπου ένα leaf DPart επαναλαμβάνει τη σελίδα/Startως/Endπαρότι το εύρος περιέχει μόνο μία σελίδαValidatePdfVTεπικυρώνει πλέον τα ονόματα/NodeNameListως XML NMTOKEN values μετά την επέκταση των PDF name#xxescapes, ώστε τα άκυρα ονόματα επιπέδου ιεραρχίας να αναφέρονται μέσωpvviMissingDPartRootαντί να γίνονται αποδεκτά ως χρήσιμη DPart structure
Version 1.44.3
Διορθώθηκε
- Ο έλεγχος embedding γραμματοσειρών του
ValidatePdfUa(pvuaiFontNotEmbedded, ISO 14289-1, 7.21.4) εντοπίζει πλέον και απλές γραμματοσειρές που δεν είναι ενσωματωμένες και δεν έχουν/FontDescriptor, κυρίως τις 14 standard Type 1 γραμματοσειρές (Helvetica, Times, Courier κ.ο.κ.) για τις οποίες το PDF/UA δεν δίνει καμία εξαίρεση embedding Παλαιότερα μια τέτοια γραμματοσειρά περνούσε απαρατήρητη και ένα έγγραφο που τη χρησιμοποιούσε μπορούσε να αναφερθεί ως συμβατό Ο έλεγχος μετρά πλέον και τα simple-font dictionaries (/Type1,/TrueType,/MMType1) απέναντι στα embedded font programs
Version 1.44.2
Διορθώθηκε
ValidatePdfVTαφήνει πλέον έναν markerpdfvtid:GTS_PDFVTVersionπου υπάρχει αλλά δεν αναγνωρίζεται ωςpvcUnknownαντί να τον υποβιβάζει σεpvcNoneΑυτό διατηρεί διακριτές τις άκυρες file-level συμβολοσειρές όπωςPDF/VT-2sαπό έγγραφα που δεν φέρουν κανένα PDF/VT marker Το PDF/VT-2s αναγνωρίζεται από την κεφαλίδα MIME stream στο ISO 16612-2 Annex A, όχι από τον XMP marker ενός PDF file- Ο έλεγχος
/DPartRootεπικυρώνει πλέον πιο αυστηρά τη σημασιολογία του tree του ISO 16612-2 §6.5: το/DPartRootNodeκαι το/NodeNameListπρέπει να περιγράφουν το πραγματικό DPart depth, οι συνδέσεις γονέα των DPart πρέπει να σχηματίζουν δέντρο, τα/Startκαι/DPartsείναι αμοιβαία αποκλειόμενα και κάθε page/DPartπρέπει να δείχνει στο leaf DPart που την καλύπτει με την ίδια depth-first σειρά όπως το page tree
Version 1.44.1
Διορθώθηκε
SaveAsPdfVTγράφει πλέον μια ελάχιστη ISO 16612-2 §6.5 Document Part Hierarchy όταν το source PDF δεν έχει χρησιμοποιήσιμο/DPartRootΤο παραγόμενο tree συνδέει κάθε σελίδα μέσω/DPart, διατηρεί μια ήδη έγκυρη ιεραρχία και αφήνει πλουσιότερα recipient/DPM metadata στο calling workflowValidatePdfVTεπικυρώνει πλέον τη χρησιμοποιήσιμη DPart structure, διαβάζει PDF/VT XMP values τόσο από RDF attributes όσο και από element text και επιβάλλει το ακριβές ζευγάρωμα PDF/VT προς PDF/X base: το PDF/VT-1 απαιτεί PDF/X-4, ενώ το PDF/VT-2 απαιτεί PDF/X-4p, PDF/X-5g ή PDF/X-5pg- Το
TPdfVTSaveOptions.Conformance = pvc2δεν γράφει πλέον άκυρα single-file PDF/VT-2 markers Ο writer για single-file κανονικοποιεί την έξοδο σε PDF/VT-1 επειδή το PDF/VT-2 απαιτεί file-set semantics
Version 1.44.0
Προστέθηκε
ValidatePdfUaαναφέρει πλέον και byte-checkable violations σε επίπεδο περιεχομένου PDF/UA, πέρα από τους markers του file format: ένα font program που δεν είναι embedded (ISO 14289-1, 7.21.4), μια γραμματοσειρά που δεν έχει CMap/ToUnicodeόταν δεν υπάρχει εξαιρούμενο simple-font encoding (7.21.7) και ένα έγγραφο που φέρει annotations αλλά δεν δηλώνει tab order σελίδας/Tabs /S(7.18.3)- Τρεις νέες τιμές
TPdfUaValidationIssue—pvuaiFontNotEmbedded,pvuaiFontMissingToUnicodeκαιpvuaiMissingTabsOrder— εμφανίζονται από τοValidatePdfUaκαι στο preflight report Είναι χονδρικές heuristics που προορίζονται ως προτροπές preflight και όχι ως πλήρης επαλήθευση ISO 14289-1
Version 1.43.1
Διορθώθηκε
SaveAsPdfUaεπιβάλλει πλέον τα υποχρεωτικά catalog entries του ISO 14289-1, 7.1/ViewerPreferences/DisplayDocTitle trueκαι/MarkInfo/Marked true/Suspects falseακόμη κι όταν το source document ήδη παρέχει αυτά τα dictionaries με λείπουσες ή αντικρουόμενες τιμές Παλαιότερα τα markers εισάγονταν μόνο όταν τα dictionaries έλειπαν εντελώς, οπότε ένα source που είχε, για παράδειγμα,/ViewerPreferencesχωρίςDisplayDocTitleή/MarkInfoμε/Marked falseγύριζε σε μη συμβατό αρχείο- Τα υπάρχοντα keys σε ήδη υπάρχον
/ViewerPreferencesή/MarkInfodictionary διατηρούνται και ένα dictionary που δίνεται ως indirect reference επιλύεται πριν εφαρμοστούν τα υποχρεωτικά keys
Version 1.43.0
Προστέθηκε
- Το
ValidatePdfAεφαρμόζει πλέον τους κανόνες PDF/A-2 / PDF/A-3 για embedded και associated files και για Level U text Τα embedded files εξακολουθούν να απορρίπτονται για PDF/A-1 για το PDF/A-3 ένα embedded file που δεν έχει το απαιτούμενο key/AFRelationship(ISO 19005-3 Annex E) επισημαίνεται, ενώ τα PDF/A-2 attachments επιτρέπονται (η δική τους συμμόρφωση δεν επαληθεύεται αναδρομικά) Ένα νέο issuepvaiUnicodeMappingMissingαναφέρει ένα PDF/A-2u ή PDF/A-3u document του οποίου οι γραμματοσειρές δεν φέρουν mapping/ToUnicode(ISO 19005-2 6.2.11.7) Η transparency και το 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Η enumerationTPdfAConformanceαποκτά ταpac2a,pac2u,pac3aκαιpac3u(το PDF/A-1 δεν έχει Level u) Η αποθήκευση γράφει τα αντίστοιχαpdfaid:part(2 ή 3) καιpdfaid:conformance(A, B ή U), διατηρώντας το OutputIntent subtypeGTS_PDFA1που το ISO 19005-2 κρατά για λόγους συμβατότητας Μια αίτηση για Level A εξακολουθεί να υποβαθμίζεται στο αντίστοιχο Level B (για οποιοδήποτε part) όταν το έγγραφο δεν έχει τη tagged structure που απαιτεί εκείνο το επίπεδο
Version 1.41.0
Προστέθηκε
- Το
ValidatePdfAεντοπίζει πλέον violations σε επίπεδο περιεχομένου PDF/A που η εισαγωγή markers δεν μπορεί να διορθώσει, πάνω από τα structural markers που ήδη ανέφερε: JavaScript και άλλες απαγορευμένες ενέργειες, additional-actions (/AA), embedded files,LZWDecode, transparency (soft masks και transparency groups), optional content (/OCProperties), απαγορευμένα annotation subtypes (FileAttachment, Sound, Movie, 3D, Screen), AcroForm/NeedAppearances trueκαι/XFA, γραμματοσειρές των οποίων τα descriptors δεν έχουν embedded font program, και μια δήλωση Level A χωρίς τη tagged structure που απαιτεί το ISO 19005-1 6.8 Η transparency, το optional-content και ο έλεγχος embedded-file ισχύουν μόνο για PDF/A-1 (αυτά τα χαρακτηριστικά επιτρέπονται στα PDF/A-2 και PDF/A-3) Νέες τιμέςTPdfAValidationIssueεκθέτουν κάθε περίπτωση οι υπάρχουσες τιμές παραμένουν ίδιες
Version 1.40.3
Διορθώθηκε
- Το
SaveAsPdfAαφαιρεί πλέον κάθε encryption του source document πριν παράγει έξοδο PDF/A Το ISO 19005-1 6.1.3 απαγορεύει το trailer key/Encrypt, αλλά η διαδρομή αποθήκευσης παλαιότερα διατηρούσε το security handler του source, οπότε η αποθήκευση ενός κρυπτογραφημένου εγγράφου ως PDF/A παρήγαγε κρυπτογραφημένο, μη συμβατό αρχείο Η αποθήκευση PDF/A αποκρυπτογραφεί πλέον πρώτα το έγγραφο Τα μη κρυπτογραφημένα έγγραφα δεν επηρεάζονται
Version 1.40.2
Διορθώθηκε
- Το
SaveAsPdfAσταματά πλέον να εκπέμπει ψευδή δήλωση συμμόρφωσης PDF/A Level A Όταν ζητείται Level A (pac1a) αλλά το source document δεν έχει τα markers tagged-structure που απαιτεί το ISO 19005-1 6.8 — ένα/StructTreeRootστο catalog και ένα dictionary/MarkInfoμε/Marked true— το αποθηκευμένο αρχείο αναγνωρίζεται πλέον ως το αντίστοιχο Level B (pdfaid:conformance=B) αντί να δηλώνεται Level A Η καθαρά οπτική έξοδος PDF/A-1b δεν επηρεάζεται
Version 1.40.1
Διορθώθηκε
- Σφίχτηκε η επικύρωση συμβατότητας έκδοσης PDF ώστε η ενέργεια
SetOCGState(set-optional-content-group-state) να αναγνωρίζεται ως feature του PDF 1.5 Η αποθήκευση σε target PDF 1.2, 1.3 ή 1.4 που περιέχει ενέργειαSetOCGStateαπορρίπτεται πλέον ώστε να ταιριάζει με το ISO 32000-1 (Table 198) παλαιότερα μια τέτοια ενέργεια μπορούσε να περάσει σε έξοδο χαμηλότερης έκδοσης Η ξεχωριστή, παρωχημένη ενέργεια PDF 1.2SetStateεξακολουθεί να γίνεται αποδεκτή από το PDF 1.2 και μετά
Version 1.40.0
Προστέθηκε
- Δεσμεύτηκε το upstream API
FPDFPageObj_AddExistingMark(), που συνδέει ένα υπάρχον content mark σε ένα page object Όταν διαδοχικά page objects μοιράζονται το ίδιο mark, το αποθηκευμένο PDF τα συμπτύσσει σε ένα ενιαίο mark που τα καλύπτει όλα μη διαδοχικά objects λαμβάνουν ξεχωριστά αντίγραφα - Δεσμεύτηκε το upstream API
FPDFTextObj_SetFontSize()για αλλαγή του μεγέθους σημείων ενός υπάρχοντος text object, συμπληρώνοντας το ήδη υπάρχον bindingFPDFTextObj_GetFontSize()
Τροποποιήθηκε
- Ανανεώθηκαν οι bundled PDFium runtime DLLs (Win32 και Win64, standard και V8 builds) στο upstream snapshot της 2026-06-02
Version 1.39.53
Τροποποιήθηκε
- Τα demos Delphi
PDFViewer,SplitViewκαιMultiPageViewerανοίγουν πλέον τα έγγραφα από προεπιλογή σε λειτουργίαZoom to Page - Η αρχική απόδοση χωρά πλέον ολόκληρη τη σελίδα στην επιφάνεια του viewer πριν ο χρήστης επιλέξει χειροκίνητο επίπεδο zoom
- Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.53
Version 1.39.52
Τροποποιήθηκε
- Βελτιώθηκε το
Demo\Lazarus\CreatePDFώστε το εισαγωγικό δείγμα να παράγει πλέον ένα PDF δύο σελίδων με vector paths, περιεχόμενο πίνακα, ενσωματωμένη εικόνα, text annotation, περιστραμμένο κείμενο και σαφέστερη περιήγηση στη δημιουργία εγγράφου - Προστέθηκαν καλοδουλεμένες σελίδες
README.htmlγια κάθε φάκελο demo των Delphi, C++Builder και Lazarus, αντικαθιστώντας το υπόλοιπο text-only demo README με έναν οδηγό που διαβάζεται σε browser - Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.52
Version 1.39.51
- Βελτιώθηκαν οι batch summaries του
Demo\Delphi\PreflightReportCliμε totals κατάστασης για Pass, Action required και Review αποτελέσματα στα επιλεγμένα standards - Οι per-file γραμμές περιλαμβάνουν πλέον counts για action-required και review στα TXT / HTML / JSON / CSV summaries, κάνοντας τα CI artifacts ευκολότερα στην επιθεώρηση χωρίς άνοιγμα κάθε παραγόμενης αναφοράς
- Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.51
Version 1.39.50
- Βελτιώθηκε η λειτουργία batch σε φάκελο του
Demo\Delphi\PreflightReportCliώστε τοbatchdir=folderνα συλλέγει τα PDF paths που βρέθηκαν, να τα ταξινομεί και στη συνέχεια να δημιουργεί αναφορές με σταθερή σειρά - Οι αναδρομικές σαρώσεις καταλόγων παράγουν πλέον αναπαραγώγιμη σειρά αναφορών και summary rows, ενώ η ρητή επεξεργασία
batch=list.txtσυνεχίζει να διατηρεί τη σειρά του list file - Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.50
Version 1.39.49
- Βελτιώθηκαν οι batch summaries του
Demo\Delphi\PreflightReportCliώστε να καταγράφουν ρυθμίσεις εκτέλεσης: είδος πηγής, path πηγής, recursive κατάσταση, κατάλογο εξόδου, format αναφοράς, επιλεγμένα standards και λειτουργίαfailon= - Οι JSON summaries περιλαμβάνουν πλέον ένα object
run, οι TXT και HTML summaries δείχνουν μια ενότητα ρυθμίσεων εκτέλεσης και οι CSV γραμμές επαναλαμβάνουν τις ίδιες audit στήλες για spreadsheet και CI pipelines - Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.49
Version 1.39.48
- Βελτιώθηκε η ονομασία εξόδου batch του
Demo\Delphi\PreflightReportCliώστε τα διπλά input file names που μοιράζονται έναoutdir=να μην αντικαθιστούν πλέον ο ένας τις παραγόμενες αναφορές του άλλου - Οι batch εκτελέσεις προσθέτουν πλέον καταλήξεις
-2,-3και μεταγενέστερες όταν ένα path παραγόμενης αναφοράς έχει ήδη αποδοθεί στην ίδια εκτέλεση και τα summaries καταγράφουν το τελικό collision-safe path αναφοράς - Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.48
Version 1.39.47
- Βελτιώθηκαν οι batch summaries του
Demo\Delphi\PreflightReportCliώστε οι έξοδοι TXT και JSON να περιλαμβάνουν πλέον συγκεντρωτικά totals για total files, processed files, failed files, issues και αντιστοιχίεςfailon= - Οι CSV summaries παραμένουν ένας καθαρός row table για τους υπάρχοντες καταναλωτές, ενώ οι HTML summaries συνεχίζουν να δείχνουν τα ίδια aggregate metrics στο dashboard header
- Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.47
Version 1.39.46
- Βελτιώθηκε το
Demo\Delphi\PreflightReportCliμεsummary=batch.html/.htmώστε οι batch εκτελέσεις να μπορούν να εκπέμπουν ένα dashboard αναγνώσιμο σε browser μαζί με TXT / CSV / JSON manifests - Οι HTML summaries δείχνουν metrics για total, processed, failed, issue και αντιστοιχίες
failon=, και στη συνέχεια παραθέτουν κάθε input με links αναφοράς, κατάσταση, counts και κείμενο σφάλματος - Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.46
Version 1.39.45
- Βελτιώθηκε το
Demo\Delphi\PreflightReportCliμεbatchdir=folderκαιrecursiveώστε τα scripts να μπορούν να σαρώσουν PDF φακέλους απευθείας χωρίς πρώτα να γράφουν list file - Η λειτουργία batch σε κατάλογο επαναχρησιμοποιεί τη συμπεριφορά
outdir=,summary=,standards=καιfailon=από τη list-based batch λειτουργία, ενώ οι μη αναδρομικές σαρώσεις περιορίζονται στον επιλεγμένο φάκελο και τοrecursiveπεριλαμβάνει υποφακέλους - Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.45
Version 1.39.44
- Βελτιώθηκε το
Demo\Delphi\PreflightReportCliμεsummary=batch.csv|json|txtώστε οι batch εκτελέσεις να μπορούν να εκπέμπουν ένα machine-readable manifest δίπλα στις per-file αναφορές - Τα batch summaries περιλαμβάνουν κάθε input path, report path, κατάσταση, standard count, passed count, issue count, state αντιστοιχίας
failon=και κείμενο σφάλματος για CI jobs και external scripts - Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.44
Version 1.39.43
- Βελτιώθηκε το
Demo\Delphi\PreflightReportCliμεbatch=list.txtκαιoutdir=reportsώστε τα scripts να μπορούν να δημιουργούν preflight reports για μια λίστα PDF αρχείων σε μία εκτέλεση - Η λειτουργία batch παραλείπει κενές γραμμές και γραμμές σχολίων
#, παράγει το όνομα κάθε.preflight.<ext>report από το input PDF, συνεχίζει μετά από σφάλματα ανά αρχείο και συνοψίζει τα processed και failed αρχεία πριν επιστρέψει - Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.43
Version 1.39.42
- Βελτιώθηκε το
Demo\Delphi\PreflightReportCliμεfailon=none|issues|action|reviewώστε τα CI jobs να μπορούν να μετατρέπουν τα παραγόμενα preflight αποτελέσματα σε deterministic exit codes - Το CLI επιστρέφει πλέον exit code 2 όταν ένα επιλεγμένο rule
failon=ταιριάζει αφού παραχθεί το αρχείο αναφοράς και το προαιρετικό attached-report PDF, ενώ τα runtime errors εξακολουθούν να επιστρέφουν exit code 1 - Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.42
Version 1.39.41
- Βελτιώθηκε το
Demo\Delphi\PreflightReportCliμεattach=output.pdfώστε μια παραγόμενη preflight report να μπορεί να ενσωματωθεί ως document-level attachment σε ένα νέο αντίγραφο PDF - Το CLI κρατά το παραγόμενο TXT / HTML / Markdown / JSON / CSV report file στον δίσκο και αρνείται να το ξαναεπισυνάψει στο αρχικό input PDF path, μειώνοντας τον κίνδυνο τυχαίας αντικατάστασης
- Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.41
Version 1.39.40
- Προστέθηκε το
Demo\Delphi\PreflightReportCli, ένα Delphi console companion για scriptable παραγωγήFPdfPreflightReportχωρίς άνοιγμα viewer - Το CLI υποστηρίζει δημιουργία δείγματος χωρίς ορίσματα μαζί με input / output ορίσματα, προαιρετικό password, formats εξόδου
text/html/md/json/csvκαι φιλτράρισμαstandards=για PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R και PDF/VT - Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.40
Version 1.39.39
- Βελτιώθηκε το
FPdfPreflightReportμε ταTPdfPreflightReport.ToMarkdownκαιSaveMarkdownToFileώστε οι preflight reports να μπορούν να εξάγονται ως Markdown φιλικό προς issue trackers - Ενημερώθηκαν τα demos
PreflightReportτων Delphi, C++Builder και Lazarus με εναλλαγή preview Markdown και ενέργειες Save MD δίπλα στο υπάρχον workflow TXT / HTML / JSON / CSV - Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.39
Version 1.39.38
- Βελτιώθηκαν τα δείγματα
SecurityAuditτων Delphi, C++Builder και Lazarus με εξαγωγή JSON audit report δίπλα στο υπάρχον workflow TXT save / copy - Το JSON report περιέχει
format,generatedAt,summary,findingCountκαι δομημένες γραμμέςfindingsμε πεδία severity, area και detail - Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.38
Version 1.39.37
- Βελτιώθηκε το
FPdfPreflightReportμε ταTPdfPreflightReport.ToCsvκαιSaveCsvToFileώστε οι preflight reports να μπορούν να εξάγονται ως CSV φιλικό προς spreadsheet - Ενημερώθηκαν τα demos
PreflightReportτων Delphi, C++Builder και Lazarus με εναλλαγή preview CSV και ενέργειες Save CSV δίπλα στο υπάρχον workflow TXT / HTML / JSON - Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.37
Version 1.39.36
- Βελτιώθηκε το
FPdfPreflightReportμε τοTPdfPreflightReport.IssueCategoryCountsμαζί με επαναχρησιμοποιήσιμους τύπουςTPdfPreflightIssueCategoryCountκαιTPdfPreflightIssueCategoryCountsγια συγκέντρωση των issues σε επίπεδο marker ανά κατηγορία - Ενημερώθηκαν τα
TPdfPreflightReport.ToText,ToHtmlκαιToJsonώστε η παραγόμενη έξοδος PreflightReport να περιλαμβάνει summaries counts κατηγοριών issues δίπλα στις per-standard γραμμές και στις λεπτομερείς συστάσεις issues - Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.36
Version 1.39.35
- Μετονομάστηκε το διευρυμένο sample
PrintDialogσεPrintPreferencesσε Delphi, C++Builder και Lazarus ώστε το όνομα του demo να ταιριάζει πλέον με τις PDF author print preferences, το N-up printing, το odd / even filtering, το grayscale, το cell border και το duplex mapping workflow - Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.35
Version 1.39.34
- Βελτιώθηκε το
Demo\Delphi\PrintPDFμε φόρτωση PDF μέσω drag-and-drop και τεκμηριώθηκε το υπάρχον workflow τουDemo\CBuilder\PrintPDFδίπλα στα Delphi και Lazarus PrintPDF samples - Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.34
Version 1.39.33
- Προστέθηκε το
Demo\CBuilder\SplitView, ολοκληρώνοντας το matrix του sample SplitView σε Delphi, C++Builder και Lazarus - Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.33
Version 1.39.32
- Προστέθηκε το
Demo\Lazarus\SplitView, φέρνοντας το side-by-side PDF comparison στο Lazarus με διατάξεις δύο ή τριών panes, πλοήγηση ενεργής προβολής, συγχρονισμένες εντολές, presets zoom και περιστροφή - Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.32
Version 1.39.31
- Προστέθηκε το
Demo\Lazarus\PrintPDF, φέρνοντας το τυπικό workflow εκτύπωσης PDF στο Lazarus με πλοήγηση preview, page ranges, copies, collate mode, progress και ακύρωση - Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.31
Version 1.39.30
- Προστέθηκε το
Demo\Lazarus\FontProperties, ολοκληρώνοντας το matrix του sample FontProperties σε Delphi, C++Builder και Lazarus - Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.30
Version 1.39.29
- Προστέθηκε το
Demo\CBuilder\FontProperties, φέρνοντας την επιθεώρηση indexed character και font metadata στο C++Builder δίπλα στο Delphi sample - Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.29
Version 1.39.28
- Προστέθηκε το
Demo\Delphi\ExtractTextPages, ολοκληρώνοντας το matrix του sample εξαγωγής κειμένου ανά σελίδα σε Delphi, C++Builder και Lazarus - Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.28
Version 1.39.27
- Προστέθηκε το
Demo\Lazarus\PrintDialog, ολοκληρώνοντας το matrix του sample PrintDialog σε Delphi, C++Builder και Lazarus - Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.27
Version 1.39.26
- Προστέθηκε το
Demo\CBuilder\PrintDialog, φέρνοντας το workflow N-up printing και PDF author print preferences στο C++Builder δίπλα στο Delphi sample - Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.26
Version 1.39.25
- Προστέθηκε το
Demo\CBuilder\ViewerInteractionLab, ολοκληρώνοντας το matrix του sample ViewerInteractionLab σε Delphi, C++Builder και Lazarus - Ενημερώθηκε το workflow build της βιβλιοθήκης και τα Win64 C++Builder package outputs ώστε οι μέθοδοι viewer interaction του
TPdfViewνα συνδέονται σωστά στα Win64 demos - Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.25
Version 1.39.24
- Προστέθηκε το
Demo\Lazarus\ViewerInteractionLab, φέρνοντας το εστιασμένο workflow αλληλεπίδρασης προβολής στο Lazarus δίπλα στο Delphi sample - Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.24
Version 1.39.23
- Προστέθηκε το
Demo\Lazarus\SearchAndSelect, ολοκληρώνοντας το matrix του sample SearchAndSelect σε Delphi, C++Builder και Lazarus - Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.23
Version 1.39.22
- Προστέθηκαν τα
Demo\CBuilder\ContentExtractionLabκαιDemo\Lazarus\ContentExtractionLab, φέρνοντας το workflow εξαγωγής περιεχομένου πολλών κατηγοριών σε όλα τα υποστηριζόμενα demo IDEs - Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.22
Version 1.39.21
- Βελτιώθηκαν τα
Demo\Delphi\PreflightReport,Demo\Lazarus\PreflightReportκαιDemo\CBuilder\PreflightReportμε selector format προεπισκόπησης, ώστε οι χρήστες να μπορούν να ελέγχουν την έξοδο text ή JSON πριν αποθηκεύσουν τις αναφορές - Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.21
Version 1.39.20
- Προστέθηκε εξαγωγή JSON στο
FPdfPreflightReportμέσω τωνTPdfPreflightReport.ToJsonκαιSaveJsonToFile, παράγοντας machine-readable summaries, status / priority ανά standard, επόμενες ενέργειες και λεπτομέρειες issues - Ενημερώθηκαν τα
Demo\Delphi\PreflightReport,Demo\Lazarus\PreflightReportκαιDemo\CBuilder\PreflightReportμε ενέργειες Save JSON δίπλα στην εξαγωγή TXT / HTML - Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.20
Version 1.39.19
- Βελτιώθηκε το
FPdfPreflightReportμεTPdfPreflightStatus, κατηγορίες issues, προτεραιότητα ανά standard και καθοδήγηση επόμενης ενέργειας στις αναφορές TXT / HTML - Ενημερώθηκαν τα
Demo\Delphi\PreflightReport,Demo\Lazarus\PreflightReportκαιDemo\CBuilder\PreflightReportώστε να δείχνουν status, priority, issue count και next action στο summary grid - Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.19
Version 1.39.18
- Προστέθηκε το
Demo\Lazarus\SecurityAudit, ολοκληρώνοντας το matrix των demos σε Delphi, C++Builder και Lazarus για το workflow ελέγχου επιφάνειας κινδύνου PDF μόνο για ανάγνωση - Το δείγμα Lazarus απαριθμεί permissions, attachments, JavaScript actions, URI / Launch link annotations, web links, signatures, κατάσταση XFA, διαθεσιμότητα βοηθητικών V8 / XFA και unsupported-feature callbacks, και έπειτα αποθηκεύει ή αντιγράφει τη λίστα ευρημάτων ως αναφορά TXT
- Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.18
Version 1.39.17
- Προστέθηκε το
Demo\CBuilder\SecurityAudit, φέρνοντας το workflow ελέγχου επιφάνειας κινδύνου PDF μόνο για ανάγνωση στο C++Builder δίπλα στο υπάρχον δείγμα Delphi - Το δείγμα C++Builder απαριθμεί permissions, attachments, JavaScript actions, URI / Launch link annotations, web links, signatures, κατάσταση XFA, διαθεσιμότητα βοηθητικών V8 / XFA και unsupported-feature callbacks, και έπειτα αποθηκεύει ή αντιγράφει τη λίστα ευρημάτων ως αναφορά TXT
- Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.17
Version 1.39.16
- Προστέθηκε το
Demo\CBuilder\SearchAndSelect, φέρνοντας το αυτόνομο workflow viewer του SearchAndSelect στο C++Builder δίπλα στο υπάρχον δείγμα Delphi - Το δείγμα C++Builder δημιουργεί ή ανοίγει PDFs, παραθέτει matches σε όλες τις σελίδες με previews page / character-index, υποστηρίζει πλοήγηση Previous / Next και double-click, και επισημαίνει τα matches της τρέχουσας σελίδας με
HighlightSearchText - Εκθέτει επίσης τα
AllowUserTextSelection,SelectedText,SelectAll,CopySelectionToClipboard,ClearSelection,OnSelectionChangeκαι τις επιλογές spreadDisplayModeτο version metadata αναφέρει πλέον 1.39.16
Version 1.39.15
- Προστέθηκε το
Demo\CBuilder\WatermarkStamp, ολοκληρώνοντας το matrix των demos σε Delphi, Lazarus και C++Builder για επαναχρησιμοποιήσιμα workflows watermark και stamp Form XObject - Το δείγμα C++Builder δημιουργεί target και stamp PDFs, επαναχρησιμοποιεί τη σελίδα stamp μέσω
CreateXObjectFromPage, εφαρμόζει transformsTPdfMatrixκαι αποθηκεύει κεντραρισμένα watermarks, corner stamps και labels αριθμών σελίδας - Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.15
Version 1.39.14
- Προστέθηκε το
Demo\Lazarus\WatermarkStamp, φέρνοντας το επαναχρησιμοποιήσιμο workflow watermark και stamp Form XObject στο Lazarus - Το δείγμα Lazarus δημιουργεί target και stamp PDFs, επαναχρησιμοποιεί τη σελίδα stamp μέσω
CreateXObjectFromPage, εφαρμόζει transformsTPdfMatrixκαι αποθηκεύει κεντραρισμένα watermarks, corner stamps και labels αριθμών σελίδας - Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.14
Version 1.39.13
- Προστέθηκε το
Demo\CBuilder\PreflightReport, ολοκληρώνοντας το matrix των demos σε Delphi, Lazarus και C++Builder για το επαναχρησιμοποιήσιμο workflowFPdfPreflightReport - Το δείγμα C++Builder χρησιμοποιεί το
FPdfPreflightReport.hppγια να παράγει standard summaries, προεπισκοπήσεις TXT report, αρχεία αναφοράς TXT / HTML και συμπεριφορά Open Last Report - Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.13
Version 1.39.12
- Προστέθηκε το
Demo\Lazarus\PreflightReport, φέρνοντας το workflow preflight report για PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R και PDF/VT στο Lazarus - Το δείγμα Lazarus μπορεί να ανοίγει ή να δημιουργεί ένα PDF, να επιλέγει target standards, να προεπισκοπεί summary rows και έξοδο TXT report, να αποθηκεύει αναφορές TXT / HTML και να ανοίγει την πιο πρόσφατα αποθηκευμένη αναφορά
- Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.12
Version 1.39.11
- Βελτιώθηκε το
Demo\Delphi\SearchAndSelectμε μια λίστα αποτελεσμάτων αναζήτησης για όλες τις σελίδες που καταγράφει αριθμό σελίδας, δείκτη χαρακτήρων και κείμενο προεπισκόπησης - Προστέθηκε πλοήγηση Previous / Next για matches και μετάβαση αποτελέσματος με double-click, διατηρώντας τη συμπεριφορά
HighlightSearchTextστην τρέχουσα σελίδα - Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.11
Version 1.39.10
- Βελτιώθηκε το
Demo\Delphi\SecurityAuditμε ενέργειες Save Report και Copy Report που εξάγουν το τρέχον summary και τις γραμμές ευρημάτων ως TXT audit report - Το demo καθαρίζει πλέον το report export state όταν γίνεται reset του audit panel, κρατώντας τις αναφορές που έχουν αντιγραφεί ή αποθηκευτεί ευθυγραμμισμένες με τα ορατά ευρήματα
- Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.10
Version 1.39.9
- Βελτιώθηκε το
Demo\Delphi\ContentExtractionLabμε αποθήκευση source PDF, αντιγραφή report στο clipboard και ενέργειες επιλογής all / none κατηγοριών - Το demo ακυρώνει πλέον την τρέχουσα αναφορά όταν αλλάζουν οι επιλογές κατηγοριών, ώστε οι εξαγωγές TXT / JSON να αντικατοπτρίζουν το ορατό scope εξαγωγής
- Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.9
Version 1.39.8
- Προστέθηκε το
Demo\Delphi\ContentExtractionLab, ένα ενιαίο sample workflow εξαγωγής περιεχομένου για document metadata, page text, page objects, images, attachments, links, annotations, bookmarks και metrics γραμματοσειρών / χαρακτήρων - Το δείγμα μπορεί να ανοίξει ένα υπάρχον PDF ή να δημιουργήσει ένα συνθετικό PDF με περιεχόμενο κειμένου, εικόνας, attachment και annotation, και έπειτα να παράγει summary rows και λεπτομερείς αναφορές TXT / JSON
- Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.8
Version 1.39.7
- Προστέθηκε το
Lib\FPdfPreflightReport.pas, ένας επαναχρησιμοποιήσιμος report helper που τυλίγει ταValidatePdfA,ValidatePdfUa,ValidatePdfE,ValidatePdfX,ValidatePdfRκαιValidatePdfVTσε ένα αντικείμενοTPdfPreflightReport - Προστέθηκε το
Demo\Delphi\PreflightReport, ένα workflow sample που ανοίγει ή δημιουργεί ένα PDF, επιλέγει target standards, προεπισκοπεί summary rows και συστάσεις issues και αποθηκεύει αναφορές TXT ή HTML - Οι παραγόμενες αναφορές περιγράφουν ρητά το ενσωματωμένο όριο validation σε επίπεδο marker, ώστε οι εφαρμογές να μπορούν να τις συνδυάζουν με ειδικά εργαλεία preflight σε επίπεδο περιεχομένου όταν χρειάζεται
- Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata, οι λίστες έργων package και τα installer version metadata ώστε να αναφέρουν 1.39.7
Version 1.39.6
- Προστέθηκε το
Demo\Delphi\SearchAndSelect, ένα εστιασμένο sample workflow viewer για search highlighting, text selection, selected-text preview, αντιγραφή, καθαρισμό και λειτουργίες spread display - Το δείγμα παρουσιάζει τα
HighlightSearchText, τις επιλογές αναζήτησης match-case / whole-word, ταAllowUserTextSelection,SelectedText,SelectAll,CopySelectionToClipboardκαιClearSelectionχωρίς να προσθέτει νέο API βιβλιοθήκης - Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.6
Version 1.39.5
- Το
Demo\Delphi\ViewerInteractionLabεπεκτάθηκε σε sample viewer UX τύπου SearchAndSelect μεHighlightSearchText, επιλογές match-case / whole-word, preview επιλεγμένου κειμένου και τα υπάρχοντα controls επιλογής / clipboard - Το
Demo\Delphi\PrintDialogεπεκτάθηκε για να επιθεωρεί τις PDF author print preferences:PrintCopies,PrintPageRanges,PrintScaling,PrintPaperHandlingκαι το ορατό mapping duplex τουSetPdfPrintPaperHandlingDevMode - Προστέθηκε το
Demo\Delphi\SecurityAudit, ένα δείγμα μόνο για ανάγνωση της επιφάνειας κινδύνου που παραθέτει permissions, attachments, JavaScript document, URI / Launch links, web links, signatures, κατάσταση XFA και διαθεσιμότητα βοηθητικών V8 / XFA - Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.5
Version 1.39.4
- Προστέθηκαν τα
Demo\CBuilder\ImageToPDFκαιDemo\Lazarus\ImageToPDF, ολοκληρώνοντας το matrix του sample ImageToPDF σε Delphi, C++Builder και Lazarus - Τα νέα δείγματα παρουσιάζουν επιλογή πολλαπλών εικόνων, preview επιλεγμένης εικόνας, μία PDF σελίδα ανά εικόνα, μεγέθη σελίδας A4 portrait / landscape, κεντραρισμένη κλιμάκωση εικόνας, πρόοδο ανά εικόνα και άνοιγμα του παραγόμενου PDF μετά την αποθήκευση
- Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.4
Version 1.39.3
- Προστέθηκε το
Demo\CBuilder\BatchExport, φέρνοντας το workflow εξαγωγής PDF σε JPG πολλών αρχείων στο C++Builder δίπλα στα υπάρχοντα δείγματα Delphi και Lazarus - Το δείγμα παρουσιάζει τα
LoadCustomDocument,IPdfCancellationTokenSource, είσοδο streamingTFileStream, πρόοδο ανά αρχείο και ανά σελίδα, διαχείριση ακύρωσης, inputs DPI / quality / password και άνοιγμα του φακέλου εξόδου μετά την ολοκλήρωση - Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.3
Version 1.39.2
- Προστέθηκε το
Demo\Delphi\WatermarkStamp, ένα εκτελέσιμο sample workflow Form XObject που δημιουργεί ένα target PDF και ένα επαναχρησιμοποιήσιμο stamp PDF και έπειτα εφαρμόζει κεντραρισμένα watermarks, πάνω δεξιά stamps και labels αριθμών σελίδας σε κάθε σελίδα - Το δείγμα παρουσιάζει τα
CreateXObjectFromPage,InsertFormObjectFromXObject,TPdfMatrixκαιFPDFPageObj_SetMatrixχωρίς να προσθέτει νέο API βιβλιοθήκης - Το
Docs\en-us\Examples.htmlενημερώθηκε ώστε να χρησιμοποιεί το τρέχον patternTPdfMatrix.Handleόταν περνά matrices στοFPDFPageObj_SetMatrix - Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.2
Version 1.39.1
- Προστέθηκε το
Demo\Delphi\ViewerInteractionLab, ένα εστιασμένο sampleTPdfViewγια display modes, fit modes, χρώματα σελίδας, περιστροφή, επιλογή κειμένου χρήστη, ενέργειες clipboard και ανατροφοδότηση συντεταγμένωνDeviceToPage - Προστέθηκαν τα
Demo\CBuilder\StandardsLab/Demo\Lazarus\StandardsLabώστε οι χρήστες Lazarus να μπορούν να τρέχουν το workflow validation και marker-output για PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R και PDF/VT - Καταγράφηκαν οι μονάδες standards στα
Lib\37.0\PDFiumPas.dprojκαιLib\FPC\PDFiumLaz.lpkκαι διορθώθηκε το build του Delphi sampleSplitViewμε αφαίρεση διπλού importWinapi.ShellAPI - Διορθώθηκαν blockers batch-build στα δείγματα Delphi
BatchExport,PDFViewer,MultiPageViewerκαιSplitViewχωρίς αλλαγή της runtime συμπεριφοράς τους - Διορθώθηκε η συμβατότητα batch-build των δειγμάτων C++Builder
PDFViewerκαιMultiPageViewerμε αντικατάσταση τουnullptrαπόNULLγια το τρέχον project mode - Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.1
Version 1.39.0
- Προστέθηκε το
Demo\Delphi\StandardsLab, ένα εκτελέσιμο sample workflow standards που φορτώνει ή δημιουργεί ένα PDF, εκτελεί ταValidatePdfA,ValidatePdfUa,ValidatePdfE,ValidatePdfX,ValidatePdfRκαιValidatePdfVTκαι εμφανίζει τη συμμόρφωση που εντοπίστηκε, την κατάσταση pass/fail και τα counts issues σε ένα grid - Τα κουμπιά αποθήκευσης του StandardsLab καλούν τα
SaveAsPdfA,SaveAsPdfUa,SaveAsPdfE,SaveAsPdfX,SaveAsPdfRκαιSaveAsPdfVT, κάνοντας ορατή την έξοδο markers των PDF standards χωρίς να γράφεται custom harness - Ενημερώθηκαν το
TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.0
Version 1.38.0
- Τα overlays αναζήτησης και text-selection του
TPdfViewχρησιμοποιούν πλέον πραγματικό alpha blending αντί για logical mask painting, διατηρώντας το περιεχόμενο της σελίδας κάτω από τα highlights - Προστέθηκε το
SetPdfPrintPaperHandlingDevModeγια να αντιστοιχίζει τοTPrintPaperHandlingσε τιμές WindowsDEVMODE.dmDuplex:DMDUP_SIMPLEX,DMDUP_HORIZONTALκαιDMDUP_VERTICAL - Το
TPdfView.SmoothScrollτώρα animates τις εντολές scrollbar γραμμής / σελίδας σε segments με χρονόμετρο, ενώ η παρακολούθηση του thumb παραμένει άμεση - Ενημερώθηκαν το
TPdf.AboutInfoκαι τα installer version metadata ώστε να αναφέρουν 1.38.0
Version 1.37.0
- Το
TPdfδιαθέτει πλέον ένα render lock ανά instance που σειριοποιεί τις διαδρομέςRenderPage,RenderTile,RenderPageProgressive, reload σελίδας και unload εγγράφου Η απόδοση που καθοδηγείται από worker μέσω κοινού component είναι πλέον πρακτική, ενώ οι εφαρμογές εξακολουθούν να συντονίζουν τη μεταβολή και τη διάρκεια ζωής του εγγράφου - Διορθώθηκε το zero-copy bitmap wrapper ώστε να απορρίπτει bottom-up
TBitmapDIB layouts και να πέφτει πίσω σε buffer ιδιοκτησίας PDFium πριν την αντιγραφή, εξαλείφοντας αποτυχίες stride-corruption / access-violation στα VCL render tests - Σφίχτηκε η συμπεριφορά επιλογής του
TPdfView: τοAllowUserTextSelectionφιλτράρει μόνο την είσοδο χρήστη, τα selection APIs σε επίπεδο κώδικα εξακολουθούν να σχεδιάζουν και τοSelectAllακολουθεί το πραγματικό ορατό spread ώστε η σελίδα εξωφύλλου να μην επιλέγει πλέον τη σελίδα 2 Τα tests Delphi, Lazarus και C++Builder επεκτάθηκαν ανάλογα - Ενημερώθηκαν το
TPdf.AboutInfoκαι τα installer version metadata ώστε να αναφέρουν 1.37.0
Version 1.36.0
- Ενεργοποιήθηκε η επιλογή κειμένου από τον τελικό χρήστη στο
TPdfView— η ιδιότηταAllowUserTextSelectionπου είχε κρατηθεί στη v1.17.0 πλέον οδηγεί μια πλήρη ροή drag-select. Με αριστερό κλικ σε χαρακτήρα κειμένου μπαίνετε σε λειτουργία επιλογής (hit-test auto), ενώ με αριστερό κλικ σε κενό σημείο συνεχίζει η μετακίνηση όπως πριν. Το widget form-fill κρατά την προτεραιότητα, οπότε το κλικ σε πεδίο φόρμας εξακολουθεί να εστιάζει το πεδίο αντί να ξεκινά επιλογή - Το διπλό κλικ επιλέγει τη λέξη, το τριπλό κλικ επιλέγει τη γραμμή, το
Ctrl+Aεπιλέγει την τρέχουσα σελίδα (και τις δύο σελίδες σε λειτουργίες spread), και τοCtrl+Cαντιγράφει την επιλογή στο πρόχειρο των Windows ωςCF_UNICODETEXT Shift+Left/Shift+Rightεπεκτείνει την επιλογή έναν χαρακτήρα κάθε φορά (προεκτείνοντας στη γειτονική σελίδα στη λειτουργία spread), ενώ τοShift+Home/Shift+Endεπεκτείνει έως το οπτικό άκρο της γραμμής χρησιμοποιώντας το ύψος του πλαισίου του αρχικού χαρακτήρα ως ανοχή για το line-cluster, ώστε οι γραμμές με μικτό μέγεθος γραμματοσειράς να παραμένουν σωστά ομαδοποιημένες- Όταν περνάτε πάνω από κείμενο, ο δείκτης αλλάζει σε
crIBeam· όταν βγαίνετε από το κείμενο, επανέρχεται ο προεπιλεγμένος δείκτης. Ενώ βρίσκεται σε εξέλιξη σύρσιμο επιλογής κειμένου, η μεταφορά σε νεκρή ζώνη 20 pixel σε οποιοδήποτε άκρο του viewer κάνει αυτόματη κύλιση της σελίδας (βήμα 50 ms, 16 px / βήμα, με όριο στα ίδια όρια που χρησιμοποιεί η διαδρομή pan), ώστε η επιλογή να μπορεί να επεκταθεί πέρα από το τρέχον viewport χωρίς πρώτα να απελευθερωθεί το ποντίκι - Η επιλογή ανάμεσα σε σελίδες λειτουργεί σε λειτουργίες spread (
dmTwoPageContinuous,dmTwoPageContinuousWithCover): ένα drag που ξεκινά στην αριστερή σελίδα και τελειώνει στη δεξιά επιλέγει το συνεχόμενο εύρος που καλύπτει και τις δύο. ΤοSelectedTextενώνει τα αποσπάσματα ανά σελίδα με CR/LF, ώστε το κείμενο που επιστρέφει να διαβάζεται όπως κανονικό πολυγραμμικό περιεχόμενο - Η νέα δημοσιευμένη ιδιότητα
SelectionColor(προεπιλογήclHighlight, το χρώμα επιλογής του συστήματος Windows) — ανεξάρτητη από τοHighlightColorπου χρωματίζει τα αποτελέσματα αναζήτησης με κίτρινο. Οι επισημάνσεις αναζήτησης και μια ζωντανή επιλογή με σύρσιμο μπορούν να εμφανίζονται ταυτόχρονα στην οθόνη χωρίς σύγκρουση χρωμάτων - Το νέο δημοσιευμένο συμβάν
OnSelectionChangeενεργοποιείται κάθε φορά που οι υλοποιημένες περιοχές της επιλογής αλλάζουν πραγματικά — ποτέ όταν επανεφαρμόζεται το ίδιο, ώστε οι host εφαρμογές να μπορούν να το συνδέσουν απευθείας με κείμενο γραμμής κατάστασης ή με την κατάσταση ενεργοποίησης κουμπιών χωρίς debouncing - Το νέο δημόσιο API στο
TPdfView:HasSelection,SelectionCharCount,SelectedText,ClearSelection,SelectAll,CopySelectionToClipboard. Αυτά είναι σημεία εισόδου σε επίπεδο κώδικα και λειτουργούν πάντα ανεξάρτητα από τοAllowUserTextSelection— η σημαία ελέγχει μόνο την είσοδο του χρήστη (mouse, Ctrl+C, Ctrl+A, Shift+arrows), ώστε οι kiosk hosts να μπορούν να απενεργοποιήσουν την επιλογή από τον χρήστη ενώ εξακολουθούν να φτιάχνουν κουμπιά γραμμής εργαλείων "Select All / Copy" που οδηγούν το ίδιο API - Ένα προεπιλεγμένο αναδυόμενο μενού δεξιού κλικ
Copy/复制συνδέεται αυτόματα όταν ο host δεν έχει ορίσει το δικό τουPopupMenu— το κλασικό "select text, right-click, copy" λειτουργεί αμέσως. Η λεζάντα επιλέγεται ανάμεσα σε English και Chinese από τοSysLocale.PriLangID· οι hosts που χρειάζονται πλήρη τοπική προσαρμογή ή πιο πλούσιο μενού απλώς ορίζουν το δικό τουςPopupMenuκαι το προεπιλεγμένο απενεργοποιείται - Η επιλογή καθαρίζεται αυτόματα στο
SetPdf,SetPageNumber,SetActive(False)και κατά τις μεταβάσεις τουDisplayMode, με τοOnSelectionChangeνα ενεργοποιείται ακριβώς μία φορά όταν η προηγούμενη επιλογή δεν ήταν κενή. Το υποσύστημα form-fill κρατά την προτεραιότητα — όσο επεξεργάζεται ένα πεδίο φόρμας, όλες οι συντομεύσεις πληκτρολογίου της επιλογής αναστέλλονται ώστε το πεδίο να δέχεται ταCtrl+C/Ctrl+A/Shift+arrowsγια τη δική του επιλογή - Οι επεκταμένες σουίτες παλινδρόμησης Delphi και Lazarus έφτασαν πλέον τις 202 περιπτώσεις η καθεμία, και η σουίτα C++Builder τις 159 περιπτώσεις, καλύπτοντας προεπιλεγμένες τιμές, round-trip, συμπεριφορά δημόσιου API, καθαρισμούς κατά την αλλαγή κατάστασης, σύρσιμο με ποντίκι (hit-text / hit-blank), click vs drag, εναλλαγή δρομέα 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 (το subset PDF για variable και transactional printing) Το PDF/VT βασίζεται πάνω στο PDF/X-4 — το ISO 16612-2 §6.2.1 απαιτεί κάθε αρχείο PDF/VT-1 να συμμορφώνεται επίσης με το PDF/X-4 — έτσι ο injector γράφει το πλήρες σύνολο markers PDF/X-4 (XMP
pdfxid:GTS_PDFXVersion = "PDF/X-4", Info/GTS_PDFXVersion (PDF/X-4)και/Trapped, catalog/OutputIntentsπου παραπέμπει σε dictionary OutputIntent με embedded 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 που δηλώνει και τα namespaces pdfxid και pdfvtid (NPES URIshttp://www.npes.org/pdfx/ns/id/καιhttp://www.npes.org/pdfvt/ns/id/) Το trailer φέρει έναν πίνακα/ID - Προστέθηκε το TPdf.SaveAsPdfVTToStream για in-memory έξοδο PDF/VT και μια συντομογραφία default-options
TPdf.SaveAsPdfVT(FileName)που παράγει PDF/VT-1 με το bundled sRGB IEC61966-2.1 OutputIntent (3144 bytes, ίδιο profile με τα SaveAsPdfA / SaveAsPdfX) και/Trapped /False - Προστέθηκε το TPdf.ValidatePdfVT: ελέγχει ένα ανοιχτό PDF για markers συμμόρφωσης PDF/VT (παρουσία των XMP
pdfvtid:GTS_PDFVTVersionκαιGTS_PDFVTModDate, ισότητα μεταξύpdfvtid:GTS_PDFVTModDateκαιxmp:ModifyDate, παρουσία του υποκείμενου identifierpdfxid:GTS_PDFXVersion, παρουσία catalog/DPartRootσύμφωνα με το §6.5,/OutputIntentsμε/DestOutputProfile, trailer /ID, κατάσταση κρυπτογράφησης, παρουσίαxmp:CreateDate/ModifyDate) και επιστρέφει TPdfVTValidationResult με το επίπεδο συμμόρφωσης που εντοπίστηκε και το σύνολο των issues που βρέθηκαν - Προστέθηκε η ιδιότητα 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 per §6.5) είναι δομή σε επίπεδο εφαρμογής που εξαρτάται από τη χαρτογράφηση recipient / page-range του workflow variable-data print Το SaveAsPdfVT ΔΕΝ συνθέτει tree DPart — το ValidatePdfVT εμφανίζει ένα ελλιπές/DPartRootωςpvviMissingDPartRootώστε οι callers να μπορούν να δρομολογούν αρχεία PDF/VT μέσω ξεχωριστού βήματος δημιουργίας DPart Το PDF/X-4 content-level requirements (font embedding, transparency, ICC managed color, OPI / JavaScript / Reference XObject prohibitions κ.ο.κ.) παραμένουν ευθύνη του συγγραφέα του εγγράφου και του rendering pipeline του PDFium - Ενημερώθηκε το string TPdf.AboutInfo ώστε να αναφέρει την τρέχουσα έκδοση προϊόντος
Version 1.34.0
- Προστέθηκε υποστήριξη εισαγωγής markers PDF/R-1 (ISO 23504-1:2020): το TPdf.SaveAsPdfR προάγει το τρέχον έγγραφο σε αρχείο συμβατό με PDF/R-1 (το raster-image transport subset του PDF που χρησιμοποιείται για σαρωμένα έγγραφα) Η εισαγωγή καλύπτει τις απαιτήσεις σε επίπεδο file format που μπορούν να προστεθούν με post-processing — το μοναδικό comment αναγνώρισης έκδοσης
%PDF-raster-1.0που γράφεται ανάμεσα στο trailer dictionary και στο keyword startxref (§5), το catalog dictionary περιορισμένο στο white list του §6.3 (μένουν μόνο Version / ViewerPreferences / PageLayout / PageMode / AcroForm / Metadata), το Document Information Dictionary περιορισμένο στο white list του §6.4.3 (μένουν μόνο Creator / Producer / CreationDate / ModDate), ένα catalog /Metadata XMP stream που φέρει τα τέσσερα entries του §6.4.4 Table 1 (xmp:CreatorTool / pdf:Producer / xmp:CreateDate / xmp:ModifyDate) και έναν trailer πίνακα /ID - Προστέθηκε το TPdf.SaveAsPdfRToStream για in-memory έξοδο PDF/R και μια συντομογραφία default-options
TPdf.SaveAsPdfR(FileName)για τη συνηθισμένη περίπτωση - Προστέθηκε το TPdf.ValidatePdfR: ελέγχει ένα ανοιχτό PDF για markers συμμόρφωσης PDF/R-1 (το footer comment
%PDF-raster-x.y, την έκδοση header, την απουσία /Type /ObjStm, τη συμμόρφωση του catalog white list, τη συμμόρφωση του Info dictionary white list, την παρουσία XMP metadata stream, το trailer /ID) και επιστρέφει TPdfRValidationResult με το επίπεδο συμμόρφωσης που εντοπίστηκε και το σύνολο των issues που βρέθηκαν - Προστέθηκε η ιδιότητα 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 Οι callers μπορούν να τα ορίσουν σε False για να διατηρήσουν τα source entries (η έξοδος τότε δεν θα ικανοποιεί εκείνες τις PDF/R ρήτρες, αλλά οι υπόλοιποι markers παραμένουν συνδεδεμένοι) - Οι απαιτήσεις σε επίπεδο περιεχομένου παραμένουν ευθύνη του source PDF: η δομή Contents ανά σελίδα (§6.5.1), η μορφή MediaBox
[0 0 w h](§6.5.3), οι περιορισμοί φίλτρων (§6.2.2 — μόνο FlateDecode, CCITTFaxDecode bitonal, DCTDecode 8-bit gray/RGB), η απουσία object streams (§6.2.4) και το strip layout κατά §6.6 Αυτά δεν μπορούν να επιβληθούν με post-processing — το PDF/R είναι δομικά πολύ αυστηρότερο subset από τα άλλα πρότυπα PDF/x και απαιτεί σωστή παραγωγή των source bytes Το ValidatePdfR εμφανίζει τα file-format ζητήματα που μπορεί να ανιχνεύσει αυτή η μονάδα συνδυάστε το με έναν TWAIN Working Group PDF/R validator για πλήρη έλεγχο σε επίπεδο περιεχομένου - Ενημερώθηκε το string TPdf.AboutInfo ώστε να αναφέρει την τρέχουσα έκδοση προϊόντος
Version 1.33.0
- Προστέθηκε υποστήριξη εισαγωγής markers PDF/X (ISO 15930 family): το TPdf.SaveAsPdfX προάγει το τρέχον έγγραφο σε αρχείο συμβατό με PDF/X-1a:2001, PDF/X-3:2002 ή PDF/X-4 μέσω post-processing του base PDF με incremental update Η εισαγωγή καλύπτει τις απαιτήσεις σε επίπεδο file format που μπορούν να προστεθούν με post-processing — ένα XMP metadata stream που φέρει
pdfxid:GTS_PDFXVersion(καιpdfxid:GTS_PDFXConformanceγια PDF/X-1a / PDF/X-3) μαζί με την αντίστοιχη περιγραφή pdfaExtension:schemas, ένα ξαναγραμμένο Document Information Dictionary με entries/GTS_PDFXVersion,/GTS_PDFXConformanceκαι/Trapped, ένα ενημερωμένο catalog με/OutputIntents [N 0 R]που παραπέμπει σε OutputIntent dictionary με/S /GTS_PDFXκαι embedded ICC profile, και έναν trailer πίνακα/ID - Προστέθηκε το TPdf.SaveAsPdfXToStream για in-memory έξοδο PDF/X και μια συντομογραφία default-options
TPdf.SaveAsPdfX(FileName)που παράγει PDF/X-4 με το built-in sRGB IEC61966-2.1 OutputIntent (3144 bytes, ίδιο profile με το SaveAsPdfA) - Προστέθηκε το TPdf.ValidatePdfX: ελέγχει ένα ανοιχτό PDF για markers συμμόρφωσης PDF/X (identifier XMP pdfxid και ισότητα με την τιμή του Info dictionary, περιγραφή pdfxid extension schema, πίνακα /OutputIntents με /DestOutputProfile, παρουσία Title, trailer /ID, κατάσταση κρυπτογράφησης, παρουσία xmp:CreateDate / xmp:ModifyDate) και επιστρέφει TPdfXValidationResult με το επίπεδο που εντοπίστηκε και το σύνολο των issues που βρέθηκαν
- Προστέθηκε η ιδιότητα TPdf.PdfXConformance: επιστρέφει το επίπεδο συμμόρφωσης του τρέχοντος ανοιχτού εγγράφου (pxc1a, pxc3, pxc4, pxcNone ή pxcUnknown) χωρίς να χρειάζεται ρητή κλήση του ValidatePdfX Το string έκδοσης 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οι callers μπορούν να παρακάμψουν τοConformance, να δώσουν ένα blob CMYKIccProfileDataγια workflows εμπορικής εκτύπωσης ή να αλλάξουν ταOutputCondition/OutputConditionIdentifier/RegistryNameώστε να δείχνουν σε μια συγκεκριμένη εγγραφή ICC characterisation registry, π.χ. FOGRA39, GRACoL2006_Coated1v2 - Οι απαιτήσεις σε επίπεδο περιεχομένου (όλες οι γραμματοσειρές ενσωματωμένες, χωρίς JavaScript, χωρίς ορατά annotations, απαγόρευση OPI, κανόνες transparency για PDF/X-1a / PDF/X-3 κ.ο.κ.) παραμένουν ευθύνη του συγγραφέα του εγγράφου και του rendering pipeline του PDFium Συνδυάστε το ValidatePdfX με ένα εργαλείο preflight όπως το callas pdfaPilot ή το Ghent PDF Workgroup Output Suite για πλήρη επαλήθευση συμμόρφωσης
- Ενημερώθηκε το string TPdf.AboutInfo ώστε να αναφέρει την τρέχουσα έκδοση προϊόντος
Version 1.32.0
- Προστέθηκε υποστήριξη εισαγωγής marker PDF/E-1 (ISO 24517-1:2008): το TPdf.SaveAsPdfE προωθεί το τρέχον έγγραφο σε αρχείο συμβατό με PDF/E-1 μέσω μετα-επεξεργασίας του βασικού PDF με incremental update. Η εισαγωγή καλύπτει τις απαιτήσεις επιπέδου μορφότυπου που μπορούν να προστεθούν μετά την αποθήκευση — μια ροή μεταδεδομένων 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), και έναν πίνακα/IDtrailer που απαιτείται από το §6.2 - Προστέθηκε το TPdf.SaveAsPdfEToStream για εξαγωγή PDF/E στη μνήμη, καθώς και μια συντομογραφία με προεπιλεγμένες επιλογές
TPdf.SaveAsPdfE(FileName)για τη συνηθισμένη περίπτωση - Προστέθηκε το TPdf.ValidatePdfE: ελέγχει ένα ανοιχτό PDF για δείκτες συμμόρφωσης PDF/E-1 (παρουσία και ισότητα της XMP τιμής pdfe:ISO_PDFEVersion με την τιμή στο Info dictionary, περιγραφή σχήματος pdfe extension schema, εγγραφή Info dictionary /ISO_PDFEVersion, trailer /ID, παρουσία xmp:CreateDate / xmp:ModifyDate) και επιστρέφει δομημένο αποτέλεσμα με το ανιχνευμένο επίπεδο συμμόρφωσης και το σύνολο των προβλημάτων που βρέθηκαν
- Προστέθηκε η ιδιότητα TPdf.PdfEConformance: επιστρέφει το επίπεδο συμμόρφωσης του τρέχοντος ανοιχτού εγγράφου (pec1, pecNone, ή pecUnknown) χωρίς να χρειάζεται ρητή κλήση του ValidatePdfE
- Νέοι τύποι στο νέο unit FPdfPdfe: TPdfEConformance, TPdfEValidationResult, TPdfEValidationIssue, TPdfESaveOptions
- Η επανεγγραφή του Info dictionary είναι πρωτιά για τη διαδρομή post-processing PDF/x του PDFiumPas — ξαναγράφει το υπάρχον Info object με τον ίδιο αριθμό object (ώστε το xref subsection / trailer /Info reference να παραμένουν έγκυρα) και συνθέτει νέο Info dictionary όταν το source trailer δεν έχει καταχώριση /Info. Το ίδιο το PDFium εκδίδει Info dictionary σε κάθε SaveAs output, άρα η συνηθισμένη περίπτωση είναι η διαδρομή επανεγγραφής
- Οι απαιτήσεις σε επίπεδο περιεχομένου (ενσωμάτωση γραμματοσειρών, ToUnicode CMaps, απαγορευμένα κλειδιά XObjects / ExtGState / XFA forms κ.λπ.) παραμένουν ευθύνη του συντάκτη του εγγράφου — το SaveAsPdfE προσθέτει τα markers του μορφότυπου αλλά δεν αλλάζει το περιεχόμενο των σελίδων ούτε αφαιρεί απαγορευμένες δυνατότητες
- Ενημερώθηκε η συμβολοσειρά TPdf.AboutInfo ώστε να αναφέρει την τρέχουσα έκδοση του προϊόντος
Version 1.31.0
- Προστέθηκε υποστήριξη εισαγωγής marker PDF/UA-1 (ISO 14289-1:2014): το TPdf.SaveAsPdfUa προωθεί το τρέχον έγγραφο σε αρχείο συμβατό με PDF/UA-1 μέσω μετα-επεξεργασίας του βασικού PDF με incremental update. Η εισαγωγή καλύπτει τις απαιτήσεις επιπέδου μορφότυπου που μπορούν να επιβληθούν μετά την αποθήκευση — μια ροή μεταδεδομένων XMP με
pdfuaid:part = 1μαζί με την αντίστοιχη περιγραφή pdfaExtension:schemas, υποχρεωτικόdc:title, catalog/MarkInfo << /Marked true /Suspects false >>και/ViewerPreferences << /DisplayDocTitle true >>(μόνο όταν το source δεν έχει κανένα), catalog/Lang(όταν ο caller δίνει BCP 47 tag), και έναν πίνακα trailer/ID - Προστέθηκε το TPdf.SaveAsPdfUaToStream για εξαγωγή PDF/UA στη μνήμη, καθώς και μια συντομογραφία με προεπιλεγμένες επιλογές
TPdf.SaveAsPdfUa(FileName)για τη συνηθισμένη περίπτωση - Προστέθηκε το TPdf.ValidatePdfUa: ελέγχει ένα ανοιχτό PDF για δείκτες συμμόρφωσης 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
- Νέοι τύποι στο νέο unit FPdfPdfua: TPdfUaConformance, TPdfUaValidationResult, TPdfUaValidationIssue, TPdfUaSaveOptions
- Τα πεδία Title / Author / Subject / Keywords / Creator / Producer / CreationDate / ModDate / DocumentId / InstanceId / Language που μένουν κενά στο TPdfUaSaveOptions συμπληρώνονται αυτόματα από τα FPDF_GetMetaText / FPDF_GetFileIdentifier / FPDFCatalog_GetLanguage, ώστε οι υπάρχοντες callers να μπορούν να αποθηκεύουν με μία μόνο γραμμή
- Οι απαιτήσεις σε επίπεδο περιεχομένου (πληρότητα tagging του StructTreeRoot, εναλλακτικό κείμενο Figure Alt, ToUnicode CMaps, ενσωμάτωση γραμματοσειρών κ.λπ.) παραμένουν ευθύνη του συντάκτη του εγγράφου — το SaveAsPdfUa προσθέτει τα markers του μορφότυπου αλλά δεν αλλάζει το περιεχόμενο των σελίδων ούτε επινοεί tags. Το ValidatePdfUa επισημαίνει την απουσία του StructTreeRoot ως
pvuaiMissingStructTreeRootώστε οι callers να μπορούν να δρομολογούν μη tagged έγγραφα σε ξεχωριστή γραμμή tagging - Ενημερώθηκε η συμβολοσειρά TPdf.AboutInfo ώστε να αναφέρει την τρέχουσα έκδοση του προϊόντος
Version 1.30.0
- Το PDF/A-1b output πληροί πλέον τις απαιτήσεις ISO 19005-1 (με Cor.1:2007) για ισοδυναμία μεταξύ Document Information Dictionary / XMP: κάθε καταχώριση Info dictionary που γράφει το PDFium στο βασικό PDF αντικατοπτρίζεται στο XMP packet, συμπεριλαμβανομένων των 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 εγγράφου περιέχει πλέον πάντα πίνακα /ID (αυστηρή απαίτηση του ISO 19005-1 6.1.3). Όταν το TPdf.SaveAsPdfA επεξεργάζεται ένα έγγραφο του οποίου το source ήδη έχει file identifier, επαναχρησιμοποιούνται τα υπάρχοντα 16-byte permanent και changing IDs, διαφορετικά ένας ντετερμινιστικός εναλλακτικός 16-byte ID παράγεται από τα bytes του source
- Το ενσωματωμένο XMP περιλαμβάνει πλέον την περιγραφή σχήματος pdfaid extension schema που απαιτείται από το ISO 19005-1 6.7.8 (αντικαταστάθηκε από το Cor.1) — το pdfaid θεωρείται extension schema σε σχέση με το XMP Specification 2004, οπότε όλα τα συμβατά αρχεία πρέπει να δηλώνουν τα ονόματα ιδιοτήτων του, τους τύπους τιμών και τις κατηγορίες του στο container pdfaExtension:schemas
- Το TPdfASaveOptions απέκτησε πέντε νέα προαιρετικά πεδία: Producer, CreationDate, ModDate (PDF date strings στη μορφή “D:YYYYMMDDHHmmSSOHH'mm'”), DocumentId, και InstanceId (16-byte byte strings για τον trailer /ID πίνακα). Τα TPdf.SaveAsPdfA / SaveAsPdfAToStream συμπληρώνουν αυτόματα τα πεδία που λείπουν από τα FPDF_GetMetaText και FPDF_GetFileIdentifier, ώστε οι υπάρχοντες callers να συνεχίζουν να λειτουργούν χωρίς αλλαγές
- Τα 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 packet (το XMP Specification απαιτεί UTF-8), διατηρώντας την κυκλική μεταφορά πολυγλωσσικών μεταδεδομένων μέσω SaveAsPdfA
- Ενημερώθηκε η συμβολοσειρά TPdf.AboutInfo ώστε να αναφέρει την τρέχουσα έκδοση του προϊόντος
Version 1.29.0
- Ανανέωθηκαν τα ενσωματωμένα PDFium DLLs (Win32 και Win64, και τα standard και V8 builds) στο upstream snapshot της 2026-05-22, ενσωματώνοντας διορθώσεις upstream για τα paths κρασαρίσματος του FPDFText_SetText / FPDFText_SetCharcodes και γενική εσωτερική σκλήρυνση από το PDFium project
- Εκτέθηκε η νέα σημαία αποθήκευσης FPDF_SUBSET_NEW_FONTS του PDFium στο FPdfPageOps.pas, επιτρέποντας στους callers του FPDF_SaveAsCopy να ζητούν αυτόματο subsetting των embedded font files για νέα text objects. Οι υπάρχουσες σταθερές FPDF_INCREMENTAL, FPDF_NO_INCREMENTAL, και FPDF_REMOVE_SECURITY ορίζονται πλέον με τη upstream μορφή bit-shift (η παλιά αριθμητική τιμή 3 διατηρείται ως FPDF_REMOVE_SECURITY_DEPRECATED για binary compatibility)
- Προστέθηκε το enum FPDF_FONT_BACKEND_TYPE (FREETYPE / FONTATIONS) και το αντίστοιχο πεδίο m_FontLibraryType στο FPDF_LIBRARY_CONFIG στο FPdfView.pas, ώστε οι εφαρμογές που αρχικοποιούν το PDFium με τον Skia renderer να μπορούν πλέον να επιλέγουν το font backend κατά την εκκίνηση
- Ενημερώθηκε η υπογραφή του TFPDFPage_InsertObject ώστε να ταιριάζει με το upstream: η C function πλέον επιστρέφει FPDF_BOOL (TRUE σε επιτυχία, FALSE αν το page_object είναι NULL ή αν αποτύχει η μεταφορά ownership) αντί για void. Οι υπάρχοντες callers του PDFiumPas συνεχίζουν να μεταγλωττίζονται χωρίς αλλαγές, επειδή το Delphi / FPC επιτρέπουν να αγνοηθεί η τιμή επιστροφής μιας function
- Διορθώθηκε η συμβολοσειρά TPdf.AboutInfo ώστε να αναφέρει την τρέχουσα έκδοση του προϊόντος (ήταν κολλημένη στο v1.27.0 από την documentation-only έκδοση v1.28.0)
Version 1.28.0
- Επεκτάθηκε σημαντικά η εντός σελίδας τεκμηρίωση σε όλο το API reference: κάθε property, method, event και global function entry περιλαμβάνει πλέον Περιγραφή τριών παραγράφων, λίστα Παρατηρήσεις, πολυγραμμικό Delphi Παράδειγμα, και πλουσιότερο block Δείτε επίσης — καλύπτοντας περισσότερες από 200 έως τότε λεπτές σελίδες, συμπεριλαμβανομένων όλων των counters του TPdf, των metadata getters, των accessors για γραμματοσειρές και χαρακτήρες, των page-level properties, των indexed records, των document-level methods, και όλης της επιφάνειας state / display / event του TPdfView
- Βελτιστοποιήθηκε η διάταξη της βοήθειας ώστε να ταιριάζει με το οπτικό baseline του losLab που χρησιμοποιεί το reference του HotXLS: ταιριάχτηκαν τα μεγέθη των h1/h2, ενοποιήθηκαν τα styles του πλέγματος πλοήγησης API στο κοινό StyleSheet, και αφαιρέθηκαν οι per-page inline CSS overrides στο Navigation.html
- Η τεκμηρίωση πλέον συνοδεύεται από βοηθητικό script (Docs\Build-Expand-Entries.ps1) που αναπαράγει τον εμπλουτισμό της entry page από έναν ενιαίο πίνακα δεδομένων για επαναλήψιμη συντήρηση
Version 1.27.0
- Προστέθηκε υποστήριξη δημιουργίας PDF/A-1b: το TPdf.SaveAsPdfA αποθηκεύει οποιοδήποτε ανοιχτό έγγραφο ως αρχείο συμβατό με PDF/A-1b μέσω μετα-επεξεργασίας του βασικού PDF με incremental update που εισάγει XMP metadata stream, sRGB ICC OutputIntent, και ενημερωμένο catalog εγγράφου — χωρίς να απαιτούνται επιπλέον DLL APIs. Λειτουργεί σε κάθε πλατφόρμα που υποστηρίζει το PDFiumPas
- Προστέθηκε το TPdf.SaveAsPdfAToStream για εξαγωγή PDF/A στη μνήμη
- Προστέθηκε το TPdf.ValidatePdfA: ελέγχει ένα ανοιχτό PDF για συμμόρφωση PDF/A (δείκτες XMP pdfaid, OutputIntent με ενσωματωμένο ICC profile, encryption) και επιστρέφει δομημένο αποτέλεσμα με το ανιχνευμένο επίπεδο συμμόρφωσης και ένα σύνολο συγκεκριμένων προβλημάτων που βρέθηκαν
- Προστέθηκε η ιδιότητα TPdf.PdfAConformance: επιστρέφει το επίπεδο συμμόρφωσης του τρέχοντος ανοιχτού εγγράφου (pac1b, pac1a, pac2b, pac3b, pacNone, ή pacUnknown) χωρίς να χρειάζεται ρητή κλήση του ValidatePdfA
- Νέοι τύποι που εκτίθενται: TPdfAConformance, TPdfAValidationResult, TPdfAValidationIssue, TPdfASaveOptions (στο νέο unit FPdfPdfa.pas)
- Το SaveAsPdfA υποστηρίζει προσαρμοσμένο ICC profile μέσω του TPdfASaveOptions.IccProfileData; όταν μένει κενό χρησιμοποιείται αυτόματα το ενσωματωμένο προφίλ sRGB IEC61966-2.1 (HP/Microsoft, 3144 bytes)
- Αντικαταστάθηκε το μονολιθικό HTML reference με αναδομημένο web help system: 302 ξεχωριστές σελίδες entry API (μία ανά property, method, event και global function) που καλύπτουν το TPdf και το TPdfView, καθεμία με πλήρη περιγραφή, πίνακα παραμέτρων, Delphi code example, και συνδέσμους Δείτε επίσης
- Προστέθηκε το Navigation.html: ένας ολοκληρωμένος one-page API navigation index οργανωμένος σε έξι ενότητες (TPdf properties/methods/events, TPdfView properties/methods/events, global functions) με πλέγμα flex 5 στηλών για γρήγορη σάρωση
- Ανακατασκευάστηκαν τα TPdf.html και TPdfView.html ως compact component overview pages που διατηρούν τις ενότητες type-reference (Types, Constants, Global Variables) και συνδέουν προς τις επιμέρους entry pages για όλα τα members
- Προστέθηκε αναζήτηση πλήρους κειμένου με Search.js και incremental client-side matching σε όλες τις 312 indexed pages
- Ενημερώθηκαν όλες οι navigation bars σε όλο το site ώστε να δείχνουν προς το Navigation.html
Version 1.26.0
- Προστέθηκε το Demo/Lazarus/BatchExport, το LCL port του Delphi BatchExport demo της v1.14.0. Ίδιο σύνολο δυνατοτήτων: εξαγωγή πολλών PDF σε JPG με συνολική πρόοδο ανά αρχείο, τρέχουσα πρόοδο ανά σελίδα, εισόδους για DPI / ποιότητα / κωδικό πρόσβασης, και μια παρτίδα που μπορεί να ακυρωθεί συνεργατικά και βασίζεται στο IPdfCancellationToken. Ο φάκελος εξόδου ανοίγει στον file manager της πλατφόρμας όταν η εξαγωγή ολοκληρωθεί με επιτυχία
Version 1.25.0
- Προστέθηκε επαναχρησιμοποίηση Form XObject στο TPdf, επιτρέποντας workflows watermark, template overlay, και “stamp one page onto many”: το CreateXObjectFromPage κατασκευάζει ένα επαναχρησιμοποιήσιμο handle από οποιαδήποτε σελίδα άλλου εγγράφου· το InsertFormObjectFromXObject εισάγει ΜΙΑ αντιγραφή της wrapped σελίδας στην τρέχουσα σελίδα. Επιστρέφει το inserted FPDF_PAGEOBJECT ώστε ο caller να μπορεί να το τοποθετεί / κλιμακώνει / περιστρέφει με το FPDFPageObj_SetMatrix και τα βοηθήματα TPdfMatrix της v1.9.0
- Η νέα κλάση TPdfXObject στην Pascal τυλίγει το handle FPDF_XOBJECT του PDFium και το κλείνει αυτόματα στον destructor της, εξαλείφοντας την χειροκίνητη διαδικασία FPDF_CloseXObject
- Επεκτάθηκαν οι Delphi και Lazarus regression suites σε 147 cases η καθεμία, και η C++Builder suite σε 123 cases, καλύπτοντας τη δημιουργία handle και τα contracts εισαγωγής page object
Version 1.24.0
- Προστέθηκε το TPdf.RenderPageProgressive — μια ακυρώσιμη εκδοχή του RenderPage που οδηγεί τον progressive rendering loop του PDFium και ελέγχει ένα IPdfCancellationToken της v1.7.0 ανάμεσα στις επαναλήψεις, ώστε οι μακρές αποδόσεις υψηλού DPI να μπορούν να διακοπούν στη μέση της σελίδας αντί να μπλοκάρουν τον caller μέχρι την ολοκλήρωση
- Επιστρέφει τιμή TPdfProgressiveStatus: prsDone, prsCancelled, ή prsFailed. Περάστε AToken = nil για απόδοση μέχρι τέλους χωρίς ποτέ να παύσει (καμία δυνατότητα prsCancelled)
- Χρησιμοποιεί την ίδια zero-copy fast path που εισήχθη στη v1.21.0 — το PDFium αποδίδει απευθείας στο DIB του προορισμού TBitmap. Η ίδια παλιά fallback διαδρομή ισχύει όταν το DIB δεν μπορεί να wrapped
- Επεκτάθηκαν οι Delphi και Lazarus regression suites σε 145 cases η καθεμία, και η C++Builder suite σε 121 cases, καλύπτοντας nil-token (ολοκληρώνει), pre-cancelled token (prsCancelled), και pixel equivalence με sync RenderPage πάνω σε live token
Version 1.23.0
- Προστέθηκαν έξι νέες μέθοδοι TPdfView που εκθέτουν στις εφαρμογές την επιλογή κειμένου και το Undo/Redo των form-widget του PDFium: η GetSelectedFormText επιστρέφει το κείμενο που είναι αυτή τη στιγμή επιλεγμένο μέσα στο focused form widget· η SelectAllFormText επιλέγει κάθε χαρακτήρα· οι FormUndo / FormRedo / FormCanUndo / FormCanRedo χειρίζονται το edit history του focused widget. Τα υποκείμενα PDFium APIs ήταν ήδη συνδεδεμένα αλλά δεν είχαν υψηλού επιπέδου entry point. Και οι έξι μέθοδοι short-circuit με ασφάλεια όταν η προβολή είναι ανενεργή ή το έγγραφο δεν έχει εστιασμένο AcroForm widget
- Επεκτάθηκαν οι Delphi και Lazarus regression suites σε 142 cases η καθεμία, και η C++Builder suite σε 119 cases, καλύπτοντας το no-form-no-focus contract για κάθε νέα μέθοδο
Version 1.22.0
- Προστέθηκαν wrappers σύνθεσης σελίδων στο TPdf: η ImportPagesByIndex δέχεται ένα zero-based index array για να αντιγράφει συγκεκριμένες σελίδες από source document· η ImportNPagesToOne επιστρέφει ένα ολοκαίνουργιο TPdf του οποίου οι σελίδες είναι N-up composites αυτού του εγγράφου· η MovePages αναδιατάσσει σελίδες επιτόπου. Τα υποκείμενα PDFium APIs ήταν ήδη συνδεδεμένα αλλά δεν είχαν Pascal-friendly entry point
- Η ImportPagesByIndex δέχεται κενό array για να εισάγει κάθε source page (ισοδύναμο με το να περάσετε nil στο επίπεδο C ABI)
- Επεκτάθηκαν οι Delphi και Lazarus regression suites σε 136 cases η καθεμία, και η C++Builder suite σε 115 cases, καλύπτοντας subset import, whole-document import, page reorder, και N-up composite
Version 1.21.0
- Βελτιώθηκε η απόδοση απόδοσης με μετάβαση των TPdf.RenderPage / TPdf.RenderTile (και των αντίστοιχων βοηθημάτων TPdfView) σε zero-copy output path. Το PDFium πλέον γράφει απευθείας στο DIB buffer του προορισμού TBitmap αντί σε εσωτερικό buffer που μετά αντιγραφόταν γραμμή-γραμμή, γλιτώνοντας μία αντιγραφή μνήμης width x height x 4 bytes σε κάθε render. Η βελτίωση φαίνεται περισσότερο σε υψηλό DPI (thumbnail panels, print-quality export, batch export)
- Η παλιά per-scanline διαδρομή διατηρείται ως fallback ασφάλειας για τη σπάνια περίπτωση όπου το DIB του προορισμού δεν μπορεί να wrapped (ακραίες διαστάσεις, ασυνήθιστο stride, OOM). Η συμπεριφορά είναι byte-identical μεταξύ των δύο διαδρομών, απλώς πιο αργή στο fallback
- Επεκτάθηκαν οι Delphi και Lazarus regression suites σε 132 cases η καθεμία, και η C++Builder suite σε 112 cases, καλύπτοντας caller-bitmap pf32bit upgrade, round-trip διαστάσεων, και sanity test μεγάλου bitmap stride
Version 1.20.0
- Προστέθηκε επισήμανση αποτελεσμάτων αναζήτησης στο TPdfView: η HighlightSearchText(Text, MatchCase, MatchWholeWord) σαρώνει την τρέχουσα σελίδα προβολής και επιστρέφει τον αριθμό των matches που βρέθηκαν, ζωγραφίζοντας mask HighlightColor πάνω σε κάθε match σε κάθε redraw. Η ClearHighlight αφαιρεί τις επισημάνσεις· η μετάβαση της προβολής σε άλλη σελίδα τις καθαρίζει αυτόματα επειδή τα matches είναι page-specific
- Το HighlightColor έχει προεπιλογή clYellow και είναι published ώστε οι εφαρμογές να μπορούν να το θεματοποιούν ώστε να ταιριάζει με την UI palette τους
- Επεκτάθηκαν οι Delphi και Lazarus regression suites σε 129 cases η καθεμία, και η C++Builder suite σε 109 cases, καλύπτοντας προεπιλεγμένο χρώμα, color round-trip, “real fixture word matches” απέναντι στο sample.pdf string, και το contract “missing word returns zero matches”
Version 1.19.0
- Προστέθηκε η ιδιότητα FitMode στο TPdfView με τέσσερις τιμές: pfmNone (manual zoom), pfmActualSize (100%), pfmFitPage (ολόκληρη η σελίδα χωρά στο viewport), και pfmFitWidth (το πλάτος της σελίδας ταιριάζει με το πλάτος του viewport). Το ενεργό fit mode εφαρμόζεται ξανά αυτόματα στο Resize και όταν αλλάζει η τρέχουσα σελίδα, έτσι ώστε τα μεγάλα έγγραφα με μικτά μεγέθη σελίδων να μένουν σωστά framed
- Η απευθείας ρύθμιση του Zoom ακυρώνει το ενεργό fit mode (το FitMode επιστρέφει σε pfmNone), ακολουθώντας τη συνηθισμένη συμπεριφορά των PDF viewers όπου η πληκτρολόγηση τιμής zoom βγάζει το έγγραφο από Fit Page / Fit Width
- Η προεπιλογή είναι pfmNone ώστε οι υπάρχουσες εφαρμογές να διατηρούν τη συμπεριφορά explicit-zoom
- Επεκτάθηκαν οι Delphi και Lazarus regression suites σε 124 cases η καθεμία, και η C++Builder suite σε 106 cases, καλύπτοντας την προεπιλεγμένη τιμή, το round-trip της λειτουργίας, το fit-page που παράγει πραγματικό zoom σε φορτωμένο έγγραφο, και το manual-zoom-cancels-fit-mode
Version 1.18.0
- Προστέθηκε η ιδιότητα PageColor στο TPdfView, αποσυνδέοντας το background της αποδιδόμενης PDF σελίδας από το Color του περιβάλλοντος control. Η προεπιλογή είναι clWhite, έτσι ώστε οι PDF σελίδες να αποδίδονται πλέον ως paper-white ανεξάρτητα από το theme της host εφαρμογής. Τα dark-mode viewers μπορούν πλέον να κρατούν τη scroll area σκοτεινή ενώ η πραγματική PDF σελίδα μένει λευκή (ή σε οποιοδήποτε χρώμα επιλέγει η εφαρμογή)
- Αλλαγή συμπεριφοράς: οι εφαρμογές που συνήθιζαν να ορίζουν το TPdfView.Color για να αλλάξουν το χρώμα της PDF σελίδας θα πρέπει πλέον να ορίζουν το PageColor. Η προεπιλεγμένη εμπειρία βελτιώνεται για τη συνηθισμένη περίπτωση (λευκές σελίδες πάνω σε themed backgrounds control) χωρίς καμία αλλαγή κώδικα
- Επεκτάθηκαν οι Delphi και Lazarus regression suites σε 120 cases η καθεμία, και η C++Builder suite σε 103 cases, καλύπτοντας την προεπιλεγμένη τιμή και το color round-trip
Version 1.17.0
- Προστέθηκαν toggles περιορισμού εισόδου χρήστη στο TPdfView ώστε οι εφαρμογές που ενσωματώνουν το viewer σε kiosks, preview panes ή read-only contexts να μπορούν να απενεργοποιούν χειρονομίες πλοήγησης χωρίς subclassing: το AllowUserPageChange ελέγχει τα νέα keyboard shortcuts PgUp / PgDn / Ctrl+Home / Ctrl+End· το ChangePageOnMouseScrolling ελέγχει τα νέα wheel-up / wheel-down page jumps· το AllowUserTextSelection είναι δεσμευμένο για το μελλοντικό μονοπάτι επιλογής κειμένου με mouse-drag. Και τα τρία έχουν προεπιλογή True ώστε οι υπάρχουσες εφαρμογές να αναβαθμίζονται χωρίς καμία αλλαγή συμπεριφοράς
- Η πλοήγηση σελίδας με το ροδάκι του ποντικιού παραλείπει το Ctrl+wheel ώστε οι εφαρμογές να μπορούν να κρατούν το Ctrl+wheel αποκλειστικά για zoom
- Επεκτάθηκαν οι Delphi και Lazarus regression suites σε 118 cases η καθεμία, και η C++Builder suite σε 101 cases, καλύπτοντας τις προεπιλεγμένες τιμές και το toggle round-trip
Version 1.16.2
- Επεκτάθηκε η κάλυψη regression του TPdfView για annotation link clicks όταν η σελίδα του viewer διαφέρει από την αντίστοιχη σελίδα του TPdf, χρησιμοποιώντας μια πραγματική headless διαδρομή mouse click σε Delphi, Lazarus, και C++Builder
- Οι Delphi και Lazarus suites τρέχουν πλέον 114 cases η καθεμία, και η C++Builder τρέχει πλέον 99 cases
Version 1.16.1
- Διορθώθηκε ο χειρισμός link-click στο TPdfView ώστε οι αυτόματες ενέργειες annotation και web-link να χρησιμοποιούν τη σελίδα που προβάλλεται αυτή τη στιγμή από τον viewer, ακόμη και όταν το αντίστοιχο TPdf component βρίσκεται σε διαφορετική σελίδα
- Θωρακίστηκε το TPdfThumbnailView απέναντι σε dangling Pdf references όταν καταστρέφεται το συνδεδεμένο TPdf component
- Προστέθηκε κάλυψη regression για τον χρόνο ζωής των thumbnail references· οι Delphi και Lazarus suites τρέχουν πλέον 113 cases η καθεμία, και η C++Builder τρέχει πλέον 98 cases
- Συγχρονίστηκαν το README, η τεκμηρίωση δοκιμών, το περιεχόμενο αναζήτησης / ευρετηρίου του HTML Help, και τα παραγόμενα outputs των C++ packages με τις ενημερώσεις ενσωμάτωσης από v1.7.0 έως v1.16.0
Version 1.16.0
- Προστέθηκε ένα νέο Delphi PrintDialog demo (Demo/Delphi/PrintDialog) που εστιάζει στην εκτύπωση N-up (1 / 2 / 4 / 9 σελίδες ανά φύλλο) με φιλτράρισμα περιττών / ζυγών σελίδων, απόδοση σε grayscale, και προαιρετικά περιγράμματα κελιών ενός pixel. Είναι σκόπιμα ένα μικρό συνοδευτικό του υπάρχοντος PrintPDF demo, το οποίο ήδη καλύπτει preview, recent files, zoom, και scaling
Version 1.15.0
- Προστέθηκε ένα νέο component TPdfThumbnailView (unit FPdfThumbnail) που αποδίδει ένα thumbnail ανά σελίδα ανά γραμμή σε side panel με δυνατότητα κύλισης, με επισήμανση hover και επιλογής μαζί με πλοήγηση click-to-go. Έχει σχεδιαστεί να στέκεται δίπλα σε ένα TPdfView ώστε οι τελικοί χρήστες να μπορούν να περιηγούνται σε ένα μεγάλο έγγραφο ανά σελίδα
- Το component είναι καταχωρισμένο στην καρτέλα losLab palette μαζί με τα TPdf και TPdfView· βασικές ιδιότητες: Pdf, CurrentPageIndex, ThumbnailWidth, ThumbnailHeight, TextColor, HoverColor, SelectionColor, BorderColor, και το event OnPageClick
- Επεκτάθηκαν οι Delphi και Lazarus regression suites σε 112 cases η καθεμία, και η C++Builder suite σε 97 cases, καλύπτοντας defaults, round-trip μεγέθους thumbnail, clamping ακραίων τιμών, color round-trip, και ανάθεση event handler
Version 1.14.0
- Προστέθηκε ένα νέο Delphi BatchExport demo (Demo/Delphi/BatchExport) που δείχνει πώς να μετατρέπετε πολλά αρχεία PDF σε JPG σε μία διέλευση χρησιμοποιώντας το TPdf.LoadCustomDocument για streaming load, το IPdfCancellationToken για συνεργατική ακύρωση, και μπάρες προόδου συνολικά ανά αρχείο και ανά σελίδα. Το demo χρησιμοποιεί ένα TPdf instance ανά αρχείο (το ίδιο το PDFium δεν είναι thread safe) και ανοίγει τον φάκελο εξόδου στο Explorer όταν η εξαγωγή ολοκληρωθεί με επιτυχία
Version 1.13.0
- Προστέθηκε ένα UI overlay για async rendering στο TPdfView μέσω τριών νέων ιδιοτήτων: AsyncRendering, LoadingText, και LoadingColor. Όταν το AsyncRendering είναι True, η single-page paint διαδρομή σχεδιάζει έναν μικρό δείκτη “Loading...” πάνω από την αποδιδόμενη σελίδα ώστε οι εφαρμογές που χρησιμοποιούν δικό τους worker για μακρές αποδόσεις να μοιράζονται ένα συνεπές οπτικό affordance
- Οι προεπιλογές διατηρούν την υπάρχουσα συμπεριφορά: το AsyncRendering είναι False, οπότε οι εφαρμογές που δεν το ενεργοποιούν δεν βλέπουν καμία οπτική αλλαγή
- Η τεκμηρίωση διευκρινίζει ότι το ίδιο το PDFium δεν είναι thread safe — στην πράξη η μεταφορά της απόδοσης σε worker απαιτεί ο caller να κρατά ένα TPdf ανά worker· το επερχόμενο batch-export demo δείχνει αυτό το μοτίβο
- Επεκτάθηκαν οι Delphi και Lazarus regression suites σε 106 cases η καθεμία, και η C++Builder suite σε 93 cases, καλύπτοντας τις προεπιλεγμένες τιμές και το round-trip των τριών ιδιοτήτων
Version 1.12.0
- Προστέθηκε χειρισμός συνδέσμων με κλικ στο TPdfView. Η νέα ιδιότητα LinkOptions ελέγχει την αυτόματη συμπεριφορά για τους τέσσερις τύπους ενεργειών συνδέσμου PDF: goto (άλμα σε σελίδα), URI (ShellExecute), launch (ShellExecute), και ενσωματωμένο GotoR (reserved). Οι προεπιλογές ενεργοποιούν τα loAutoGoto και loAutoOpenURI· τα loAutoLaunch και loAutoEmbeddedGoto μένουν κλειστά ώστε ένα τυχαίο κλικ να μην μπορεί να τρέξει αυθαίρετο πρόγραμμα
- Προστέθηκαν τα events OnAnnotationLinkClick και OnWebLinkClick που ενεργοποιούνται πριν από οποιαδήποτε αυτόματη ενέργεια και επιτρέπουν στις εφαρμογές να επιθεωρούν τον σύνδεσμο, να τον σημειώνουν ως Handled, ή να τον ανακατευθύνουν (για παράδειγμα, σε security prompt)
- Η ανίχνευση click σε σύνδεσμο εκτελείται μόνο όταν η κίνηση είναι κλικ και όχι drag, χρησιμοποιώντας ένα νέο MouseDown anchor ώστε οι χειρονομίες μετακίνησης να συνεχίζουν να περνούν από την υπάρχουσα διαδρομή κύλισης χωρίς αλλαγή
- Επεκτάθηκαν οι Delphi και Lazarus regression suites σε 102 cases η καθεμία, και η C++Builder suite σε 91 cases, καλύπτοντας τις προεπιλογές του LinkOptions, το set round-trip, και την ανάθεση event handler
Version 1.11.0
- Προστέθηκε οπτικό φινίρισμα στο TPdfView: οι ιδιότητες PageShadowSize, PageShadowColor, και PageBorderColor ζωγραφίζουν προαιρετική σκιά κάτω από το page rectangle και ένα περίγραμμα ενός pixel γύρω του. Οι προεπιλογές διατηρούν την προηγούμενη επίπεδη εμφάνιση (PageShadowSize = 0· το περίγραμμα σχεδιάζεται στο προεπιλεγμένο clBlack αλλά χάνεται πάνω στο προεπιλεγμένο λευκό background μέχρι οι callers να αλλάξουν τα χρώματα)
- Προστέθηκε μια ιδιότητα SmoothScroll ως opt-in flag για μελλοντικό incremental scroll animation· η ιδιότητα κάνει round-trip σήμερα και είναι συνδεδεμένη ώστε οι εφαρμογές να μπορούν να αποθηκεύουν την προτίμηση, ενώ η πλευρά απόδοσης εξακολουθεί να χρησιμοποιεί την υπάρχουσα άμεση συμπεριφορά κύλισης
- Επεκτάθηκαν οι Delphi και Lazarus regression suites σε 98 cases η καθεμία, και η C++Builder suite σε 89 cases, καλύπτοντας τις προεπιλεγμένες τιμές, το round-trip της ιδιότητας, και το clamp αρνητικού shadow size
Version 1.10.0
- Προστέθηκε άμεση εισαγωγή εικόνας μέσω των νέων overloads TPdf.AddImage και TPdfView.AddImage που δέχονται είτε file path είτε TBitmap, επιπλέον του υπάρχοντος AddPicture που βασίζεται σε TPicture. Το AddImage(FileName) αναγνωρίζει κάθε μορφή που είναι καταχωρισμένη στις VCL ή LCL graphics units (BMP, PNG μέσω του PngImage unit, JPG κ.λπ.) και περνά από την ίδια διαδρομή με το AddPicture ώστε η συμπεριφορά να είναι ίδια
- Το AddImage(TBitmap) παρακάμπτει το ενδιάμεσο TPicture, κάτι που απλοποιεί τους callers που ήδη διαθέτουν TBitmap από εργασία απόδοσης ή batch generation
- Επεκτάθηκαν οι Delphi και Lazarus regression suites σε 92 cases η καθεμία, και η C++Builder suite σε 84 cases, καλύπτοντας εισαγωγή bitmap, bounds page object, απόρριψη nil bitmap, και φόρτωση BMP αρχείου
Version 1.9.0
- Προστέθηκε υψηλού επιπέδου υποστήριξη μετασχηματισμών μέσω της νέας κλάσης TPdfMatrix στο unit FPdfMatrix. Το TPdfMatrix τυλίγει το FS_MATRIX του PDFium με OO API για Translate, Scale, Rotate, HorizontalFlip, VerticalFlip, CentralFlip, Skew, και Multiply, κατάλληλο για σύνθεση transforms πριν δοθούν στο FPDFPageObj_SetMatrix και σε παρόμοια PDFium APIs
- Το TPdfMatrix.Multiply αποτυπώνει σωστά τα έξι στοιχεία του matrix πριν υπολογίσει τις νέες τιμές γραμμών, διορθώνοντας ένα λανθάνον ζήτημα όπου οι εναλλακτικές Pascal υλοποιήσεις υπεργράφουν παλαιότερα στοιχεία κατά την ίδια κλήση και παράγουν λανθασμένα αποτελέσματα για κάθε σύνθεση πέρα από καθαρή μετατόπιση
- Επεκτάθηκαν οι Delphi και Lazarus regression suites σε 88 cases η καθεμία, και η C++Builder suite σε 81 cases, καλύπτοντας identity, reset, translate / scale / flip, σειρά post-multiplicative composition, και το Multiply regression case
Version 1.8.0
- Προστέθηκε on-demand stream loading μέσω της νέας μεθόδου TPdf.LoadCustomDocument(AStream, AOwnsStream) και της βοηθητικής κλάσης TPdfStreamAdapter, με βάση το FPDF_LoadCustomDocument του PDFium. Το PDFium διαβάζει πλέον blocks από το παρεχόμενο TStream μόνο όταν χρειάζεται, έτσι ώστε πολύ μεγάλα ή απομακρυσμένα PDFs να μην απαιτούν πια upfront αντίγραφο στη μνήμη
- Προστέθηκε προαιρετική ιδιοκτησία stream: η παράδοση του AOwnsStream = True δίνει τη διάρκεια ζωής του TStream στο TPdf, το οποίο το ελευθερώνει όταν εκτελεστεί το UnloadDocument
- Επεκτάθηκαν οι Delphi και Lazarus regression suites σε 79 cases η καθεμία, και η C++Builder suite σε 75 cases, καλύπτοντας streaming load μέσω TFileStream, cleanup owned stream, και το contract externally-owned-stream survives-unload
Version 1.7.0
- Προστέθηκαν συνεργατικά async cancellation primitives στο νέο unit FPdfAsync, εκθέτοντας τα IPdfCancellationToken / IPdfCancellationTokenSource και ένα επαναχρησιμοποιήσιμο singleton PdfNoCancellationToken ώστε οι ροές μακράς απόδοσης και εξαγωγής να μπορούν να υποστηρίζουν καθαρή σημασιολογία ακύρωσης από το UI
- Προστέθηκε ένα ελαφρύ βοηθητικό TPdfFuture<T> που τρέχει έναν worker σε background thread και επιστρέφει το envelope TPdfFutureResult<T> στο main thread, διακρίνοντας περιπτώσεις επιτυχίας, ακύρωσης, και αποτυχίας
- Επεκτάθηκαν οι Delphi και Lazarus regression suites σε 76 cases η καθεμία, και η C++Builder suite σε 73 cases, με κοινή κάλυψη της κατάστασης ακύρωσης, του idempotent cancel, του callback fan-out, και της post-cancel εγγραφής
Version 1.6.10
- Προστέθηκε υψηλού επιπέδου πρόσβαση TPdf.PrintPageRanges στο print page range της προτίμησης προβολής PDF, επιστρέφοντας one-based page ranges για τον κώδικα της εφαρμογής
- Προστέθηκαν τα TPdf.SetFormFieldFlags / SetFormFieldFlagsAt και τα αντίστοιχα βοηθήματα TPdfView ώστε οι εφαρμογές να μπορούν να ενημερώνουν τα AcroForm field flags μέσω του δημόσιου API, συμπεριλαμβανομένης της κάλυψης για password και multi-select flags
- Θωρακίστηκε η κάλυψη ABI του PDFium binding για Windows-sized FPDF_DWORD, FPDF_FILEACCESS callbacks, και πεδία V8 embedder slot
Version 1.6.9
- Προστέθηκαν low-level Skia rendering bindings για τα νεοεξαγόμενα APIs FPDF_RenderPageSkia και FPDF_FFLDrawSkia στα ενσωματωμένα standard και V8 PDFium DLLs
- Επεκτάθηκαν οι έλεγχοι κάλυψης του δημόσιου binding ώστε η φόρτωση standard και V8 DLL να επαληθεύει πλέον τα Skia render entry points μαζί με τα υπάρχοντα probes δυνατοτήτων V8/XFA
Version 1.6.8
- Προστέθηκαν τα TPdf.SetTextPositions και TPdfSingleArray για να ορίζονται θέσεις ανά χαρακτήρα σε υπάρχοντα text objects μέσω του νεοεξαγόμενου FPDFText_SetPositions API
- Το FPDFText_SetPositions προήχθη σε απαιτούμενο binding για τα τρέχοντα ενσωματωμένα PDFium DLLs, ενώ επιβεβαιώνεται ότι τα Skia render entry points παραμένουν μη διαθέσιμα επειδή τα DLLs ακόμα δεν τα εξάγουν
- Επεκτάθηκαν οι Delphi, C++Builder, και Lazarus regression suites σε 65 cases η καθεμία με κάλυψη text-position
Version 1.6.7
- Προστέθηκε υψηλού επιπέδου πρόσβαση του TPdf στις JavaScript name-tree actions του εγγράφου, επιστρέφοντας ονόματα ενεργειών και scripts μέσω των JavaScriptAction και JavaScriptActions
- Προστέθηκε το TPdf.FileIdentifier για ανάγνωση των permanent και changing trailer IDs ως binary TBytes χωρίς το terminator byte του PDFium
- Προστέθηκαν τα TPdf.PageBox, GetPageBox, και SetPageBox για τα MediaBox, CropBox, BleedBox, TrimBox, και ArtBox της τρέχουσας σελίδας
- Επιβεβαιώθηκε ότι τα τρέχοντα ενσωματωμένα PDFium DLLs αφήνουν μόνο τα Skia render entry points μη διαθέσιμα στο runtime επειδή αυτά τα exports δεν υπάρχουν
- Επεκτάθηκαν οι Delphi, C++Builder, και Lazarus regression suites σε 64 cases η καθεμία με κάλυψη document JavaScript, trailer ID, και page-box
Version 1.6.6
- Προστέθηκε runtime υποστήριξη για το ενσωματωμένο V8-enabled PDFium DLL. Η ρύθμιση του EnableV8Engine πριν από τη φόρτωση επιλέγει πλέον το pdfium.v8.dll από το δέντρο DLLs\Win32 ή DLLs\Win64 και εκθέτει bindings μόνο για V8/XFA όταν το φορτωμένο DLL τα παρέχει
- Προστέθηκαν τα V8CapabilitiesAvailable, XfaBStrHelpersAvailable, GetRecommendedV8Flags, και low-level προαιρετικά bindings για τα FPDF_BStr_*, FPDF_GetRecommendedV8Flags, και FPDF_GetArrayBufferAllocatorSharedInstance
- Το FPDFText_SetPositions έγινε προαιρετικό ώστε το PDFiumPas να συνεχίζει να φορτώνει με PDFium DLLs που δεν εξάγουν αυτόν τον πειραματικό text-position setter
- Επεκτάθηκαν οι Delphi, C++Builder, και Lazarus regression suites σε 61 cases η καθεμία με κάλυψη δυνατοτήτων standard DLL και V8 DLL
Version 1.6.5
- Προστέθηκε επιθεώρηση tagged PDF structure-tree μέσω των TPdf.StructureElements και TPdfView.StructureElements, συμπεριλαμβανομένων των type, title, alternate text, actual text, expansion text, language, marked-content IDs, child counts, και attribute counts
- Προστέθηκε επιλογή Windows PDFium print mode μέσω των TPdfPrintMode και SetPdfPrintMode, καλύπτοντας τα print modes EMF, text-only, PostScript, pass-through, image-mask, και Type 42
- Προστέθηκαν low-level bindings για τα υπόλοιπα standard-DLL public exports του PDFium που καλύπτουν JavaScript actions, annotation form flags/font color, page-object active state, indexed insertion, content-mark float values, image ICC profile data, form-object removal, και text positions
- Επεκτάθηκαν οι Delphi, C++Builder, και Lazarus regression suites σε 59 cases η καθεμία με κάλυψη tagged PDF structure-tree, print mode, και public export bindings
Version 1.6.4
- Ενημερώθηκαν τα Delphi, C++Builder, και Lazarus demos ώστε να ανοίγουν αυτόματα τα παραγόμενα PDFs, τα εξαγόμενα text / images, και τους φακέλους batch output μετά από επιτυχή δημιουργία
Version 1.6.3
- Επεκτάθηκαν οι ευθυγραμμισμένες Delphi, C++Builder, και Lazarus regression suites σε 56 cases η καθεμία με κάλυψη GUI του TPdfView για fit-zoom helpers, round-trip συντεταγμένων device/page, character hit-testing, και mouse panning μέσω viewer controls με κρυφό παράθυρο
- Τα TPdfView fixtures χρησιμοποιούν πλέον ρητό μέγεθος viewer και test-only υποκλάσεις που ασκούν protected mouse handlers διατηρώντας τα suites πλήρως headless
Version 1.6.2
- Διορθώθηκε το TPdf.AddPage(0, ...) ώστε η εισαγόμενη πρώτη σελίδα να γίνεται αμέσως η ενεργή σελίδα. Ο υπάρχων sample κώδικας συνεχίζει να λειτουργεί, ενώ το PageNumber πλέον αναφέρει έγκυρη one-based σελίδα μετά την εισαγωγή
- Συγχρονίστηκε η έκδοση του Lazarus package και επεκτάθηκαν οι ευθυγραμμισμένες Delphi, C++Builder, και Lazarus regression suites σε 52 cases η καθεμία
Version 1.6.1
- Διορθώθηκε μια λανθασμένη απαίτηση ελάχιστης έκδοσης στον validator συμμόρφωσης PDF version της v1.6.0: η ενέργεια SetState επαναταξινομήθηκε από PDF 1.5 σε PDF 1.2, ευθυγραμμίζοντας το αποτέλεσμα με το PDF 1.2 Reference 6.9.9. Τα SaveAs targets PDF 1.3 / 1.4 που περιέχουν ενέργειες SetState αποθηκεύονται πλέον σωστά αντί να απορρίπτονται
- Προστέθηκαν αντίστοιχοι λεξικοί έλεγχοι PDF 1.2 στο ίδιο spec section: οι ενέργειες Sound, Movie, και NOP μαζί με το Separation color space μπλοκάρονται πλέον όταν η επιλεγμένη έκδοση στόχου είναι παλαιότερη από PDF 1.2
- Επεκτάθηκαν οι Delphi, C++Builder, και Lazarus regression suites σε 50 cases η καθεμία με την προσθήκη ενός θετικού PDF 1.4 SetState acceptance test που κλειδώνει το διορθωμένο όριο
Version 1.6.0
- Θωρακίστηκαν τα ρητά SaveAs targets PDF 1.0 έως PDF 1.7 με έναν πλήρη validator έκδοσης / χαρακτηριστικών που καλύπτει όλη τη διαδρομή χαρακτηριστικών από PDF 1.1 έως ISO 32000-1. Ο validator πλέον μπλοκάρει αποθηκεύσεις που περιέχουν dictionary entries, filter names, annotation subtypes, action types, fonts, color spaces, ή παραμέτρους encryption που εισήχθησαν μετά την επιλεγμένη έκδοση στόχου. Παραδείγματα: 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 annotations, AES και AES-256 encryption (CFM AESV2 / AESV3), Perms / Legal / Requirements / NeedsRendering catalog entries, και version-gated actions όπως JavaScript, Trans, SetState, Rendition, GoToE, GoTo3DView απορρίπτονται όταν η έκδοση στόχου PDF δεν μπορεί να τα αναπαραστήσει
Version 1.5.13
- Επεκτάθηκαν οι Delphi, C++Builder, και Lazarus regression suites σε 49 cases η καθεμία, προσθέτοντας άμεση κάλυψη για απόρριψη ICCBased color spaces, Tagged PDF MarkInfo, Polygon annotations, AES (V2) encryption, και Redact annotations απέναντι σε targets PDF 1.2 / 1.3 / 1.4 / 1.5 / 1.6 αντίστοιχα
Version 1.5.12
- Διορθώθηκε το post-processing του SaveAs για incremental catalog rewrites. Το PDFiumPas πλέον επικυρώνει το πιο πρόσφατο επαναλαμβανόμενο indirect object, έτσι ώστε τα υπάρχοντα catalog /Version overrides να αντικαθίστανται σωστά όταν γίνεται αποθήκευση σε ρητή παλαιότερη έκδοση στόχου PDF
- Επεκτάθηκαν οι Delphi, C++Builder, και Lazarus regression suites σε 44 cases η καθεμία, προσθέτοντας άμεση κάλυψη για αντικατάσταση παλιού catalog /Version, κανονικοποίηση catalog version PDF 1.4, και απόρριψη των χαρακτηριστικών transparency και portable-collection όταν η επιλεγμένη έκδοση στόχου PDF δεν μπορεί να τα αναπαραστήσει
Version 1.5.11
- Θωρακίστηκε το versioned SaveAs output για ρητούς στόχους PDF 1.3, 1.4, 1.5, 1.6, και 1.7. Το PDFiumPas πλέον κανονικοποιεί markers catalog version, κρατά το προεπιλεγμένο Fit Height OpenAction συμβατό με την έκδοση, και απορρίπτει νεότερα PDF features όταν η επιλεγμένη έκδοση στόχου δεν μπορεί να τα αναπαραστήσει
- Προστέθηκε regression coverage για Delphi, C++Builder, και Lazarus που αποθηκεύει και επαναφορτώνει ρητά αρχεία PDF 1.3 έως PDF 1.7, επαληθεύοντας το τελικό header, το προεπιλεγμένο Fit Height OpenAction, και την αναφερόμενη έκδοση PDF
Version 1.5.10
- Περάσαμε από την επιλογή B της προδιαγραφής στην επιλογή C προσθέτοντας smoke tests TPdfView και στις τρεις IDE suites (Tests.PdfView). Κάθε suite δημιουργεί ένα κρυφό γονικό TForm (μέσω TForm.CreateNew στις Pascal πλευρές και
new TForm(NULL, 0)στην πλευρά C++Builder), επανατοποθετεί ένα TPdfView, ορίζει Active := True, και έπειτα επαληθεύει το round-trip surface για PageCount, προεπιλογή PageNumber, Zoom, Rotation, DisplayMode, και ότι το View.Text ταιριάζει με το υποκείμενο TPdf.Text. Κάθε IDE suite τρέχει πλέον 39 cases
Version 1.5.9
- Περάσαμε από την επιλογή A της προδιαγραφής στην επιλογή B προσθέτοντας render smoke tests και στις τρεις IDE suites. Κάθε suite Tests.Render καλεί το TPdf.RenderPage στο sample.pdf και επαληθεύει τρία ισχυρά σήματα αντί για byte-for-byte checksums: το bitmap που επιστρέφεται ταιριάζει ακριβώς με το ζητούμενο μέγεθος pixel· διαφορετικά ζητούμενα μεγέθη (200x100, 64x256) παράγουν matching bitmaps· και η αποδοθείσα σελίδα έχει τουλάχιστον 95% λευκό background με τουλάχιστον 50 (Lazarus: 20) non-white pixels που σηματοδοτούν το antialiased κείμενο. Κάθε IDE suite τρέχει πλέον 33 cases
Version 1.5.8
- Κλείσαμε τις αρχικές ομάδες test plan A(2) προσθέτοντας επτά ακόμα regressions ανά IDE: το TPdf.CreateAnnotation που δημιουργεί ένα anHighlight annotation μαζί με ένα SaveAs/LoadDocument round-trip, το AcroForm read path στο Demo/Delphi/FormFill/cmp_fill_out_and_merge_forms.pdf (το FormType είναι ftAcroForm, το FormFieldCount > 0, το FlattenAllPages ρίχνει τα fields στο μηδέν), και ήσυχη κάλυψη read-path για τα Bookmarks, LinkAnnotationCount, και WebLinkCount σε έγγραφο που δεν έχει κανένα από αυτά τα χαρακτηριστικά. Κάθε IDE suite τρέχει πλέον 30 cases
Version 1.5.7
- Επεκτάθηκαν οι Delphi (DUnitX), Lazarus (FPCUnit), και C++Builder (GoogleTest) suites με επτά νέες regressions ανά IDE: PdfVersion, PageRotation, αναζήτηση υποσυμβολοσειράς μέσω TPdf.FindFirst / FindNext, συμφωνία CharacterOrigin / CharacterRectangle απέναντι στο origin του AddText, καταχώριση CreateAttachment μαζί με round-trip SaveAs/LoadDocument, και accented-text AddText round-trip που επαληθεύει ότι η διαδρομή v1.3.0 European TrueType embedding κρατά άθικτα τα supplemental code points του Latin-1
Version 1.5.6
- Τα αποθηκευμένα PDFs αποκτούν πλέον προεπιλεγμένη ενέργεια ανοίγματος Fit Height στην πρώτη σελίδα όταν δεν υπάρχει ήδη OpenAction, ώστε οι PDF readers να εμφανίζουν αρχικά τα παραγόμενα έγγραφα με zoom ύψους σελίδας
- Προστέθηκε regression coverage για Delphi, Lazarus, και C++Builder σχετικά με το παραγόμενο OpenAction και τη ρύθμιση Fit Height
Version 1.5.5
- Προστέθηκαν regression tests στις Delphi (DUnitX), Lazarus (FPCUnit), και C++Builder (GoogleTest) suites για την επιφάνεια API επιθεώρησης indexed χαρακτήρων και γραμματοσειρών (TPdf.FontBaseName, FontFamilyName, FontWeight, FontItalicAngle, FontData, FontIsEmbedded, CharacterFontWeight, CharacterAngle). Η Lazarus suite παραλείπει σκόπιμα το FontData, το οποίο προς το παρόν προκαλεί access violation μέσα στο FPDFFont_GetFontData υπό FPC
Version 1.5.4
- Προστέθηκε ένα C++Builder Attachment demo προσαρμοσμένο από το Delphi sample, καλύπτοντας τη δημιουργία PDFs, την προσθήκη, καταχώριση, εξαγωγή, διαγραφή, και αποθήκευση embedded file attachments με εμφάνιση MIME subtype
Version 1.5.3
- Εκτέθηκε ο υπολογισμός spread-page που στηρίζει τα two-page modes του TPdfView ως βοηθητικό επίπεδου unit ComputeSpreadPages(DisplayMode, PageNumber, PageCount, out LeftPageNo, out RightPageNo). Η συμπεριφορά παραμένει ίδια· το helper κάνει τον cover-aware κανόνα ανεξάρτητα δοκιμάσιμο χωρίς να δημιουργείται viewer
- Προστέθηκαν πέντε regression tests στις Delphi (DUnitX), Lazarus (FPCUnit), και C++Builder (GoogleTest) suites καλύπτοντας κενά έγγραφα, το τυπικό ζευγάρωμα δύο σελίδων, τη σελίδα εξωφύλλου μόνη της στο dmTwoPageContinuousWithCover, ζευγάρια μετά το εξώφυλλο, και συμπεριφορά clamping για τελευταία σελίδα / εκτός εύρους
Version 1.5.2
- Προστέθηκε υποστήριξη γλώσσας εγγράφου μέσω του TPdf.Language, αντιστοιχισμένης στην εγγραφή /Lang του PDF catalog
- Προστέθηκε πρόσβαση στο MIME subtype συνημμένων με το TPdf.AttachmentType
- Προστέθηκε το anRedact στο TPdfAnnotationSubtype και προστέθηκαν βοηθήματα αφαίρεσης page object για τα TPdf και TPdfView
- Ενημερώθηκαν τα viewer και attachment demos ώστε να εμφανίζουν τις νέες πληροφορίες γλώσσας και attachment type όταν είναι διαθέσιμες
Version 1.5.1
- Προστέθηκε το dmTwoPageContinuousWithCover για το TPdfView ώστε οι διατάξεις του viewer να μπορούν να δείχνουν την πρώτη σελίδα μόνη της και μετά να συνεχίζουν με spreads δύο σελίδων
- Ενημερώθηκαν τα Delphi, C++Builder, και Lazarus MultiPageViewer demos ώστε να εκθέτουν τη cover-aware λειτουργία προβολής δύο σελίδων
Version 1.5.0
- Προστέθηκαν αυτοματοποιημένα smoke-level test suites για Delphi (DUnitX), Lazarus (FPCUnit), και C++Builder (GoogleTest). Τα τρία suites μοιράζονται ένα κοινό fixture PDF στο Tests\TestData και τρέχουν τις ίδιες επτά cases το καθένα, καλύπτοντας φόρτωση εγγράφου, πληροφορίες σελίδας, εξαγωγή κειμένου, μεταδεδομένα, save round-trip, επικύρωση PDF header, και την ιδιότητα Compressed
Version 1.4.3
- Βελτιώθηκε το FontProperties demo ώστε να δείχνει τόσο τα font metadata APIs του TPdfView όσο και του TPdf, συμπεριλαμβανομένων font handles, μεγέθους font data, και μετρικών χαρακτήρων
- Προστέθηκαν indexed properties επιθεώρησης χαρακτήρων και γραμματοσειρών στο TPdfView και ενημερώθηκε το FontProperties demo ώστε να ζητά metadata γραμματοσειράς για text objects
Version 1.4.2
- Προστέθηκαν indexed properties επιθεώρησης χαρακτήρων και γραμματοσειρών στο TPdf για ανάλυση κειμένου χωρίς να απαιτείται viewer. Οι χαρακτήρα-indexed ιδιότητες (CharacterAngle, CharacterFontSize, CharacterFontWeight) ζητούν μετρικές ανά χαρακτήρα από το text stream της τρέχουσας σελίδας. Οι page-object-indexed ιδιότητες (FontAscent, FontBaseName, FontData, FontDescent, FontFamilyName, FontHandle, FontIsEmbedded, FontItalicAngle, FontWeight) ζητούν metadata γραμματοσειράς για οποιοδήποτε text object στην τρέχουσα σελίδα
- Τα μη-text page objects επιστρέφουν ασφαλείς μηδενικές ή κενές τιμές για όλες τις Font* ιδιότητες αντί να εγείρουν σφάλμα, κάνοντας εύκολη την επανάληψη σε κάθε page object και την επιθεώρηση μόνο των κειμενικών
- Το FontBaseName διαβάζει απευθείας το PostScript base font name αντί να επιστρέφει το font family name, δίνοντας ακριβέστερο αναγνωριστικό για ενσωματωμένες γραμματοσειρές
Version 1.4.1
- Προστέθηκαν C++Builder και Lazarus εκδόσεις του EuropeanText demo ώστε όλες οι υποστηριζόμενες οικογένειες IDE να μπορούν να επαληθεύουν παραγωγή τονισμένου ευρωπαϊκού κειμένου με system TrueType fonts
- Προστέθηκαν C++Builder και Lazarus εκδόσεις του FormFill demo, μαζί με sample form PDFs, επεξεργασία πεδίων, αναγέννηση εμφάνισης, αποθήκευση με συμπλήρωση, και workflows αποθήκευσης με flattening
Version 1.4.0
- Προστέθηκε υποστήριξη Lazarus / Free Pascal: το νέο package PDFiumLaz παρέχει τα ίδια TPdf, TPdfView, και σχετικά components κάτω από το LCL widget set, επεκτείνοντας τη βιβλιοθήκη στο Lazarus IDE και τον Free Pascal compiler μαζί με τα υπάρχοντα Delphi και C++Builder packages
- Προστέθηκαν Lazarus εκδόσεις των demos ώστε οι developers του Lazarus να μπορούν να εξερευνήσουν κάθε δυνατότητα με runnable παραδείγματα
- Διορθώθηκε ένα Lazarus compilation issue όπου τα conditional defines του Free Pascal αξιολογούνταν μαζί με Delphi compiler-version checks, κάνοντας τα FPC builds να προσπαθούν να επιλύσουν Delphi-specific unit names και να αποτυγχάνουν
Version 1.3.1
- Τεκμηριώθηκε το workflow flattening φόρμας στο help set: τα GenerateFormAppearances, FlattenPage, FlattenAllPages, και οι σχετικές σταθερές FLAT_* / FLATTEN_* καλύπτονται πλέον στο TPdf, στο TPdfView, στο API reference, στον feature matrix, και στα programming examples
- Διορθώθηκε ο πίνακας αρχιτεκτονικής στη σελίδα επισκόπησης ώστε να παραθέτει τα πραγματικά binding units που συνοδεύουν τον φάκελο Lib
Version 1.3.0
- Βελτιώθηκε η υποστήριξη ευρωπαϊκών χαρακτήρων κατά τη δημιουργία PDFs. Το TPdf.AddText πλέον φορτώνει και αποθηκεύει στην cache το αντίστοιχο system TrueType font πριν δημιουργήσει text object, διατηρώντας τονισμένους χαρακτήρες από Czech, French, German, Spanish, Portuguese, Polish, και Turkish που οι ενσωματωμένες standard γραμματοσειρές του PDFium δεν μπορούν να αναπαραστήσουν
- Οι εφαρμογές που παλιότερα παρήγαν ερωτηματικά ή replacement glyphs για μη-ASCII λατινικό κείμενο θα αποδίδονται πλέον σωστά χωρίς καμία αλλαγή κώδικα. Προστέθηκε το EuropeanText demo για να δείχνει τη δυνατότητα
Version 1.2.0
- Προστέθηκε ανανέωση εμφάνισης AcroForm στο TPdf: η κλήση GenerateFormAppearances μετά από τροποποίηση των τιμών FormField[] ενημερώνει το widget appearance έτσι ώστε οι συμπληρωμένες τιμές να είναι ορατές σε standard PDF readers χωρίς να απαιτείται διαδραστική συνεδρία επεξεργασίας
- Προστέθηκαν βοηθήματα flattening φόρμας στο TPdf (FlattenPage / FlattenAllPages) και στο TPdfView (FlattenPage για την τρέχουσα σελίδα προβολής). Το flattening ενσωματώνει μόνιμα τις τιμές των συμπληρωμένων πεδίων ως κανονικό περιεχόμενο σελίδας και αφαιρεί το διαδραστικό form layer, παράγοντας στατικό έγγραφο που αποδίδεται με συνέπεια σε όλους τους viewers
- Προστέθηκε το Demo\Delphi\FormFill για να δείχνει τα workflows fill-and-save και fill-and-flatten με sample AcroForm PDF
Version 1.1.2
- Προστέθηκε συμπίεση PDF stream κατά την αποθήκευση. Η νέα ιδιότητα TPdf.Compressed (ενεργοποιημένη από προεπιλογή) ξαναγράφει τα μη συμπιεσμένα content streams ως FlateDecode-compressed streams κατά την αποθήκευση, μειώνοντας σημαντικά το μέγεθος αρχείου για PDFs που δημιουργούνται προγραμματιστικά. Οι εφαρμογές που χρειάζονται απλή μη συμπιεσμένη έξοδο μπορούν να ορίσουν το Compressed σε False πριν καλέσουν το SaveAs
Version 1.1.1
- Τα builds του Win64 package δεν περιλαμβάνουν πλέον design-time registration units, αποτρέποντας αποτυχίες κατά το build όταν το Win64 package αναπτύσσεται σε runtime-only context
- Ο loader του PDFium DLL αναζητά πλέον πρώτα το Win32 ή Win64 application subdirectory, χρησιμοποιώντας τα standard ονόματα pdfium.dll και pdfium.v8.dll, και μετά πέφτει πίσω στο flat directory της εφαρμογής και στο Windows system directory. Αυτό ταιριάζει με τη διάταξη DLL που συνοδεύει το component package, κάνοντας την εγκατάσταση απλή
Version 1.1.0
- Διορθώθηκε ένα οπτικό clipping defect στο two-page mode του TPdfView: το περιεχόμενο της σελίδας ξεχείλιζε μέσα από το gutter επειδή τα αριστερά και δεξιά page tiles μοιράζονταν ένα μόνο clipping rectangle. Κάθε tile πλέον κάνει clipping ανεξάρτητα ώστε το περιεχόμενο να μένει μέσα στο όριο της σελίδας του
- Βελτιώθηκε το μήνυμα σφάλματος του Delphi demo όταν δεν μπορεί να βρεθεί το PDFium DLL, παρέχοντας πιο καθαρή προτροπή με το αναμενόμενο όνομα και τη θέση του DLL