PDFium Component Docs

RenderPageBandedToEncoder Metoda

Component: TPdf  ·  Unit: PDFium
Renderuje bieżącą stronę w przycinanych pasmach poziomych i przekazuje każdą bitmapę pasma do dostarczonego przez wywołującego enkodera obrazów pasmowych

Syntax

function RenderPageBandedToEncoder(Width, Height, BandHeight: Integer;
  Encoder: TPdfBandedImageEncoder; Rotation: TRotation = ro0;
  Options: TRenderOptions = []; Color: TColor = clWhite): TPdfBandedImageReport;

Width, HeightInteger. Rozmiar pełnego obrazu strony w pikselach, tak jakby był renderowany w całości
BandHeightInteger. Wysokość każdego pasma w pikselach. Ostatnie pasmo jest krótsze, gdy Height nie jest jego wielokrotnością
EncoderTPdfBandedImageEncoder. Instancja enkodera należąca do wywołującego, odbierająca strumień pasm
RotationTRotation. Rotacja wyświetlania nakładana na stronę: ro0, ro90, ro180 lub ro270
OptionsTRenderOptions. Flagi renderowania
ColorTColor. Wypełnienie tła nakładane na każde pasmo przed renderowaniem
ResultTPdfBandedImageReport. Liczby pasm, zakodowane wiersze, szczytowe bajty pasma, bajty wyjścia i flaga ukończenia

Description

Metoda napędza tę samą pętlę pasmową co RenderPageBanded, ale zamiast wywołania zwrotnego aplikacji przepycha każdą świeżo wyrenderowaną bitmapę Width x wysokość pasma przez wewnętrzny most do trzech metod wirtualnych dostarczonego enkodera: BeginImage(Width, Height) wykonuje się jako pierwsza, WriteBand(BandIndex, BandTopY, Bitmap) otrzymuje jedno wywołanie na pasmo od góry do dołu, a EndImage(Completed) zamyka obraz

BandIndex jest liczony od zera, a BandTopY to offset y górnej krawędzi pasma w pikselach pełnej strony — dokładnie to, czego pisarz pasków potrzebuje, aby umieścić wiersze w pliku wyjściowym. Bitmapa należy do pętli renderowania i jest zwalniana tuż po powrocie WriteBand, więc enkoder, który musi zatrzymać piksele, musi je skopiować

WriteBand zwraca True, aby kontynuować, albo False, aby czysto anulować pozostałe pasma. EndImage(True) jest wywoływana tylko wtedy, gdy każdy żądany wiersz został zakodowany; anulowany lub nieudany przebieg otrzymuje EndImage(False), a wyjątki z tej ścieżki awarii są tłumione

Zwracany raport niesie Format = pbifCustom, liczbę wyrenderowanych i przyjętych pasm w BandsRendered i BandsEncoded, przyjęte wiersze w RowsEncoded, największą bitmapę pasma jako Width x wysokość pasma x 4 bajty w PeakBandBytes, wartość Encoder.GetBytesWritten w OutputBytes oraz Completed = True dokładnie wtedy, gdy RowsEncoded = Height

Szczytowy magazyn pikseli strony pozostaje na poziomie jednej bitmapy pasma, więc plakaty i rysunki techniczne można eksportować w rozdzielczości druku bez alokowania pełnego obrazu docelowego

Remarks

Przekazanie enkodera nil, niedodatnich wymiarów albo niedodatniej wysokości pasma zgłasza EPdfError

Iloczyn Width i Min(BandHeight, Height) musi mieścić się w jednej czwartej adresowalnego zakresu Integer, w przeciwnym razie EPdfError raportuje, że bufor pasma przekracza adresowalny rozmiar

Nadpisz GetBytesWritten w potomku enkodera, aby raportować telemetrykę wyjścia specyficzną dla enkodera do OutputBytes; implementacja bazowa zwraca 0

Example

type
  TRawStripEncoder = class(TPdfBandedImageEncoder)
  public
    procedure BeginImage(Width, Height: Integer); override;
    function WriteBand(BandIndex, BandTopY: Integer;
      Bitmap: TBitmap): Boolean; override;
    procedure EndImage(Completed: Boolean); override;
  end;

Encoder := TRawStripEncoder.Create;
try
  Report := Pdf.RenderPageBandedToEncoder(4960, 7016, 512, Encoder);
  LogBandedExport(Report.BandsEncoded, Report.PeakBandBytes);
finally
  Encoder.Free;
end;

See Also

RenderPageBanded, RenderPageBandedToStream, RenderPage, RenderTile