Μετατροπή φορτωμένου PDF σε PDF/A-4 raster
Η HPDFArchivalConversion δημιουργεί ένα νέο έγγραφο PDF/A-4 από το ορατό περιεχόμενο σελίδων ενός φορτωμένου εγγράφου THotPDF, με αυστηρό native rendering και ένα sRGB ICC profile που παρέχετε εσείς
Κάθε σελίδα εξόδου περιέχει μια συμπιεσμένη χωρίς απώλειες RGB raster εικόνα στο ζητούμενο DPI, με τις αρχικές ορατές διαστάσεις, το crop, την περιστροφή και το UserUnit να αποτυπώνονται στη γεωμετρία της σελίδας εξόδου
Σημεία εισόδου
function HPDFConvertLoadedToPDFA4Raster(Source: THotPDF;
Destination: TStream; const SRGBProfile: TBytes;
const Options: THPDFArchivalConversionOptions;
out Report: THPDFArchivalConversionReport): Boolean;
function HPDFConvertLoadedToPDFA4RasterFile(Source: THotPDF;
const TargetFileName: string; const SRGBProfile: TBytes;
const Options: THPDFArchivalConversionOptions;
out Report: THPDFArchivalConversionReport): Boolean;
Φορτώστε πρώτα την πηγή και κρατήστε κάθε input stream ιδιοκτησίας του caller ζωντανό μέχρι να καταστραφεί το έγγραφο πηγής
Για κανονική αρχειακή δημοσίευση χρησιμοποιήστε το σημείο εισόδου αρχείου: ελέγχει έναν υπάρχοντα στόχο για aliasing της πηγής πριν δημιουργήσει ένα αποκλειστικό προσωρινό αρχείο στον κατάλογο στόχο, επικυρώνει την πλήρη μετατροπή, κάνει flush το αρχείο και αντικαθιστά τον στόχο με MoveFileEx χρησιμοποιώντας MOVEFILE_REPLACE_EXISTING και MOVEFILE_WRITE_THROUGH
Αποτυχίες μετατροπής, rendering, επικύρωσης, ακύρωσης και δημοσίευσης διατηρούν ένα υπάρχον αρχείο στόχο ανέπαφο και αφαιρούν την προσωρινή έξοδο
Το σημείο εισόδου stream απαιτεί έναν κενό, seekable προορισμό στη θέση zero και απορρίπτει γνωστά aliases της εισόδου μέσω IsLoadedSourceStreamAlias· δημοσιεύει bytes μόνο αφού η πλήρης staged έξοδος περάσει την native επικύρωση
Αποτυχία εγγραφής στον προορισμό προκαλεί ένα best-effort reset σε κενό stream, αλλά μια αυθαίρετη συσκευή ή custom stream μπορεί να απορρίψει αυτό το reset και να κρατήσει μερική εγγραφή· όταν η δημοσίευση αρχείου πρέπει να είναι ατομική, χρησιμοποιήστε το σημείο εισόδου αρχείου
Επιλογές και όρια πόρων
| Επιλογή | Προεπιλογή | Σημασία |
|---|---|---|
DPI | 150 | Ζητούμενη φυσική ανάλυση, αποδεκτό εύρος από 36 έως 1200 |
MaxPages | 1000 | Μέγιστος αριθμός φορτωμένων σελίδων πηγής |
MaxPixelsPerPage | 40,000,000 | Μέγιστο πλήθος pixels σελίδας και μέγιστο πλήθος pixels μεμονωμένης εικόνας πηγής |
MaxTotalPixels | 500,000,000 | Μέγιστο αθροιστικό πλήθος raster pixels εξόδου |
MaxRasterBytes | 256 MiB | Μέγιστη δέσμευση raster για σελίδα ή εικόνα πηγής, με συντηρητικό έλεγχο τεσσάρων bytes ανά pixel |
MaxOutputBytes | 256 MiB | Μέγιστο μέγεθος staged PDF, επιβάλλεται πριν από δεσμεύσεις και εγγραφές stream |
MaxDecodedStreamBytes | 64 MiB | Περιορίζει κάθε αλυσίδα φίλτρων, τον συνδυασμένο content preflight κάθε σελίδας, τα μεμονωμένα native stream-read callbacks, τα μεμονωμένα κωδικοποιημένα streams εικόνων πηγής και τον native output validator |
MaxTotalDecodedBytes | 256 MiB | Περιορίζει την πρόσθετη εργασία native filtered decoders σε όλη τη μετατροπή, τον συνδυασμένο content preflight σε όλες τις σελίδες και τα αθροιστικά native stream-read callbacks σε όλες τις σελίδες |
MaxInputObjects | 200,000 | Μέγιστος αριθμός ήδη φορτωμένων indirect objects |
CancellationToken | nil | Δανεικό token που ελέγχεται πριν την εργασία, κατά το native rendering και decoding, και πριν τη δημοσίευση |
Checkpoint | nil | Δανεικό synchronous callback που καλείται με nil sender στα checkpoints μετατροπής και native πόρων· μην επανεισέρχεστε στο έγγραφο πηγής |
Τα όρια decoding μετρούν εργασία decoder και μπορεί να χρεώσουν το ίδιο filtered stream ξανά κατά το preflight, τη μεταγλώττιση display-list και το rendering· η αύξηση ενός ορίου είναι ρητή απόφαση του caller
Το pixel preflight καλύπτει τόσο τη ζητούμενη φυσική ανάλυση όσο και το integer DPI του native renderer μετά την κλιμάκωση του UserUnit· πολύ μικρές μονάδες μπορεί να απαιτήσουν επιπλέον raster pixels, και κλασματικές διαστάσεις σελίδας μπορεί να επιφέρουν subpixel resampling όταν η εικόνα αντιστοιχιστεί ξανά στη φυσική σελίδα
Τα όρια μετατροπής ισχύουν μετά τη φόρτωση της πηγής· όταν δέχεστε μη αξιόπιστη είσοδο, ρυθμίστε τα δικά της όρια πόρων στον loader
Ο object graph της πηγής διατηρείται, ενώ read caches και στατιστικά decoding ενδέχεται να συμπληρωθούν· οι ρυθμίσεις rendering, το cancellation token, το backend και τα όρια decoding επαναφέρονται σε επιτυχία και σε αποτυχία
Δώστε στον converter αποκλειστική πρόσβαση στο έγγραφο πηγής όσο εφαρμόζει προσωρινά αυτές τις ρυθμίσεις
Rendering και χρώμα
Κάθε σελίδα πρέπει να κάνει render χωρίς native fallback diagnostic, χωρίς dropped diagnostic και χωρίς αποτυχία για πόρο που λείπει· μη υποστηριζόμενο περιεχόμενο απορρίπτει τη μετατροπή αντί να δημοσιεύσει ημιτελή σελίδα
Το όρισμα ICC πρέπει να περιγράφει sRGB με αναγνωρίσιμη αναπαράσταση matrix/TRC, τα τυπικά D50-adapted primaries και τη transfer function IEC sRGB· άσχετα RGB profiles, CMYK profiles, κατεστραμμένα profiles και profiles βάσει LUT απορρίπτονται
Η έξοδος δηλώνει ένα sRGB OutputIntent και μεταδεδομένα XMP PDF/A-4· custom proof ή output ICC workflow ήδη ρυθμισμένο στην πηγή απορρίπτεται, επειδή οι ρυθμίσεις των image decoders του δεν μπορούν να ερμηνευθούν ξανά με ασφάλεια ως sRGB
Το build FPC απαιτεί τη native codec γέφυρά του με διαθέσιμο LittleCMS και απορρίπτει τη μετατροπή όταν λείπει αυτό το color-management backend
Για τα streams εικόνων JPEG και JPX, συμπεριλαμβανομένων κωδικοποιημένων inline εικόνων, οι πραγματικές διαστάσεις codestream ελέγχονται πριν το native pixel decoding και πρέπει να συμφωνούν με το image dictionary του PDF
Το JPEG δέχεται 8-bit baseline, extended sequential και progressive headers εντός ορίων· το JPX δέχεται J2K SIZ headers εντός ορίων και JP2 boxes συνηθισμένου μήκους με το πολύ τέσσερα components και ακρίβεια component έως 16 bits
Οι κωδικοποιημένοι codecs έχουν ένα επιπλέον συντηρητικό working budget 64 bytes ανά pixel πηγής, και τα tile metadata του JPX περιορίζονται τόσο από το MaxInputObjects όσο και από 1024 bytes ανά tile μέσα στο MaxRasterBytes· το προεπιλεγμένο raster budget 256 MiB επιτρέπει συνεπώς το πολύ 4,194,304 κωδικοποιημένα pixels πηγής, και οι callers μπορούν να το αυξήσουν ρητά για μεγαλύτερες εικόνες
Η μετατροπή JBIG2 απορρίπτεται επειδή οι εσωτερικές δεσμεύσεις regions και symbols της δεν μπορούν να οριοθετηθούν από το διαθέσιμο header API· nonterminal image codecs, JP2 boxes εκτεταμένου μήκους, μη υποστηριζόμενα wrappers και wrapped codec streams με DecodeParms απορρίπτονται επίσης
Οι παράμετροι CCITT fax πρέπει να διατηρούν τις δηλωμένες θετικές διαστάσεις εικόνας· overrides DecodeParms.Columns και Rows που διαφέρουν από το dictionary, συμπεριλαμβανομένου αγνώστου Rows=0, απορρίπτονται πριν το native decoding
Οι έλεγχοι αυτοί οριοθετούν τα γνωστά header και allocation profiles που δέχεται ο converter και δεν υπόσχονται πλήρες process-memory sandbox για κάθε native decoder
Απώλεια πληροφορίας και ποιότητας
- Διανεστικό περιεχόμενο, γραμματοσειρές, διαφάνεια και χρωματικοί χώροι πηγής γίνονται RGB pixels σελίδας· μεγαλύτερο DPI βελτιώνει την οπτική λεπτομέρεια αλλά αυξάνει τη μνήμη και το μέγεθος αρχείου
- Το κείμενο εξόδου δεν είναι αναζητήσιμο ούτε επιλέξιμο, και δεν συντίθεται text layer ή έξοδος OCR
- Annotations, annotation appearances, πεδία φορμών, widget appearances και ορατά signature appearances παραλείπονται αντί να ενσωματωθούν στο raster της σελίδας
- Ψηφιακές υπογραφές, ενσωματωμένα αρχεία, scripts, actions, bookmarks, layers ως διαδραστικά controls, structural tags και η ταυτότητα του αρχικού εγγράφου δεν διατηρούνται
- Το αποτέλεσμα δεν διατηρεί επεξεργασσιμότητα vector, εγκυρότητα αρχικών υπογραφών, προσβασιμότητα PDF/UA ή σημασιολογία του εγγράφου πηγής
Το THPDFArchivalConversionReport παρέχει κατάσταση επιτυχίας και ακύρωσης, πλήθος σελίδων πηγής και rendered σελίδων, raster pixels, bytes εξόδου, πλήθος αφαιρεμένων annotations/φορμών/συνημμένων, ένα failure diagnostic και τα ευρήματα της native επικύρωσης
Το FailureKind διακρίνει τα afkNone, afkConversion, afkBudget και afkCancelled· τυποποιημένες αποτυχίες budget του converter παρέχουν επίσης BudgetMetric, BudgetObserved και BudgetLimit
Μια εξαίρεση σε checkpoint σταματά τη μετατροπή και αναφέρεται μέσω του native failure result· wrappers που απαιτούν την αρχική κατηγορία εξαίρεσης του callback πρέπει να την κρατήσουν πριν την πιάσει ο converter
Η λειτουργία archive.pdfa4.raster JSON και C ABI απαιτεί ρητή αποδοχή απώλειας πληροφορίας, διατηρεί το handle της πηγής, παραδίδει το επικυρωμένο PDF και την αναφορά απωλειών, και εφαρμόζει συντηρητικά όρια job budget
Επαλήθευση συμμόρφωσης
Ο converter ξαναφορτώνει την staged έξοδό του και απαιτεί ValidatePDFA4 με το βασικό προφίλ PDF/A-4 πριν τη δημοσίευση· ο native validator καλύπτει το τεκμηριωμένο, πεπερασμένο σύνολο κανόνων του και δεν αποτελεί απόδειξη κάθε απαίτησης του ISO 19005-4
Για ανεξάρτητη αποδοχή μπορείτε να χρησιμοποιήσετε veraPDF με --flavour 4· το regression fixture με μη ενσωματωμένο κείμενο, διαφάνεια, εικόνα RGB, σύνδεσμο, signature widget και συνημμένο πέρασε σε veraPDF 1.30.2 χωρίς κανέναν αποτυχημένο κανόνα ή έλεγχο
Εκτελέστε Tests/Delphi/Run-HotPDFArchivalTests.bat για τη στοχευμένη non-GUI σουίτα regression