|
Soporte mejorado de compresión ZLib
Descripción general
HotPDF ahora incluye un soporte integral de compresión compatible con ZLib respaldado por zlib-ng incluido para flujos y contenido PDF`r`n La API compatible con zlib ofrece compresión deflate/inflate eficiente, muy usada en documentos PDF para`r`n operaciones del filtro FlateDecode y compresión general de datos
Funciones principales
- API compatible con ZLib respaldada por zlib-ng incluido
- Compatibilidad con parámetros PDF FlateDecode
- Compresión y descompresión basadas en flujos
- Manejo de errores y capacidades de depuración mejoradas
- Procesamiento eficiente en memoria para flujos de datos grandes
- Puente de compresión de imágenes de una sola pasada para Win64 con seguridad de ABI de longitud de zlib-ng
- Win64x y despacho SIMD en tiempo de ejecución de zlib-ng para MSVC Win64 con alternativas genéricas
- Puente de asignación C alineado a 32 bytes para buffers nativos compatibles con SIMD
- Integración de biblioteca C multiplataforma
- Varios niveles de compresión (ninguno, más rápido, predeterminado, máximo)
Implementación técnica
El soporte mejorado de ZLib se implementa mediante la unidad HPDFZLib.pas, que ofrece:
- API completa de ZLib: Implementación total de las funciones de ZLib
- Clases de flujo: TCustomZStream y clases derivadas para procesamiento de flujos
- Integración PDF: TPDFFlateParms para parámetros específicos de PDF
- Funciones mejoradas: InflateStr, InflateStrParms para un uso simplificado
Los conjuntos de objetos de zlib-ng de 64 bits incluyen rutas SSE2, SSSE3, SSE4.1, SSE4.2, PCLMULQDQ y AVX2 seleccionadas en tiempo de ejecución. Win32 usa el conjunto genérico de objetos de zlib-ng para seguir siendo compatible con la cadena de herramientas OMF bcc32c, mientras que Win32 JPEG/TIFF permanecen en el bcc32 clásico
Cobertura de regresión
El backend Flate de zlib-ng está cubierto por las suites de regresión automatizadas de Delphi y C++Builder. El conjunto de validación actual supera 20 pruebas Delphi DUnitX en Win32 y 20 en Win64, además de 17 pruebas GoogleTest de C++Builder en Win32 y 17 en Win64x. Las reconstrucciones de objetos nativos también pasan desde salidas limpias: 206 objetos Win32, 205 objetos Win64x y 206 objetos MSVC Win64. Los flujos de trabajo cubiertos incluyen compresión de flujos de página, compresión de fuentes incrustadas y mapas ToUnicode CMap, flujos de imágenes Flate, colocación estándar de imágenes JPEG, importación TIFF, salida con muchas barras, escenarios de copia/fusión/edición y PDF generados por los demos
Niveles de compresión
- Z_NO_COMPRESSION (0): Sin compresión
- Z_BEST_SPEED (1): Compresión más rápida
- Z_BEST_COMPRESSION (9): Compresión máxima
- Z_DEFAULT_COMPRESSION (-1): equilibrio predeterminado entre velocidad y compresión
Ejemplos de uso
Compresión y descompresión básicas de cadenas
// Delphi example - Basic string inflation
function DecompressString(const CompressedData: AnsiString): AnsiString;
begin
// Simple decompression
Result := InflateStr(CompressedData);
// With debug output enabled
Result := InflateStr(CompressedData, True);
end;
Compresión basada en flujos
// Delphi example - Stream-based decompression
procedure DecompressStream(InStream, OutStream: TStream);
begin
// Decompress from input stream to output stream
PLZDecompressStream(InStream, OutStream);
// For raw deflate data (without ZLib headers)
PLZDecompressStreamRaw(InStream, OutStream);
end;
PDF FlateDecode con parámetros
// Delphi example - PDF FlateDecode with parameters
function DecompressPDFStream(const CompressedData: AnsiString;
Predictor, Colors, BitsPerComponent, Columns: Integer): AnsiString;
var
Parms: TPDFFlateParms;
begin
// Configure PDF parameters
Parms.Predictor := Predictor;
Parms.Colors := Colors;
Parms.BitsPerComponent := BitsPerComponent;
Parms.Columns := Columns;
Parms.ExpandedTo8Bit := True;
Parms.ColorSpace := 'DeviceRGB';
// Decompress with PDF parameters
Result := InflateStrParms(CompressedData, Parms);
end;
Operaciones de bajo nivel de ZLib
// Delphi example - Low-level ZLib operations
procedure CompressData;
var
strm: z_stream;
ret: Integer;
input: AnsiString;
output: AnsiString;
begin
input := 'Data to compress';
SetLength(output, Length(input) * 2);
// Initialize stream
FillChar(strm, SizeOf(strm), 0);
ret := deflateInit(strm, Z_DEFAULT_COMPRESSION);
if ret = Z_OK then
try
// Set input
strm.next_in := PByte(PAnsiChar(input));
strm.avail_in := Length(input);
// Set output
strm.next_out := PByte(PAnsiChar(output));
strm.avail_out := Length(output);
// Compress
ret := deflate(strm, Z_FINISH);
if ret = Z_STREAM_END then
begin
// Compression successful
SetLength(output, Length(output) - strm.avail_out);
end;
finally
deflateEnd(strm);
end;
end;
Parámetros PDF FlateDecode
Estructura TPDFFlateParms
- Predictor: Función predictor (1=sin predicción, 2=TIFF, 10-15=PNG)
- Colors: Cantidad de componentes de color
- BitsPerComponent: Bits por componente de color
- Columns: Cantidad de muestras por fila
- ExpandedTo8Bit: Si expandir a componentes de 8 bits
- ColorSpace: Identificador del espacio de color
Funciones mejoradas
- Administración de memoria: asignación y liberación optimizadas de memoria
- Manejo de errores: comprobación y reporte exhaustivos de errores
- Compatibilidad de depuración: salida de depuración opcional para solucionar problemas
- Optimización de rendimiento: algoritmos de compresión altamente optimizados
- Integración de flujos: integración fluida con las clases de flujo de Delphi
Beneficios de rendimiento
- Velocidades rápidas de compresión y descompresión
- Excelentes relaciones de compresión para texto y gráficos simples
- Bajo consumo de memoria durante el procesamiento
- Optimizado para flujos de contenido PDF
- Sobrecarga mínima de CPU
Cumplimiento de estándares
- RFC 1950 (especificación del formato ZLib)
- RFC 1951 (algoritmo de compresión Deflate)
- Especificación del filtro PDF FlateDecode
- Compatibilidad con el algoritmo predictor PNG
- Compatibilidad con el algoritmo predictor TIFF
Códigos de error y manejo
- Z_OK (0): Éxito
- Z_STREAM_END (1): Se alcanzó el final del flujo
- Z_NEED_DICT (2): Se requiere un diccionario
- Z_ERRNO (-1): Error de archivo
- Z_STREAM_ERROR (-2): Error de estado del flujo
- Z_DATA_ERROR (-3): Error de integridad de datos
- Z_MEM_ERROR (-4): Error de asignación de memoria
- Z_BUF_ERROR (-5): Error de tamaño de búfer
Véase también
|