PDFium Delphi Component Docs

Políticas de LoadDocument y salida reparada

Componente: TPdf  ·  Unidad: PDFium
Abre un PDF con política compatible, estricta o de recuperación, y opcionalmente escribe una copia reparada verificada de forma independiente

Syntax

procedure LoadDocument;

 

procedure LoadDocument(Data: Pointer; Size: NativeUInt; Buffered: Boolean = True);

DataPointer. Un puntero a los datos PDF sin procesar en memoria
SizeNativeUInt. El tamaño del búfer de datos en bytes
BufferedBoolean. 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);

DataTBytes. El contenido del archivo PDF como un array de bytes
BufferedBoolean. 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);

DataTBytes. El array de bytes subyacente que contiene la ventana PDF
IndexInteger. El offset en base cero del primer byte del PDF
CountInteger. El número de bytes del PDF que se van a cargar
BufferedBoolean. 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);

DataTMemoryStream. Un TMemoryStream que contiene los datos PDF
BufferedBoolean. 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;

Description

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

Load policies

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

La 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

Reports

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

Repaired output

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

Example

// 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);

See Also

Active, FileName, LoadCustomDocument, SaveAs