property Attachment[Index: Integer]: TBytes;
Los documentos PDF pueden llevar archivos auxiliares arbitrarios (hojas de cálculo de origen, documentos Word originales, facturas adjuntas, cargas XML firmadas, paquetes ZIP, incluso otros PDF) dentro de un contenedor a nivel de documento llamado el árbol de nombres EmbeddedFiles. Cada entrada es un diccionario de especificación de archivo PDF cuyo flujo contiene los bytes reales del archivo adjunto. PDFium Delphi Component expone ese árbol como un índice plano de base 0 desde 0 hasta AttachmentCount - 1
Leer Attachment[Index] devuelve el contenido en bytes decodificado del archivo adjunto como una matriz TBytes, exactamente los bytes que cualquier otro lector PDF extraería cuando el usuario hace clic en el icono del clip y guarda el adjunto. Los bytes devueltos ya están descomprimidos; puede escribirlos directamente en disco, enviarlos a un flujo o volver a introducirlos en otra instancia de TPdf si el adjunto es a su vez un PDF
Escribir reemplaza el flujo de archivo de un espacio de adjunto existente en el lugar. El espacio ya debe existir; use CreateAttachment primero si necesita agregar una entrada nueva. Las escrituras se almacenan en memoria y solo se vuelven persistentes después de guardar el documento con SaveAs
| Index | Integer. Posición basada en cero en el árbol de nombres EmbeddedFiles. Debe cumplir 0 <= Index < AttachmentCount. Los índices coinciden con los que reportan AttachmentName y AttachmentType, de modo que iterar 0..AttachmentCount - 1 visita cada adjunto exactamente una vez |
TBytes en una sola asignación; mida la presión de memoria antes de leer docenas de cargas de varios megabytes en un bucle cerradoAttachment[Index] nunca redimensiona el árbol EmbeddedFiles; solo reemplaza los bytes del flujo. Para eliminar una entrada use DeleteAttachment
var
I: Integer;
Data: TBytes;
OutPath: string;
begin
Pdf1.LoadFromFile('with-attachments.pdf');
for I := 0 to Pdf1.AttachmentCount - 1 do
begin
Data := Pdf1.Attachment[I];
OutPath := 'extracted\' + Pdf1.AttachmentName[I];
TFile.WriteAllBytes(OutPath, Data);
Memo1.Lines.Add(Format('%s (%s, %d bytes)',
[Pdf1.AttachmentName[I], Pdf1.AttachmentType[I], Length(Data)]));
end;
end;