function StampPagesFromPdf(
Source : TPdf;
SourcePageIndex : Integer;
const TargetPages : array of Integer;
const Options : TPdfOverlayOptions;
out Report : TPdfOverlayReport): Boolean;
StampPagesFromPdf je kompozítor prekryvov, podkladov a
vodoznakov vysokej úrovne. Vytvorí Form XObject zo zdrojovej
strany cez FPDF_NewXObjectFromPage a potom vloží jednu
umiestnenú, zmenenú, voliteľne otočenú kópiu tohto XObjectu do
každej požadovanej cieľovej strany. Umiestnenie, zmena veľkosti,
otočenie, režim prelínania a poradí v hĺbke sa riadia cez
záznam TPdfOverlayOptions (Placement,
X, Y, Scale,
Rotation, Margin, UseCropBox,
ZUnderlay a BlendMode); výstupný
parameter TPdfOverlayReport zaznamenáva
StampedPageCount, FailedPageCount,
SkippedPageCount, SourcePageWidth,
SourcePageHeight, Succeeded a
ErrorMessage
Každá pečiatka interne kombinuje
FPDF_NewFormObjectFromXObject,
FPDFPageObj_SetMatrix,
FPDFPageObj_SetBlendMode a buď
FPDFPage_InsertObject (prekryv), alebo
FPDFPage_InsertObjectAtIndex s indexom zásobníka 0
(podklad). Matica umiestnenia sa zostaví z
PageWidth/PageHeight plus voličných polí,
takže všetky ukotvenia, okraje, zmeny veľkosti a otočenia sa mapujú na
jednu transformáciu, ktorú PDFium aplikuje na vložený form objekt
Zdroj aj cieľ musia byť obe Active. Zdrojom môže byť
samostatná inštancia TPdf alebo dokonca tento dokument
(samopečiatkovanie): aktuálne PageNumber volajúceho na
oboch dokumentoch sa počas volania uloží a obnoví
Source — ďalší aktívny TPdf, ktorý vlastní stranu na znovupoužitie. Môže to byť tá istá inštancia ako cieľSourcePageIndex — index strany vnútri Source od nulyTargetPages — indexy cieľových strán od nuly v tomto dokumente. Na pečiatkovanie všetkých strán zadajte prázdne poleOptions — záznam TPdfOverlayOptions. Pre vycentrovaný, automaticky prispôsobený prekryv navrchu použite TPdfOverlayOptions.DefaultReport — prijíma počty pečiatkovaných, zlyhaných a preskočených strán plus šírku/výšku zdrojovej strany použitú na výpočet matice umiestneniaopTopLeft, opTopCenter, opTopRight, opMiddleLeft, opCenter, opMiddleRight, opBottomLeft, opBottomCenter, opBottomRight, opStretch (nezávislé zmeny veľkosti osí) a opCustom (používa explicitné X/Y)Scale=0 znamená automatické prispôsobenie dovnútra boxu strany mínus požadovaný okraj pri zachovaní pomeru strán, pokiaľ nie je Placement=opStretch, v ktorom prípade sa obraz roztiahne na vyplnenie boxuRotation je proti smeru hodinových ručičiek v stupňoch a otáča umiestnený obraz okolo jeho vlastného stredu, takže vodoznak 45° zostáva vizuálne vycentrovanýZUnderlay=True vloží pečiatku na index zásobníka 0, takže sedí za každým existujúcim objektom strany. Natívne API PDFium nemá verejné volanie na presun objektu na index, takže cesta podkladu používa čerstvý Form XObject vložený priamo nadol namiesto premiestňovania pridanej kópieBlendMode sa aplikuje na vložený form objekt cez FPDFPageObj_SetBlendMode. Čistá alfa priehľadnosť na Form XObjecte nie je verejným API PDFium vystavená; použite režimy prelínania ako bmMultiply alebo bmScreen, alebo pred vložením predvykreslite zdroj s požadovanou alfaReport.SkippedPageCount a neprerušia beh
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;