Artigo técnico

PDFium Component: accessible PDF reader design in Delphi

Esta versão localizada trata de Build an Accessible PDF Reader in Delphi with PDFium 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

procedure TReaderForm.QueuePageSpeech(PageNumber: Integer);
var
  Units: TPdfReadingUnits;
  i: Integer;
begin
  Pdf.PageNumber := PageNumber;   // ReadingUnits works on the active page
  Units := Pdf.ReadingUnits;
  FSpeechQueue.Clear;
  for i := Low(Units) to High(Units) do
    FSpeechQueue.Add(Units[i]);  // text + semantics + highlight rects
  FCurrentPage := PageNumber;
  SpeakNextUnit;
end;
procedure TReaderForm.PrepareKaraoke(PageNumber: Integer);
begin
  // The view's word boxes come from the page the view displays —
  // setting Pdf.PageNumber alone would not move the view
  PdfView.PageNumber := PageNumber;
  FWordBoxes := PdfView.PageWordBoxes;
end;

procedure TReaderForm.OnTtsWordBoundary(Sender: TObject; CharIndex: Integer);
var
  WordIdx: Integer;
begin
  // TrackReadingWordAt maps the offset AND paints the word cursor
  WordIdx := PdfView.TrackReadingWordAt(FCurrentPage, CharIndex);
  if WordIdx < 0 then
    PdfView.ClearReadingWord;  // boundary ran past the page text
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