PDFium Component Docs

PDFiumPas Σημειώσεις έκδοσης

Ιστορικό εκδόσεων για λειτουργίες ορατές στον χρήστη, διορθώσεις, βελτιώσεις προβολής, παραγωγή εγγράφων, έξοδο PDF/A, απόδοση και ενημερώσεις τεκμηρίωσης του PDFiumPas

Τελευταία έκδοση

Version 2.57.0

Προστέθηκε (Added)

Αλλαγμένο (Changed)

Version 2.56.2

Αλλαγμένο (Changed)

Version 2.56.1

Αλλαγμένο (Changed)

Version 2.56.0

Προστέθηκε (Added)

Αλλαγμένο (Changed)

Version 2.55.0

Προστέθηκε (Added)

Αλλαγμένο (Changed)

Version 2.54.0

Προστέθηκε (Added)

Αλλαγμένο (Changed)

Version 2.53.1

Διορθώθηκε (Fixed)

Version 2.53.0

Προστέθηκε (Added)

Version 2.52.0

Προστέθηκε (Added)

Αλλαγμένο (Changed)

Version 2.51.0

Προστέθηκε (Added)

Αλλαγμένο (Changed)

Version 2.50.0

Προστέθηκε (Added)

Αλλαγμένο (Changed)

Version 2.49.1

Προστέθηκε (Added)

Διορθώθηκε (Fixed)

Version 2.49.0

Προστέθηκε (Added)

Αλλαγμένο (Changed)

Διορθώθηκε (Fixed)

Version 2.48.0

Προστέθηκε (Added)

Αλλαγμένο (Changed)

Διορθώθηκε (Fixed)

Version 2.47.0

Προστέθηκε (Added)

Αλλαγμένο (Changed)

Διορθώθηκε (Fixed)

Version 2.46.0

Προστέθηκε (Added)

Αλλαγμένο (Changed)

Διορθώθηκε (Fixed)

Version 2.45.0

Προστέθηκε (Added)

Αλλαγμένο (Changed)

Διορθώθηκε (Fixed)

Version 2.44.0

Προστέθηκε (Added)

Αλλαγές (Changed)

Διορθώσεις (Fixed)

Version 2.43.0

Προστέθηκε (Added)

Αλλαγές (Changed)

Διορθώσεις (Fixed)

Version 2.42.0

Προστέθηκε (Added)

Αλλαγές (Changed)

Διορθώσεις (Fixed)

Version 2.41.0

Αλλαγές (Changed)

Διορθώσεις (Fixed)

Version 2.40.0

Αλλαγές (Changed)

Διορθώσεις (Fixed)

Version 2.39.1

Διορθώσεις (Fixed)

Version 2.39.0

Αλλαγές (Changed)

Διορθώσεις (Fixed)

Version 2.38.0

Αλλαγές (Changed)

Διορθώσεις (Fixed)

Version 2.37.0

Αλλαγές (Changed)

Διορθώσεις (Fixed)

Σημειώσεις (Notes)

Version 2.36.0

Αλλαγές (Changed)

Διορθώσεις (Fixed)

Version 2.35.0

Αλλαγές (Changed)

Version 2.34.0

Προστέθηκε (Added)

Version 2.33.0

Προστέθηκε (Added)

Version 2.32.0

Προστέθηκε (Added)

Version 2.31.0

Προστέθηκε (Added)

Version 2.30.0

Προστέθηκε (Added)

Διορθώσεις (Fixed)

Version 2.29.0

Προστέθηκε (Added)

Διορθώσεις (Fixed)

Version 2.28.0

Προστέθηκε (Added)

Αλλαγές (Changed)

Διορθώσεις (Fixed)

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_PDFEVersion PDF/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 /Info trailer για cross-reference-stream εγγραφα εντοπίζει τώρα σωστά το XRef stream dictionary

Version 2.14.4

Διορθώθηκε (Fixed)

  • Η ημερομηνία /M του λεξικού υπογραφής που γράφεται από TPdf.SignPades και SignPadesBytes φέρει τώρα την υποχρεωτική πρόθεμη D: και τον δείκτη UTC offset Z (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 έκδοσης 2 FPDF_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-screen TBitmap 32-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 /ESIC Level 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 ως μη υπογεγραμμένο χαρακτηριστικό SignerInfo signature-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 backend
  • FPdfTsaWin: backend WinHttp των Windows, δυναμικά συνδεδεμένο από winhttp.dll (μηδενική νέα εξάρτηση χρόνου μεταγλώττισης· το HTTPS διαπραγματεύεται από το Windows certificate store). Αντικατοπτρίζει το μοτίβο δυναμικής σύνδεσης του FPdfCryptoWin
  • FPdfCms: το 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 χωρίς κλαδιά RTL
  • FPdfAsn1: κωδικοποιητής DER (TDerWriter) και αναγνώστης (TDerReader) που καλύπτουν SEQUENCE/SET/OID/INTEGER/OCTET STRING/UTCTime/GeneralizedTime/context-specific tags, με την κωδικοποίηση definite-length και τη διαχείριση IMPLICIT-tag που απαιτεί το CMS
  • FPdfCms: κατασκευαστής 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.4
  • FPdfCrypto + FPdfCryptoWin: αφαίρεση κρυπτογραφικού backend με PadesCryptoAvailable / ResolvePadesSigner, και η υλοποίηση Windows που συνδέει δυναμικά crypt32.dll / ncrypt.dll (καμία νέα εξάρτηση DLL χρόνου μεταγλώττισης). Οι υπογραφές ECDSA επανακωδικοποιούνται από τη μορφή IEEE P1363 r¦s των Windows στη μορφή DER ECDSA-Sig-Value που απαιτεί το CMS
  • SignPadesBytes: έγχυση υπογραφής σε επίπεδο 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, διατρέχουν το CMS SignedData μέσα στο /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, το σχήμα του CMS SignedData (ενικός υπογράφων, 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 για τον φάκελο MIME multipart/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: η τιμή enum ptvUnknown αφαιρείται (το 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 του καταλόγου επιλύεται και το XMP pdfaid: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 (με BOM FE FF) και οι απλές δεκαεξαδικές συμβολοσειρές ASCII αποκωδικοποιούνται πλέον και υποβάλλονται στον ίδιο γραμματικό έλεγχο BCP 47 όπως οι κυριολεκτικές συμβολοσειρές (...), με αποτέλεσμα να εντοπίζεται μια μη έγκυρη δεκαεξαδική συμβολοσειρά /Lang ενώ μια συμμορφούμενη (π.χ. μια UTF-16BE en-US) δεν κινδυνεύει πλέον να επισημανθεί

Αλλαγή

  • Το pvuaiFontMissingToUnicode (§7.21.7) εξαιρεί πλέον το /MacExpertEncoding μαζί με τα /WinAnsiEncoding και /MacRomanEncoding, ευθυγραμμιζόμενο με τις τέσσερις συνθήκες εξαίρεσης που αναφέρει η ρήτρα

Version 1.98.0

Προστέθηκε

  • Το pvuaiNeedAppearancesTrue (§7.18.4) επισημαίνει ένα AcroForm του οποίου η σημαία /NeedAppearances είναι αληθής, έτσι ώστε οι εμφανίσεις γραφικών στοιχείων να μην κλειδώνονται αξιόπιστα και η υποστηρικτική τεχνολογία να μην μπορεί να τα συσχετίσει με το δέντρο δομής. Μεταφέρθηκε από τον επικυρωτή 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 / pua1pucNone / puc1 στο PDFSpecComplianceMatrix.md

Version 1.95.0

Αλλαγή

  • Έλεγχος ανάκλησης και ορθότητας του TPdf.ValidatePdfUa: ο έλεγχος §7.21.3.3 pvuaiCMapWModeMismatch και ο έλεγχος §7.21.7 pvuaiToUnicodeForbiddenValue αποσυμπιέζουν πλέον τις ροές CMap / ToUnicode που είναι συμπιεσμένες με FlateDecode πριν από τη σάρωση (προηγουμένως κρίνονταν μόνο οι μη συμπιεσμένες ροές, ένα γνωστό ψευδώς αρνητικό). Οι κοινόχρηστοι βοηθοί PdfInflate / PdfReadAndDecodeStream προήχθησαν από τα FPdfPdfa / FPdfPdfx στο FPdfPdfCommon έτσι ώστε κάθε μονάδα συμμόρφωσης να μοιράζεται ένα αντίγραφο

Προστέθηκε

  • Το pvuaiSubsetCharSetEmpty (§7.21.4.2) επισημαίνει ένα υποσύνολο Type 1 FontDescriptor που φέρει ένα κλειδί /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_GetFontFPDFFont_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_GetFontFPDFFont_GetIsEmbedded και αναφέρει μια μη ενσωματωμένη γραμματοσειρά ως pvxiPdfiumFontNotEmbedded — πιο ακριβές από την ευρετική μέθοδο επιπέδου byte που ενεργοποιείται μόνο όταν δεν υπάρχουν προγράμματα γραμματοσειρών. Η διαδρομή βραχυκυκλώνει στην πρώτη μη ενσωματωμένη γραμματοσειρά που εντοπίζεται

Αλλαγή

  • Διαδρομή δέντρου δομής του TPdf.ValidatePdfUa: η κλήση ValidatePdfUaPageContentTagging ανά σελίδα (η οποία δημιουργεί έναν χάρτη αξιώσεων marked-content-ID και διασταυρώνει κάθε αντικείμενο κειμένου/εικόνας) παρακάμπτεται πλέον σε επόμενες σελίδες μόλις εντοπιστεί το pvuaiUntaggedContent — τα στοιχεία δομής εξακολουθούν να συλλέγονται για τους ελέγχους μεταξύ σελίδων (μοναδικό αναγνωριστικό σημείωσης, αλληλουχία επικεφαλίδων), αλλά το δαπανηρό πέρασμα σήμανσης περιεχομένου ανά σελίδα σταματά νωρίς

Version 1.89.0

Αλλαγή

  • Απόδοση επιπέδου μοντέλου αντικειμένων Pdfium του TPdf.ValidatePdfA: η διαδρομή σελίδας/αντικειμένου βραχυκυκλώνει πλέον σε τρία επίπεδα — ο βρόχος σελίδας τερματίζεται όταν έχουν ήδη βρεθεί όλα τα ισχύοντα ζητήματα επιπέδου Pdfium, ο βρόχος ανά αντικείμενο τερματίζεται όταν έχουν οριστεί και τα δύο ζητήματα ανά αντικείμενο (ενσωμάτωση γραμματοσειράς + διαφάνεια) και η σάρωση χαρακτήρων σελίδας κειμένου παρακάμπτει το πέρασμα .notdef όταν έχει ήδη σημειωθεί UnicodeMapError. Οι έλεγχοι διαθεσιμότητας API Assigned() και οι σημαίες συμμόρφωσης αποθηκεύονται σε τοπικές λογικές μεταβλητές μία φορά πριν από τον βρόχο αντί να επανεκτιμώνται σε κάθε σελίδα/αντικείμενο/χαρακτήρα. Σε ένα μεγάλο μη συμμορφούμενο έγγραφο η διαδρομή μπορεί πλέον να σταματήσει μετά την πρώτη σελίδα αντί να σαρώνει όλες τις σελίδες· σε ένα συμμορφούμενο έγγραφο η επιβάρυνση ανά σελίδα είναι χαμηλότερη (χωρίς επαναλαμβανόμενες κλήσεις 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_GetObjectFPDFTextObj_GetFontFPDFFont_GetIsEmbedded και αναφέρει μια μη ενσωματωμένη γραμματοσειρά που έχει αποδοθεί ως pvaiPdfiumFontNotEmbedded (ISO 19005 6.3.4), και φορτώνει κάθε σελίδα κειμένου για να σαρώσει το FPDFText_HasUnicodeMapError και να αναφέρει μια σπασμένη αντιστοίχιση Unicode ως pvaiPdfiumUnicodeMapError (6.3.8). Αυτοί είναι έλεγχοι που δεν μπορεί να κάνει ο επιθεωρητής επιπέδου byte — βλέπει μόνο name tokens, όχι επιλυμένους δείκτες (handles) γραμματοσειράς ή κατάσταση αντιστοίχισης ανά χαρακτήρα — και συγχωνεύονται στο αποτέλεσμα του επιπέδου byte. Η αυτόνομη συνάρτηση επιπέδου byte ValidatePdfACompliance παραμένει αμετάβλητη

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 και μια φθίνουσα ακολουθία δεν πρέπει να παραλείπει ένα ενδιάμεσο επίπεδο, π.χ. το H1H3 αποτελεί παράβαση). Ο έλεγχος επικεφαλίδων είναι ο πρώτος κανόνας επιπέδου δέντρου δομής του PDF/UA στον επικυρωτή: η ValidatePdfUaStructureElements τώρα διατρέχει τη λίστα στοιχείων με τύπο και επαληθεύει την ακολουθία H1H6 (και H7+ σύμφωνα με το 7.4.3) με τη σειρά του εγγράφου

Version 1.67.0

Προστέθηκε

  • Η ValidatePdfUa απέκτησε πέντε νέες τιμές TPdfUaValidationIssue (προστέθηκαν στο τέλος, οι υπάρχουσες τιμές παραμένουν αμετάβλητες): pvuaiLinkMissingContents (ISO 14289-1 7.18.5 — ένας σχολιασμός Link πρέπει να φέρει εναλλακτική περιγραφή μέσω του /Contents), pvuaiAnnotationMissingContents (7.18.1 — κάθε μη εξαιρούμενος σχολιασμός χωρίς /Contents πρέπει να έχει εναλλακτική περιγραφή· τα Popup και Widget εξαιρούνται), pvuaiEmbeddedFileMissingName (7.11 — ένα λεξικό προδιαγραφής αρχείου πρέπει να περιέχει /F και /UF), pvuaiMediaClipMissingAlt (7.18.6.2 — ένα λεξικό δεδομένων αποσπάσματος πολυμέσων πρέπει να περιέχει /CT και /Alt), και pvuaiCidFontMissingCidToGidMap (7.21.3.2 — μια ενσωματωμένη CIDFont Type 2 πρέπει να περιέχει /CIDToGIDMap)

Version 1.66.0

Προστέθηκε

  • Η ValidatePdfUa απέκτησε πέντε νέες τιμές TPdfUaValidationIssue (προστέθηκαν στο τέλος, οι υπάρχουσες τιμές παραμένουν αμετάβλητες): pvuaiRoleMapMissing (ISO 14289-1 7.1 — ένα ετικεταρισμένο έγγραφο με μη τυπικούς τύπους δομής πρέπει να φέρει ένα /RoleMap), pvuaiOptionalContentAsKey (7.10 — ένα λεξικό διαμόρφωσης προαιρετικού περιεχομένου δεν πρέπει να φέρει το κλειδί αυτόματης κατάστασης /AS), pvuaiXfaPresent (7.15 — η παρουσία ενός /XFA AcroForm επισημαίνεται επειδή το δυναμικό XFA απαγορεύεται), pvuaiTrapNetAnnotation (7.18.2 — οι σχολιασμοί /TrapNet απαγορεύονται), και pvuaiReferenceXObject (7.20 — τα Reference XObjects, με κλειδί τον δείκτη /Ref, απαγορεύονται)

Διορθώθηκε

  • Η ValidatePdfUa δεν δίνει πλέον ψευδώς θετικά αποτελέσματα pvuaiEncryptionPresent σε κάθε κρυπτογραφημένο αρχείο: το PDF/UA επιτρέπει την κρυπτογράφηση εφόσον το κλειδί /P του λεξικού κρυπτογράφησης έχει ορισμένη τη θέση 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 να αποτυγχάνει καθαρά) και απορρίπτουν αρνητικό offset startxref αντί να διακινδυνεύουν ανάγνωση εκτός ορίων

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 δέχονται πλέον offsets size_t και το size_t έχει πλάτος δείκτη στο Free Pascal / Lazarus Win64 (προηγουμένως αποκόπτονταν σε 32-bit), διορθώνοντας τα API calls διαθεσιμότητας δεδομένων και τα out size_t στο FPC Win64

Διορθώθηκε (Διορθώθηκε)

  • Ασφάλεια μνήμης: χρήση μετά την απελευθέρωση του form-fill timer κατά την καταστροφή ενός TPdf με ενεργό AcroForm caret· διπλό FPDF_CloseDocument στη διαδρομή σφάλματος του ImportNPagesToOne· εξαιρέσεις Pascal που διαφεύγουν από τα callbacks FPDF_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 offset startxref δεν προκαλεί πλέον 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), προχωρά μέσα από τα φορτωμένα chunks TPdfSpokenText καθώς ο host αναφέρει ότι η μηχανή είναι αδρανής μέσω του Tick, μεταφράζει τα offsets του spoken text πίσω σε χαρακτήρες σελίδας και οδηγεί αυτόματα έναν συνδεδεμένο word cursor του TPdfView; ο host συνδέει οποιαδήποτε speech engine μέσω του OnSpeak και των request events ακύρωσης / παύσης / συνέχισης, έτσι ώστε η βιβλιοθήκη να μην συνδέει καμία speech API από μόνη της
  • FeedSpokenPosition καταναλώνει θέσεις λέξης της μηχανής (όπως το SAPI Status.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 που αναφέρει η μηχανή (όπως το SAPI Status.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, ορατές ανά αρχείο και ως μέσος όρος batch
  • AccessibilityWorkbenchCli δέχεται failscore=N για να αποτυγχάνει η εκτέλεση (exit code 2) όταν οποιοδήποτε αρχείο σκοράρει κάτω από N
  • AccessibilityWorkbenchCli γράφει ένα SARIF 2.1.0 log όταν το όνομα της batch summary τελειώνει σε .sarif, με έναν κανόνα ανά είδος ευρήματος που φέρει τις ετικέτες WCAG 2.1 και PDF/UA για εισαγωγή σε CI και code-scanning
  • AccessibilityWorkbenchCli προσθέτει μια εντολή version που εκτυπώνει την συνδεδεμένη έκδοση PDFiumPas

Version 1.56.6

Προστέθηκε

  • IntakeWorkbenchCli υπολογίζει ένα forensic hash SHA-256 για κάθε αρχείο εισόδου (υποβαθμίζοντας σε unavailable σε compilers χωρίς System.Hash) και το αναφέρει σε κάθε format
  • IntakeWorkbenchCli δέχεται passwords=file.txt για να δοκιμάζει το ξεκλείδωμα εγγράφων που απαιτούν κωδικό από μια λίστα υποψηφίων, καταγράφοντας το index του ταιριαστού υποψηφίου χωρίς ποτέ να γράφει το κείμενο του κωδικού
  • IntakeWorkbenchCli δέχεται copyto=dir για να δρομολογεί κάθε ελεγμένο αρχείο σε έναν υποφάκελο ανά επίπεδο κινδύνου, μετατρέποντας τον auditor σε intake sorter
  • IntakeWorkbenchCli γράφει ένα SARIF 2.1.0 log όταν το όνομα της batch summary τελειώνει σε .sarif, με έναν κανόνα ανά flag κινδύνου και ένα αποτέλεσμα ανά επισημασμένο αρχείο για εισαγωγή σε CI και code-scanning
  • IntakeWorkbenchCli προσθέτει μια εντολή version που εκτυπώνει την συνδεδεμένη έκδοση PDFiumPas

Version 1.56.5

Προστέθηκε

  • IntakeWorkbenchCli παράγει πλέον προτεινόμενες ενέργειες μετά το intake όπως accept, request-password, manual-review, quarantine και deduplicate, και εκθέτει μετρητές ενεργειών στις batch summaries
  • AccessibilityWorkbenchCli παράγει πλέον προτεινόμενες ενέργειες αποκατάστασης όπως 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 που είχε καταχωρίσει handler OnUnsupportedFeature τον αποσυνδέει πλέον από το process-global callback του PDFium, ώστε ένα μεταγενέστερο document load από άλλη TPdf instance χωρίς δικό της handler να μην μπορεί πλέον να κατευθυνθεί στο ελεύθερο component (use-after-free)

Version 1.56.3

Διορθώθηκε

  • AccessibilityWorkbenchCli δεν μετρά πλέον τις κενές σελίδες ως heuristic reading-order pages, έτσι ώστε τα tagged documents με κενές separator pages να διατηρούν τη σωστή κατάσταση προσβασιμότητας; οι σελίδες χωρίς αναγνώσιμο περιεχόμενο αναφέρονται πλέον ξεχωριστά
  • AccessibilityWorkbenchCli η ανίχνευση table-header δεν αποδίδει πλέον σε έναν εξωτερικό πίνακα τα TH cells που ανήκουν σε φωλιασμένο πίνακα, και τα ονόματα 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 (όπως το SAPI Status.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 αναφέρουν την τιμή του τρέχοντος πεδίου, το ανθρώπινα αναγνώσιμο όνομα (/TU tooltip, με επιστροφή στο /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 χωρίζουν μια σελίδα σε records TPdfWordBox, το καθένα με το κείμενο της λέξης, το εύρος χαρακτήρων της και ένα 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 γραμμικοποιούν το ρεύμα αναγνώσιμου περιεχομένου σε ταξινομημένα records TPdfReadingUnit μεγέθους πρότασης — το καθένα φέρει το κείμενο που θα ειπωθεί μαζί με το σημασιολογικό του είδος, τη σελίδα, τα 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 (αρχεία που δεν έχουν το keyword trailer) Το επίπεδο συμμόρφωσης, το 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 element Formula του οποίου το εναλλακτικό κείμενο δίνεται μέσω ActualText αντί για entry Alt (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 επιστρέφουν μια ταξινομημένη λίστα semantic TPdfContentFragment στοιχείων, το καθένα με το προφορικό κείμενο (πραγματικά 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, και ο νέος helper ClassifyStructType

Version 1.45.0

Προστέθηκε

  • ValidatePdfUa περπατά πλέον και το ζωντανό tagged structure tree και αναφέρει τρεις content violations με υψηλή βεβαιότητα που το byte-level scanning δεν μπορεί να εντοπίσει: ένα element Figure χωρίς entry Alt ή ActualText (ISO 14289-1, 7.3), ένα element Formula χωρίς attribute Alt (7.7) και ένα element Note που δεν έχει μοναδικό 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 #xx escapes, ώστε τα άκυρα ονόματα επιπέδου ιεραρχίας να αναφέρονται μέσω 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 αφήνει πλέον έναν marker pdfvtid: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 workflow
  • ValidatePdfVT επικυρώνει πλέον τη χρησιμοποιήσιμη 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)
  • Τρεις νέες τιμές TPdfUaValidationIssuepvuaiFontNotEmbedded, 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 ή /MarkInfo dictionary διατηρούνται και ένα 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 επιτρέπονται (η δική τους συμμόρφωση δεν επαληθεύεται αναδρομικά) Ένα νέο issue pvaiUnicodeMappingMissing αναφέρει ένα 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 Η enumeration TPdfAConformance αποκτά τα pac2a, pac2u, pac3a και pac3u (το PDF/A-1 δεν έχει Level u) Η αποθήκευση γράφει τα αντίστοιχα pdfaid:part (2 ή 3) και pdfaid:conformance (A, B ή U), διατηρώντας το OutputIntent subtype GTS_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.2 SetState εξακολουθεί να γίνεται αποδεκτή από το 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, συμπληρώνοντας το ήδη υπάρχον binding FPDFTextObj_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 και τις επιλογές spread DisplayMode το 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, εφαρμόζει transforms TPdfMatrix και αποθηκεύει κεντραρισμένα 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, εφαρμόζει transforms TPdfMatrix και αποθηκεύει κεντραρισμένα 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 για το επαναχρησιμοποιήσιμο workflow FPdfPreflightReport
  • Το δείγμα 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, είσοδο streaming TFileStream, πρόοδο ανά αρχείο και ανά σελίδα, διαχείριση ακύρωσης, 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 ενημερώθηκε ώστε να χρησιμοποιεί το τρέχον pattern TPdfMatrix.Handle όταν περνά matrices στο FPDFPageObj_SetMatrix
  • Ενημερώθηκαν το TPdf.AboutInfo, τα Lazarus package metadata και τα installer version metadata ώστε να αναφέρουν 1.39.2

Version 1.39.1

  • Προστέθηκε το Demo\Delphi\ViewerInteractionLab, ένα εστιασμένο sample TPdfView για 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 sample SplitView με αφαίρεση διπλού import Winapi.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 σε τιμές Windows DEVMODE.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 TBitmap DIB 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 URIs http://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, παρουσία του υποκείμενου identifier pdfxid: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 / DPart tree 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 CMYK IccProfileData για 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), και έναν πίνακα /ID trailer που απαιτείται από το §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