Esta versão localizada trata de PDFium Delphi Viewer: Render Cache and Smooth Zoom Tactics usando o artigo em inglês atualizado como referência técnica para equipes Delphi, PDF e software documental
A página transforma a base atualizada em pontos de controle práticos para projeto, implementação e validação
Conteúdo sincronizado a partir da base em inglês
O artigo base foi ampliado com contexto prático, decisões técnicas e exemplos concretos, então esta página deve ser lida como guia de trabalho, não como resumo curto
Pontos importantes da versão atualizada:
- Use primeiro arquivos de entrada pequenos e reproduzíveis
- Mantenha intactos nomes de produto, API, arquivos e valores literais
- Salve a saída do validador e as versões junto com o arquivo de teste gerado
Decisões práticas de implementação
Comece pelo tipo de arquivo, pelo resultado esperado e pelo estado de erro que o usuário precisa ver. Depois conecte cada chamada API a um resultado verificável para que validação, logs e suporte possam reproduzir o caso do cliente
- Use primeiro arquivos de entrada pequenos e reproduzíveis
- Mantenha intactos nomes de produto, API, arquivos e valores literais
- Salve a saída do validador e as versões junto com o arquivo de teste gerado
Código e pontos API
Os exemplos de código são preservados sem alteração para comparação direta com projetos Delphi, C++Builder e Lazarus/FPC
function TPageCache.Acquire(Pdf: TPdf; PageNo: Integer; ZoomPct: Single;
Rotation: TRotation; Opts: TRenderOptions): TBitmap;
var
Key: string;
begin
Key := Format('%d|%.0f|%d|%d|%d',
[PageNo, ZoomPct, Ord(Rotation), Screen.PixelsPerInch, OptionsMask(Opts)]);
if FBitmaps.TryGetValue(Key, Result) then
Exit;
Pdf.PageNumber := PageNo;
Result := Pdf.RenderPage(0, 0, OutputWidth(PageNo, ZoomPct),
OutputHeight(PageNo, ZoomPct), Rotation, Opts);
FBitmaps.Add(Key, Result); // the cache now owns this bitmap
end;procedure TViewerForm.RequestRender(TargetZoom: Single);
var
Status: TPdfProgressiveStatus;
begin
if FTokenSource <> nil then
FTokenSource.Cancel; // abandon the previous in-flight render
FTokenSource := TPdfCancellationTokenSource.New; // FPdfAsync unit
Status := Pdf.RenderPageProgressive(FBackBuffer, 0, 0,
FBackBuffer.Width, FBackBuffer.Height, FTokenSource.Token,
ro0, [reAnnotations]);
case Status of
prsDone: PresentBackBuffer;
prsCancelled: ; // superseded by a newer request: drop silently
prsFailed: ShowRenderFailure;
end;
end;Verificação antes da publicação
Revise o arquivo de saída com as mesmas ferramentas que o cliente ou o arquivo documental usará. Registre versão do componente, dados de teste, versão do validador e resultado observado