LZW Compression Support

Tổng quan

HotPDF hiện có hỗ trợ nén LZW (Lempel-Ziv-Welch) đầy đủ cho các luồng PDF LZW là thuật toán nén không mất dữ liệu, đặc biệt hiệu quả với văn bản và đồ họa đơn giản, thường được dùng trong tài liệu PDF để nén content stream

Tính năng chính

  • Hỗ trợ giải nén LZW đầy đủ cho các luồng PDF
  • Hỗ trợ predictor có thể cấu hình để tăng hiệu quả nén
  • Nhiều tùy chọn fill order (từ trên xuống dưới, từ dưới lên trên)
  • Hỗ trợ early code change để tương thích
  • Xử lý luồng tiết kiệm bộ nhớ
  • Tích hợp tham số PDF (Predictor, Colors, BitsPerComponent, Columns)

Cài đặt kỹ thuật

Hỗ trợ LZW được hiện thực qua unit HPDFLZW.pas, unit này cung cấp:

  • TPDFLZWDecompressor: lớp giải nén chính
  • TPDFLZWParms: cấu trúc tham số cho các thiết lập riêng của PDF
  • TPDFLZWFillOrder: kiểu liệt kê cho xử lý thứ tự bit

Tham chiếu lớp

TPDFLZWDecompressor

Lớp chính cho các thao tác giải nén LZW

Thuộc tính:

  • FillOrder: chỉ định thứ tự bit (foBottom, foTop)
  • EarlyChange: điều khiển thay đổi kích thước mã sớm
  • InitialCodeSize: kích thước mã ban đầu cho giải nén

Phương thức:

  • Decompress(Input: AnsiString): AnsiString - giải nén cơ bản
  • Decompress(Input: AnsiString; Parms: TPDFLZWParms): AnsiString - giải nén với tham số PDF

Usage Examples

Basic LZW Decompression


// Delphi example - Basic LZW decompression
procedure DecompressLZWData;
var
  Decompressor: TPDFLZWDecompressor;
  CompressedData: AnsiString;
  DecompressedData: AnsiString;
begin
  Decompressor := TPDFLZWDecompressor.Create;
  try
    // Configure decompressor
    Decompressor.FillOrder := foTop;
    Decompressor.EarlyChange := True;
    Decompressor.InitialCodeSize := 9;

    // Decompress data
    DecompressedData := Decompressor.Decompress(CompressedData);

    // Use decompressed data
    ProcessDecompressedData(DecompressedData);
  finally
    Decompressor.Free;
  end;
end;
        

Advanced LZW Decompression with PDF Parameters


// Delphi example - Advanced LZW decompression with PDF parameters
procedure DecompressLZWWithParms;
var
  Decompressor: TPDFLZWDecompressor;
  CompressedData: AnsiString;
  DecompressedData: AnsiString;
  Parms: TPDFLZWParms;
begin
  Decompressor := TPDFLZWDecompressor.Create;
  try
    // Configure PDF parameters
    Parms.Predictor := 2;           // Horizontal differencing predictor
    Parms.Colors := 3;              // RGB color space
    Parms.BitsPerComponent := 8;    // 8 bits per component
    Parms.Columns := 100;           // Image width in pixels
    Parms.ExpandedTo8Bit := True;   // Expand to 8-bit components
    Parms.ColorSpace := 'DeviceRGB';

    // Decompress with parameters
    DecompressedData := Decompressor.Decompress(CompressedData, Parms);

    // Process the decompressed image data
    ProcessImageData(DecompressedData, Parms);
  finally
    Decompressor.Free;
  end;
end;
        

PDF Parameter Support

TPDFLZWParms Structure

  • Predictor: Predictor function (0=none, 2=horizontal differencing)
  • Colors: Number of color components (1=grayscale, 3=RGB, 4=CMYK)
  • BitsPerComponent: Bits per color component (1, 2, 4, 8, 16)
  • Columns: Number of samples per row
  • ExpandedTo8Bit: Whether to expand to 8-bit components
  • ColorSpace: Color space identifier

Chi tiết thuật toán

Triển khai LZW bao gồm:

  • Dictionary-based Compression: xây dựng và duy trì dictionary động
  • Variable Code Length: hỗ trợ độ dài mã từ 9 đến 12 bit
  • Clear Code Handling: xử lý đúng các mã clear và end-of-information
  • String Table Management: bảng chuỗi hiệu quả cho nhận dạng mẫu

Performance Characteristics

  • Memory Efficient: Optimized for large data streams
  • Fast Decompression: Highly optimized decompression algorithms
  • Predictable Performance: Consistent performance across different data types
  • Low Memory Footprint: Minimal memory overhead during processing

Các trường hợp dùng phổ biến

  • Giải nén content stream PDF
  • Giải nén dữ liệu ảnh trong tệp PDF
  • Giải nén luồng văn bản
  • Giải nén dữ liệu biểu mẫu
  • Giải nén luồng PostScript

Xử lý lỗi

Bộ giải nén LZW có xử lý lỗi vững cho:

  • Chuỗi mã không hợp lệ
  • Luồng dữ liệu bị hỏng
  • Thất bại khi cấp phát bộ nhớ
  • Điều kiện tràn dictionary

Tuân thủ chuẩn

  • Tuân thủ filter PDF 1.2+ LZWDecode
  • Tương thích với LZW của PostScript Level 2
  • Tương thích với nén LZW của TIFF
  • Tương thích với triển khai LZW của Adobe

Xem thêm