procedure LoadDocument;
procedure LoadDocument(Data: Pointer; Size: NativeUInt; Buffered: Boolean = True);
| Data | Pointer. Un puntero a los datos PDF sin procesar en memoria |
| Size | NativeUInt. El tamaño del búfer de datos en bytes |
| Buffered | Boolean. Cuando es True (predeterminado), TPdf conserva su propia copia. Cuando es False, el búfer debe permanecer válido hasta que el documento se descargue |
procedure LoadDocument(const Data: TBytes; Buffered: Boolean = True);
| Data | TBytes. El contenido del archivo PDF como un array de bytes |
| Buffered | Boolean. Cuando es True (predeterminado), TPdf conserva su propia copia. Cuando es False, el array de bytes debe permanecer válido y sin cambios hasta que el documento se descargue |
procedure LoadDocument(const Data: TBytes; Index, Count: Integer; Buffered: Boolean = True);
| Data | TBytes. El array de bytes subyacente que contiene la ventana PDF |
| Index | Integer. El offset en base cero del primer byte del PDF |
| Count | Integer. El número de bytes del PDF que se van a cargar |
| Buffered | Boolean. Cuando es True (predeterminado), TPdf copia solo la ventana seleccionada. Cuando es False, el array de bytes subyacente debe permanecer válido y sin cambios hasta que el documento se descargue |
procedure LoadDocument(Data: TMemoryStream; Buffered: Boolean = True);
| Data | TMemoryStream. Un TMemoryStream que contiene los datos PDF |
| Buffered | Boolean. Cuando es True (predeterminado), TPdf conserva su propia copia. Cuando es False, la memoria del flujo debe permanecer válida hasta que el documento se descargue |
procedure LoadDocument(const Options: TPdfLoadOptions; out Report: TPdfLoadReport);
procedure LoadDocument(Data: Pointer; Size: NativeUInt; const Options: TPdfLoadOptions; out Report: TPdfLoadReport; Buffered: Boolean = True);
procedure LoadDocument(const Data: TBytes; const Options: TPdfLoadOptions; out Report: TPdfLoadReport; Buffered: Boolean = True);
procedure LoadDocument(const Data: TBytes; Index, Count: Integer; const Options: TPdfLoadOptions; out Report: TPdfLoadReport; Buffered: Boolean = True);
function SaveAsRepaired(Stream: TStream; out Report: TPdfRepairReport; AllowSignedDocument: Boolean = False): Boolean;
function SaveAsRepaired(const FileName: string; out Report: TPdfRepairReport; AllowSignedDocument: Boolean = False): Boolean;
Las sobrecargas heredadas usan el modo compatible y conservan su comportamiento existente mientras publican la validez nativa de xref y el estado de recuperación a través de LastLoadReport. La sobrecarga sin argumentos lee de la ruta almacenada en FileName. Las sobrecargas Pointer, TBytes y TMemoryStream cargan directamente de datos en memoria, eludiendo el sistema de archivos. La sobrecarga de rango de bytes selecciona un PDF incrustado de un contenedor mayor, una trama de protocolo o un búfer de recepción reutilizable sin crear una porción TBytes temporal
Cuando Buffered es True (predeterminado), TPdf copia los bytes suministrados en su búfer retenido. Cuando es False, el búfer del llamador debe permanecer válido y sin cambios hasta UnloadDocument o Active := False — esto evita una copia extra pero requiere una gestión cuidadosa del ciclo de vida
La sobrecarga de rango de bytes rechaza valores negativos, un Index más allá de la longitud de los datos o un Count que se extiende más allá de los bytes restantes. La sobrecarga de puntero rechaza nil cuando Size es distinto de cero; la sobrecarga TMemoryStream rechaza un flujo nil antes de que cambie cualquier estado del documento
En caso de éxito, Active se convierte en True y todas las propiedades de página reflejan la primera página (PageNumber = 1). En caso de fallo, se genera una excepción EPdfError
TPdfLoadOptions.Default suministra valores por defecto acotados para bytes de origen, issues, secciones de xref, entradas de xref y números de objeto. PDFium sigue siendo el parser semántico en todos los modos; la auditoría del wrapper existe porque la ABI pública de PDFium informa de la validez de xref pero no expone un interruptor que desactive la recuperación del parser
plmCompatible acepta la recuperación de PDFium y registra el resultado sin cambiar el comportamiento de carga heredadoplmStrict rechaza un origen cuando PDFium reconstruyó su xref o la auditoría acotada encuentra errores estructuralesplmRecovery acepta explícitamente una carga recuperada y devuelve su ruta de diagnóstico y evidenciaLa auditoría sigue tablas xref clásicas, xref streams, revisiones híbridas y cadenas /Prev. Informa de secciones malformadas, ciclos, entradas en conflicto, offsets de objetos dañados, marcadores terminales ausentes, filtros de flujo no soportados, agotamiento del presupuesto y recuperación nativa. Exceder un presupuesto de auditoría configurado pone AuditComplete a False y produce un aviso; por sí mismo no afirma que los bytes no comprobados sean inválidos
InspectAvailability sigue siendo la sonda nativa ligera de disponibilidad para linealización y carga de página primero; no sustituye al informe de carga estructural
TPdfLoadReport incluye Status, CrossReferenceTableValid, UsedRecovery, RecoveryRoute, offsets de origen y estructurales, contadores de secciones y entradas, contadores de conflictos y daños, totales de issues, estado de truncamiento y un array tipado Issues. El mismo informe se guarda en LastLoadReport
TPdfRepairReport registra si el origen usó recuperación, tamaño de salida y número de páginas, validez xref de la salida, texto del error terminal y el informe completo de verificación strict-load independiente
SaveAsRepaired pide a PDFium escribir una copia completa no incremental y luego abre esa salida en un TPdf aislado con plmStrict. El método entrega los bytes solo después de que pasen la validez de xref y la consistencia del número de páginas. La sobrecarga de archivo escribe a través de un archivo temporal del mismo directorio y reemplaza atómicamente el destino
Una reescritura completa elimina el historial incremental previo e invalida los rangos de bytes de firma existentes. Los documentos firmados se rechazan salvo que AllowSignedDocument sea explícitamente True. El método repara estructuras que PDFium puede cargar y reescribir con éxito; no garantiza la recuperación de contenido dañado arbitrario ni la preservación de firmas digitales
// Desde archivo
Pdf.FileName := 'C:\docs\file.pdf';
Pdf.LoadDocument;
// Desde TBytes
var Bytes: TBytes;
Bytes := TFile.ReadAllBytes('file.pdf');
Pdf.LoadDocument(Bytes);
// Desde un PDF incrustado en una matriz de bytes más grande
Pdf.LoadDocument(Container, PdfOffset, PdfLength);
// Desde TMemoryStream (sin búfer)
Pdf.LoadDocument(FStream, False);
// Rechazar la recuperación oculta del analizador
Options := TPdfLoadOptions.Default(plmStrict);
Pdf.LoadDocument(Options, Report);
// Reescribir y verificar de forma independiente un documento recuperado
Pdf.SaveAsRepaired('C:\docs\repaired.pdf', RepairReport);