property AttachmentCount: Integer; // read only
AttachmentCount enumera gli stream di file incorporati raggiungibili tramite l'albero dei nomi
del catalogo /Names /EmbeddedFiles (specifica PDF 1.7 sezione 7.11). Si tratta di
file arbitrari (XML, fogli di calcolo, sorgenti CAD, XML firmato, archivi ZIP,…)
inseriti nel PDF ed esposti dai visualizzatori come barra laterale “Allegati”.
Il PDF/A-3 richiede specificamente che ogni artefatto sorgente rilevante sia incorporato
in questo modo per la riproducibilità a lungo termine
Il valore è 0 quando Active è False e quando
il documento non contiene file incorporati. Le annotazioni di allegato file
(sottotipo /FileAttachment) non vengono contate qui —
sono annotazioni a livello di pagina e vengono mostrate tramite AnnotationCount.
PDFium Delphi Component espone gli stream incorporati come TBytes tramite
Attachment[Index]; il nome di file leggibile e il tipo in stile MIME sono
disponibili tramite AttachmentName[Index] e
AttachmentType[Index]
Il ciclo tipico è for I := 0 to Pdf.AttachmentCount - 1 do. Ogni
accesso a Attachment[I] decomprime lo stream del file incorporato in memoria,
quindi memorizza in cache i TBytes se devi scriverli su disco e passarli a un
parser. L'aggiunta o la rimozione di un allegato invalida gli indici — rileggi
AttachmentCount dopo una modifica
Viene enumerato solo l'albero dei nomi /EmbeddedFiles. Un file associato
di PDF 2.0 (ISO 32000-2 §7.11.4) referenziato esclusivamente da un array
/AF — sul catalogo, una pagina, un'annotazione o qualunque altro
oggetto — e non registrato anche nell'albero dei nomi non viene contato e non ha
indice per Attachment, AttachmentName o
AttachmentRelationship. Questo include i file scritti da
SaveAsWithAssociateFiles, che aggiunge
solo voci /AF. La maggior parte dei producer PDF/A-3, inclusi gli strumenti
Factur-X e ZUGFeRD, registra ogni file associato in entrambi i posti, quindi quei file
vengono elencati normalmente
FeatureSupported(feAttachment) per rilevare se la
build PDFium installata supporta la modifica dei nomi degli allegati
var I: Integer;
var Data: TBytes;
for I := 0 to Pdf1.AttachmentCount - 1 do
begin
Data := Pdf1.Attachment[I];
TFile.WriteAllBytes(Pdf1.AttachmentName[I], Data);
end;