Método THotPDF.OptimizeLoadedStreams
Reescribe familias seleccionadas de flujos cargados como Flate solo cuando el reemplazo es más pequeño según el umbral solicitado
Declaración
function OptimizeLoadedStreams(
FilterFamilies: THPDFLoadedStreamFilterFamilies;
MinimumSavingsBytes: Int64;
out AInfo: THPDFLoadedStreamOptimizationInfo): Integer;
Unidad
HPDFDoc
Parámetros
| Nombre | Propósito |
|---|---|
FilterFamilies | Selecciona candidatos sin filtrar, Flate, LZW, ASCII85, ASCIIHex y RunLength |
MinimumSavingsBytes | Reducción mínima positiva de bytes requerida antes de que un candidato reemplace su flujo de origen |
AInfo | Recibe los totales de bytes analizados, candidatos, reescritos, no admitidos, fallidos, antes, después y ahorrados |
Valor de retorno
Devuelve la cantidad de payloads de flujo reemplazados en el grafo de objetos cargado
Notas de uso
CompressionLevelselecciona la velocidad y relación de zlib, mientras queclNoneconvierte el pase en una operación nula- Los candidatos decodificados y comprimidos se derraman a archivos temporales propios después de
LoadedStreamMemoryThreshold, manteniendo acotada la memoria en documentos grandes - El payload y el diccionario originales no cambian tras un fallo de decodificación o ahorros insuficientes
- Los flujos con
/DecodeParmsse omiten para que la semántica de predictor y LZW no predeterminada no se cambie de forma accidental - Las cadenas multifiltro son elegibles solo cuando cada familia está seleccionada y admitida
- Llame a
SaveLoadedDocumentdespués del pase para persistir los payloads adoptados
Tipos y diagnósticos
THPDFLoadedStreamFilterFamily = (lsffUnfiltered, lsffFlate, lsffLZW,
lsffASCII85, lsffASCIIHex, lsffRunLength);
THPDFLoadedStreamFilterFamilies = set of THPDFLoadedStreamFilterFamily;
THPDFLoadedStreamOptimizationInfo = record
ScannedStreamCount: Integer;
CandidateStreamCount: Integer;
RewrittenStreamCount: Integer;
UnsupportedStreamCount: Integer;
DecodeFailureCount: Integer;
BytesBefore: Int64;
BytesAfter: Int64;
BytesSaved: Int64;
end;
Ejemplo
Families := [lsffUnfiltered, lsffFlate, lsffLZW];
Count := PDF.OptimizeLoadedStreams(Families, 16, Info);
if Count > 0 then
PDF.SaveLoadedDocument('optimized.pdf');