Teknisk artikel

PDFium Component: granskning av anteckningar i Delphi

Integrera PDFium VCL Component-flöden i Delphi- och C++Builder-applikationer, eller PDFium LCL Component-flöden i Lazarus/FPC, med källkodskomponenter för visning, rendering, formulär, utskrift, preflight-rapporter och standardinriktad validering.

Den här artikeln är skriven för team som lägger till review, markup, approval, or quality-control panels to a Delphi PDF viewer. Den behandlar annotation review UI som produktionsnära dokumentteknik, inte som ett isolerat komponentanrop.

Den praktiska risken är att anteckningar är enkla att visa men svåra att lita på när sidrotation, författarskap, svar, dolda tillstånd eller koordinatkonverteringar inte hanteras konsekvent. Därför behöver flödet ett skrivet kontrakt, observerbar diagnostik och realistiska regressionsfiler.

Arkitekturbeslut

Separera granskningsläget från sidrenderingen. vilka anteckningstyper som kan visas, filtreras, besvaras, exporteras eller låsas / författaridentitet, statusetiketter och om granskningsdata lagras i PDF-filen

  • vilka anteckningstyper som kan visas, filtreras, besvaras, exporteras eller låsas
  • författaridentitet, statusetiketter och om granskningsdata lagras i PDF-filen
  • koordinatkonvertering för rotation, zoom, beskärningsrutor och högupplösta skärmar
  • skrivskyddat läge för signerade, skyddade eller externt styrda dokument

Implementeringsflöde

Indexera anteckningar innan granskningsåtgärder visas. Ordningen nedan gör arbetsflödet granskbart för Delphi- och C++Builder-team.

  1. läs in anteckningsmetadata i ett granskningsindex innan sidöverlager ritas
  2. normalisera sidkoordinater och behåll en stabil referens för varje anteckning
  3. tillämpa filter efter författare, status, typ, sida och datum utan att tolka om sidorna
  4. knyt markering i granskningslistan till vyportsnavigering och markeringsbeteende
  5. exportera granskningssammanfattningar med tillräckligt sammanhang för arbetsflöden utanför visaren

Valideringsbevis

Granskningsunderlag som stödjer samarbete. Behåll dessa fält tillsammans med utdata eller supportunderlaget.

  • annotation type, author, page, bounds, status, and reply count
  • coordinate transform used for the current zoom, rotation, and crop box
  • permission decision when a user attempts to edit a locked or signed document
  • exported review summary with stable page references

Coordinates and intent matter

Ett professionellt granskningsgränssnitt behandlar anteckningar som strukturerad data med författare, datum, sidplatser, utseende, svar, status och behörigheter. Canvas-vyn är bara en presentation av den modellen.

Kundsynligt beteende

Användarna ser inte den interna anropsordningen. De ser om filen öppnas, valideras, skrivs ut, redigeras, importeras eller avvisas. Arbetsflödet ska omvandla resultat från granskningsgränssnittet för anteckningar till tillstånd som användarna kan agera på.

  • läs in anteckningsmetadata i ett granskningsindex innan sidöverlager ritas
  • normalisera sidkoordinater och behåll en stabil referens för varje anteckning
  • tillämpa filter efter författare, status, typ, sida och datum utan att tolka om sidorna
  • rotated pages can make highlights appear detached from the original text
  • popup annotations and replies may be missed when only visible marks are scanned

Tekniska granskningsnoteringar för annotation review UI

Använd dessa granskningsnoteringar för att säkerställa att funktionen har passerat demo-nivån och kan försvaras under leverans, support och kundeskalering.

  • Beslut: vilka anteckningstyper som kan visas, filtreras, besvaras, exporteras eller låsas. Implementeringspresspunkt: normalisera sidkoordinater och behåll en stabil referens för varje anteckning. Acceptansbevis: permission decision when a user attempts to edit a locked or signed document. Regressionsutlösare: annotations on cropped pages need coordinates tied to the intended page box
  • Beslut: författaridentitet, statusetiketter och om granskningsdata lagras i PDF-filen. Implementeringspresspunkt: tillämpa filter efter författare, status, typ, sida och datum utan att tolka om sidorna. Acceptansbevis: exported review summary with stable page references. Regressionsutlösare: rotated pages can make highlights appear detached from the original text
  • Beslut: koordinatkonvertering för rotation, zoom, beskärningsrutor och högupplösta skärmar. Implementeringspresspunkt: knyt markering i granskningslistan till vyportsnavigering och markeringsbeteende. Acceptansbevis: annotation type, author, page, bounds, status, and reply count. Regressionsutlösare: popup annotations and replies may be missed when only visible marks are scanned
  • Beslut: skrivskyddat läge för signerade, skyddade eller externt styrda dokument. Implementeringspresspunkt: exportera granskningssammanfattningar med tillräckligt sammanhang för arbetsflöden utanför visaren. Acceptansbevis: coordinate transform used for the current zoom, rotation, and crop box. Regressionsutlösare: read-only review must still allow selection, navigation, filtering, and export
  • Beslut: vilka anteckningstyper som kan visas, filtreras, besvaras, exporteras eller låsas. Implementeringspresspunkt: läs in anteckningsmetadata i ett granskningsindex innan sidöverlager ritas. Acceptansbevis: permission decision when a user attempts to edit a locked or signed document. Regressionsutlösare: annotations on cropped pages need coordinates tied to the intended page box
  • Beslut: författaridentitet, statusetiketter och om granskningsdata lagras i PDF-filen. Implementeringspresspunkt: normalisera sidkoordinater och behåll en stabil referens för varje anteckning. Acceptansbevis: exported review summary with stable page references. Regressionsutlösare: rotated pages can make highlights appear detached from the original text
  • Beslut: koordinatkonvertering för rotation, zoom, beskärningsrutor och högupplösta skärmar. Implementeringspresspunkt: tillämpa filter efter författare, status, typ, sida och datum utan att tolka om sidorna. Acceptansbevis: annotation type, author, page, bounds, status, and reply count. Regressionsutlösare: popup annotations and replies may be missed when only visible marks are scanned

Gränsfall

  • rotated pages can make highlights appear detached from the original text
  • popup annotations and replies may be missed when only visible marks are scanned
  • read-only review must still allow selection, navigation, filtering, and export
  • annotations on cropped pages need coordinates tied to the intended page box

Delphi / C++Builder notes

PDFium Component should sit behind a small service boundary that receives files, streams, profiles, and credentials, then returns output paths, warnings, metrics, and validation status. Important terms include annotation, markup, reply, page bounds, rotation, review status.

Delphi-kodexempel

Följande Delphi-skiss visar en praktisk servicegräns för detta ämne. Håll policykontroller, loggning och validering utanför det smala produktanropet så att arbetsflödet går att testa.

procedure TReviewForm.LoadAnnotationQueue(const FileName: string);
var
  PageNo: Integer;
begin
  PdfView.LoadFromFile(FileName);
  FQueue.Clear;
  for PageNo := 1 to PdfView.PageCount do
    AddPageAnnotationsToQueue(PdfView, PageNo, FQueue);
  FQueue.SortByAuthorAndDate;
  ShowNextReviewItem;
end;

Produktionschecklista

  • Kör arbetsflödet på en tom fil, en normal kundfil och en värstafallfil
  • Öppna den genererade PDF-filen med rätt visare, validator, skrivare eller nedströmsapplikation
  • Logga produktversion, profilversion, inmatningshash, utdatasökväg, förfluten tid och antal varningar
  • Håll lösenord, certifikat, tillfälliga filer och kunddata under tydliga lagringsregler
  • Lägg till regressionsdokument när en kundfil avslöjar ett nytt gränsfall

Produktdokumentation

PDFium Component

Fler kodexempel

A := Pdf.Annotation[Item.Index];
A.HasColor := True;
A.Color := $0000B0FF;       // amber
A.ColorAlpha := 160;
try
  Pdf.Annotation[Item.Index] := A;
except
  on EPdfError do
  begin
    // The annotation owns a pre-rendered /AP stream; the dictionary
    // color alone cannot change what viewers paint
    Item.AppearanceLocked := True;
    StatusBar.SimpleText := 'Color is fixed by the annotation appearance';
  end;
end;
Pdf.PageNumber := Item.PageNo;
Pdf.DeleteAnnotation(Item.Index);   // raises EPdfError on failure
Bmp := Pdf.RenderPage(0, 0, ViewWidth, ViewHeight, ro0, [reAnnotations]);
try
  PaintPageBitmap(Bmp);
finally
  Bmp.Free;  // RenderPage hands bitmap ownership to the caller
end;
RebuildPageEntries(Item.PageNo);  // indices after Item.Index shifted