PDFium Delphi Component Docs

Método RenderPageBandedToEncoder

Componente: TPdf  ·  Unidade: PDFium
Renderiza a página atual em bandas horizontais recortadas e encaminha cada bitmap de banda para um codificador de imagens em bandas fornecido pelo chamador

Syntax

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

Width, HeightInteger. Tamanho da imagem de página completa em pixels, como se fosse renderizada numa só peça
BandHeightInteger. Altura de cada banda em pixels. A última banda é mais baixa quando Height não é múltiplo dela
EncoderTPdfBandedImageEncoder. Instância de codificador propriedade do chamador que recebe o fluxo de bandas
RotationTRotation. Rotação de apresentação aplicada à página: ro0, ro90, ro180 ou ro270
OptionsTRenderOptions. Flags de renderização
ColorTColor. Preenchimento de fundo aplicado a cada banda antes da renderização
ResultTPdfBandedImageReport. Contagens de bandas, linhas codificadas, bytes máximos de banda, bytes de saída e flag de conclusão

Description

O método conduz o mesmo ciclo de bandas que RenderPageBanded, mas em vez de um callback da aplicação empurra cada bitmap Width x altura-de-banda recém-renderizado através de uma ponte interna para os três métodos virtuais do codificador fornecido pelo chamador: BeginImage(Width, Height) corre primeiro, WriteBand(BandIndex, BandTopY, Bitmap) recebe uma chamada por banda de cima para baixo e EndImage(Completed) fecha a imagem

BandIndex é de base zero e BandTopY é o desvio em y do topo da banda em pixels da página completa, que é o que um escritor de strips precisa para colocar as linhas num ficheiro de saída. O bitmap pertence ao ciclo de renderização e é libertado imediatamente depois de WriteBand devolver, por isso um codificador que precise de manter os pixels tem de os copiar

WriteBand devolve True para continuar ou False para cancelar as bandas restantes de forma limpa. EndImage(True) só é chamado quando todas as linhas pedidas foram codificadas; uma execução cancelada ou falhada recebe EndImage(False), com as exceções desse caminho de falha suprimidas

O relatório devolvido transporta Format = pbifCustom, o número de bandas renderizadas e aceites em BandsRendered e BandsEncoded, linhas aceites em RowsEncoded, o maior bitmap de banda como Width x altura de banda x 4 bytes em PeakBandBytes, o valor de Encoder.GetBytesWritten em OutputBytes e Completed = True exatamente quando RowsEncoded = Height

O armazenamento máximo de pixels da página mantém-se num único bitmap de banda, por isso cartazes e desenhos técnicos podem ser exportados à resolução de impressão sem nunca alocar a imagem de destino completa

Remarks

Passar um codificador nil, dimensões não positivas ou uma altura de banda não positiva gera EPdfError

O produto de Width e Min(BandHeight, Height) tem de se manter dentro de um quarto do intervalo endereçável de Integer, caso contrário EPdfError reporta que o buffer de banda excede o tamanho endereçável

Substitua GetBytesWritten no descendente do codificador para reportar telemetria de saída específica do codificador em OutputBytes; a implementação base devolve 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