function StampPagesFromPdf(
Source : TPdf;
SourcePageIndex : Integer;
const TargetPages : array of Integer;
const Options : TPdfOverlayOptions;
out Report : TPdfOverlayReport): Boolean;
StampPagesFromPdf är den övergripande komponeraren för överlägg, underlägg och
vattenstämplar. Den tillverkar ett Form XObject från en källsida via
FPDF_NewXObjectFromPage och placerar därefter en
positionerad, skalad och valfritt roterad kopia av det XObjectet på
varje begärd målsida. Placering, skalning, rotation, blandningsläge
och z-ordning styrs via posten TPdfOverlayOptions
(Placement, X, Y, Scale,
Rotation, Margin, UseCropBox,
ZUnderlay och BlendMode); ut-parametern
TPdfOverlayReport registrerar
StampedPageCount, FailedPageCount,
SkippedPageCount, SourcePageWidth,
SourcePageHeight, Succeeded och
ErrorMessage
Internt kombinerar varje stämpel
FPDF_NewFormObjectFromXObject,
FPDFPageObj_SetMatrix,
FPDFPageObj_SetBlendMode och antingen
FPDFPage_InsertObject (överlägg) eller
FPDFPage_InsertObjectAtIndex med stackindex 0
(underlägg). Placeringsmatrisen byggs från
PageWidth/PageHeight plus alternativfälten, så alla
ankare, marginaler, skalningar och rotationer mappas till en
enda transformering som PDFium applicerar på det infogade formobjektet
Källa och mål måste båda vara Active. Källan kan vara en
separat TPdf-instans eller till och med detta dokument
(self-stamp): anroparens aktuella PageNumber på båda dokumenten
sparas och återställs runt anropet
Source — en annan aktiv TPdf som äger sidan som ska återanvändas. Kan vara samma instans som måletSourcePageIndex — nollbaserat index för sidan inuti SourceTargetPages — nollbaserade målsidesindex i detta dokument. Skicka en tom array för att stämpla varje sidaOptions — en post av typen TPdfOverlayOptions. Använd TPdfOverlayOptions.Default för ett centrerat, automatiskt anpassat överlägg överstReport — tar emot antal stämplade, misslyckade och hoppade över sidor plus källsidans bredd/höjd som användes för att beräkna placeringsmatrisenopTopLeft, opTopCenter, opTopRight, opMiddleLeft, opCenter, opMiddleRight, opBottomLeft, opBottomCenter, opBottomRight, opStretch (oberoende skalning per axel) och opCustom (använder explicita X/Y)Scale=0 betyder automatisk anpassning inuti sidrutan minus den begärda marginalen med bibehållet bildförhållande, såvida inte Placement=opStretch, i vilket fallet bilden sträcks ut för att fylla rutanRotation är moturs i grader och roterar den placerade bilden runt sitt eget centrum, så en vattenstämpel på 45° förblir visuellt centreradZUnderlay=True infogar stämpeln på stackindex 0 så att den hamnar bakom varje befintligt sidobjekt. Det ursprungliga PDFium-API:et har inget publikt "flytta objekt till index"-anrop, så underläggsvägen använder ett nyskapat Form XObject som infogas direkt längst ner i stället för att omplacera en tillagd kopiaBlendMode appliceras på det infogade formobjektet via FPDFPageObj_SetBlendMode. Ren alfa-transparens på ett Form XObject exponeras inte av det publika PDFium-API:et; använd blandningslägen som bmMultiply eller bmScreen, eller förrendera källan med önskad alfa innan stämplingenReport.SkippedPageCount och avbryter inte körningen
var
Watermark: TPdf;
Options: TPdfOverlayOptions;
Report: TPdfOverlayReport;
begin
Watermark := TPdf.Create(nil);
try
Watermark.FileName := 'C:\Confidential.pdf';
Watermark.Active := True;
Options := TPdfOverlayOptions.Default;
Options.Placement := opCenter;
Options.Rotation := 45;
Options.BlendMode := bmMultiply;
Pdf1.StampPagesFromPdf(Watermark, 0, [], Options, Report);
finally
Watermark.Free;
end;
end;