Rasterconversie van een geladen PDF naar PDF/A-4
HPDFArchivalConversion maakt een nieuw PDF/A-4-document uit de zichtbare pagina-inhoud van een geladen THotPDF-document, met strikte native rendering en een meegegeven sRGB ICC-profiel
Elke uitvoerpagina bevat een verliesloos gecomprimeerde RGB-rasterafbeelding op de gevraagde DPI, waarbij de oorspronkelijke zichtbare afmetingen, crop, rotatie en UserUnit in de geometrie van de uitvoerpagina terugkomen
Gebruik het aparte tekst- en vectorbehoudende profiel wanneer originele ingebedde fonts, tekstoperators, vectorpaden, images, OCR-lagen en zichtbare annotatie- of widget-appearances moeten overleven; het rasterprofiel bewaart die structuren niet
Ingangspunten
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;
Laad eerst de bron en houd eventuele input-streams in eigendom van de aanroeper in leven totdat het brondocument is vernietigd
Gebruik het bestandsingangspunt voor gewone archiveringspublicatie: het onderzoekt een bestaand doelbestand op bronaliasing, maakt daarna exclusief een tijdelijk bestand in de doelmap aan, valideert de volledige conversie, spoelt het bestand door en vervangt het doel via MoveFileEx met MOVEFILE_REPLACE_EXISTING en MOVEFILE_WRITE_THROUGH
Bij mislukte conversie, rendering, validatie, annulering of publicatie blijft een bestaand doelbestand staan en wordt de tijdelijke uitvoer verwijderd
Het streamingangspunt vereist een lege, seekbare bestemming op positie nul en wijst bekende aliassen van de invoer af via IsLoadedSourceStreamAlias; bytes worden pas gepubliceerd nadat de complete gestage uitvoer native validatie heeft doorstaan
Een mislukte schrijfpoging naar de bestemming leidt tot een best-effort-reset naar een lege stream, maar een willekeurig apparaat of een custom stream kan die reset weigeren en een gedeeltelijke schrijfactie achterlaten; gebruik het bestandsingangspunt wanneer bestandspublicatie atomisch moet zijn
Opties en resourcegrenzen
| Optie | Standaard | Betekenis |
|---|---|---|
DPI | 150 | Gevraagde fysieke resolutie, geaccepteerd bereik 36 tot en met 1200 |
MaxPages | 1000 | Maximaal aantal geladen bronpagina's |
MaxPixelsPerPage | 40,000,000 | Maximaal aantal paginapixels en maximale pixels per afzonderlijke bronafbeelding |
MaxTotalPixels | 500,000,000 | Maximaal geaccumuleerd aantal uitvoerrasterpixels |
MaxRasterBytes | 256 MiB | Maximale rasterallocatie per pagina of bronafbeelding, conservatief gecontroleerd op vier bytes per pixel |
MaxOutputBytes | 256 MiB | Maximale grootte van de gestage PDF, afgedwongen vóór streamallocatie en schrijfacties |
MaxDecodedStreamBytes | 64 MiB | Begrenst elke filterketen, de gecombineerde content-preflight per pagina, afzonderlijke native stream-read-callbacks, afzonderlijke gecodeerde bronafbeeldingsstreams en de native uitvoervalidator |
MaxTotalDecodedBytes | 256 MiB | Begrenst aanvullende native gefilterde-decoderwerkzaamheden tijdens de conversie, gecombineerde content-preflight over pagina's en geaccumuleerde native stream-read-callbacks over pagina's |
MaxInputObjects | 200,000 | Maximaal aantal al geladen indirecte objecten |
CancellationToken | nil | Geleend token dat wordt gecontroleerd vóór het werk, tijdens native rendering en decoding en vóór publicatie |
Checkpoint | nil | Geleende synchrone callback die met een nil-sender wordt aangeroepen bij conversie- en native resource-checkpoints; betreed het brondocument niet opnieuw |
Decodelimieten tellen decoderwerk en kunnen dezelfde gefilterde stream opnieuw belasten tijdens preflight, display-listcompilatie en rendering; een budget verhogen is een expliciete beslissing van de aanroeper
Pixelpreflight dekt zowel de gevraagde fysieke resolutie als de integer-DPI van de native renderer na UserUnit-schaling; zeer kleine units kunnen extra rasterpixels vereisen en fractionele pagina-afmetingen kunnen subpixel-resampling introduceren wanneer de afbeelding terug op de fysieke pagina wordt gemapt
Conversiegrenzen gelden na het laden van de bron; configureer de eigen resourcelimieten van de loader wanneer je niet-vertrouwde invoer accepteert
De bronobjectgraaf blijft behouden, terwijl read-caches en decodestatistieken gevuld kunnen worden; renderinginstellingen, annuleringstoken, backend en decode-budgetinstellingen worden bij succes en falen hersteld
Geef de converter exclusieve toegang tot zijn brondocument terwijl het deze instellingen tijdelijk toepast
Rendering en kleur
Elke pagina moet renderen zonder native fallback-diagnostiek, zonder weggelaten diagnostiek en zonder een missing-resource-fout; niet-ondersteunde inhoud wijst de conversie af in plaats van een incomplete pagina te publiceren
Het ICC-argument moet sRGB beschrijven met een herkende matrix/TRC-representatie, de standaard D50-geadapteerde primaries en de IEC sRGB-transferfunctie; niet-verwante RGB-profielen, CMYK-profielen, misvormde profielen en op LUT gebaseerde profielen worden geweigerd
De uitvoer declareert een sRGB OutputIntent en PDF/A-4 XMP-metadata; een custom proof- of uitvoer-ICC-workflow die al op de bron is geconfigureerd, wordt geweigerd omdat diens image-decoderinstellingen niet veilig als sRGB kunnen worden geherinterpreteerd
De FPC-build vereist zijn native codec-bridge met LittleCMS en wijst de conversie af wanneer dat color-management-backend ontbreekt
Van JPEG- en JPX-beeldstreams, inclusief gecodeerde inline afbeeldingen, worden de werkelijke codestream-afmetingen gecontroleerd vóór native pixeldecoding en die moeten overeenkomen met de PDF-imagedictionary
JPEG accepteert begrensde 8-bit baseline-, extended sequential- en progressive-headers; JPX accepteert begrensde J2K SIZ-headers en JP2-boxes van gewone lengte met ten hoogste vier componenten en componentprecisie van ten hoogste 16 bits
Gecodeerde codecs hebben een extra conservatief werkingsbudget van 64 bytes per bronpixel, en JPX tile-metadata wordt zowel door MaxInputObjects als door 1024 bytes per tile binnen MaxRasterBytes beperkt; het standaardrasterbudget van 256 MiB staat daarom ten hoogste 4,194,304 gecodeerde bronpixels toe, en aanroepers kunnen het expliciet verhogen voor grotere afbeeldingen
JBIG2-conversie wordt geweigerd omdat diens interne regio- en symboolallocaties niet via de beschikbare header-API begrensd kunnen worden; niet-terminale image-codecs, JP2-boxes met extended length, niet-ondersteunde wrappers en wrapped codec-streams met DecodeParms worden ook geweigerd
CCITT-faxparameters moeten de opgegeven positieve afbeeldingsafmetingen behouden; DecodeParms.Columns- en Rows-overrides die afwijken van de dictionary, inclusief onbekende Rows=0, worden vóór native decoding geweigerd
Deze controles begrenzen de bekende header- en allocatieprofielen die deze converter accepteert en beloven geen volledige procesgeheugen-sandbox voor elke native decoder
Informatie- en kwaliteitsverlies
- Vectorinhoud, fonts, transparantie en bronkleurruimten worden RGB-paginapixels; een hogere DPI verbetert het visuele detail maar vergroot geheugengebruik en bestandsgrootte
- Uitvoertekst is niet doorzoekbaar of selecteerbaar, en er wordt geen text layer of OCR-uitvoer gesynthetiseerd
- Annotaties, annotatie-appearances, formuliervelden, widget-appearances en zichtbare signature-appearances worden weggelaten in plaats van in het paginaraster gebakken
- Digitale handtekeningen, embedded files, scripts, actions, bookmarks, lagen als interactieve controls, structurele tags en de oorspronkelijke documentidentiteit worden niet bewaard
- Het resultaat bewaart geen vectorbewerkbaarheid, oorspronkelijke handtekeninggeldigheid, PDF/UA-toegankelijkheid of brondocument-semantiek
THPDFArchivalConversionReport levert succes- en annuleringsstatus, aantallen bron- en gerenderde pagina's, rasterpixels, uitvoerbytes, aantallen verwijderde annotaties/formulieren/bijlagen, een faaldiagnostiek en de native validatiebevindingen
FailureKind onderscheidt afkNone, afkConversion, afkBudget en afkCancelled; getypeerde converter-budgetfouten leveren ook BudgetMetric, BudgetObserved en BudgetLimit
Een checkpoint-exception stopt de conversie en wordt gemeld via het native faalresultaat; wrappers die de oorspronkelijke callback-exceptioncategorie nodig hebben, moeten die vasthouden voordat de converter hem vangt
De archive.pdfa4.raster-JSON- en C ABI-operatie vereist expliciete acceptatie van informatieverlies, behoudt de bronhandle, levert de gevalideerde PDF en het verliesrapport en past conservatieve job-budgetlimieten toe
Conformiteitsverificatie
De converter laadt zijn gestage uitvoer opnieuw en vereist vóór publicatie ValidatePDFA4 met het basis-PDF/A-4-profiel; de native validator dekt zijn gedocumenteerde begrensde regelset en is geen bewijs dat aan elke ISO 19005-4-vereiste is voldaan
Voor onafhankelijke acceptatie kun je veraPDF met --flavour 4 gebruiken; de regressiefixture met niet-ingebedde tekst, transparantie, een RGB-afbeelding, een link, een signature-widget en een bijlage doorstond veraPDF 1.30.2 zonder gefaalde regels of controles
Draai Tests/Delphi/Run-HotPDFArchivalTests.bat voor de gerichte niet-GUI-regressiesuite