function StampPagesFromPdf(
Source : TPdf;
SourcePageIndex : Integer;
const TargetPages : array of Integer;
const Options : TPdfOverlayOptions;
out Report : TPdfOverlayReport): Boolean;
StampPagesFromPdf هو مؤلِّف التراكب والتسطير والعلامة المائية عالي المستوى۔ يصنع Form XObject من صفحة مصدر عبر FPDF_NewXObjectFromPage، ثم يضع نسخة واحدة موضَّعة ومحجَّمة ودوَّرة اختياريًا من ذلك XObject في كل صفحة هدف مطلوبة۔ يُضبط الموضع والتحجيم والدوران ووضع المزج وترتيب z عبر سجل TPdfOverlayOptions أي Placement و X و Y و Scale و Rotation و Margin و UseCropBox و ZUnderlay و BlendMode؛ ويسجّل المعامل الخارج TPdfOverlayReport قيم StampedPageCount و FailedPageCount و SkippedPageCount و SourcePageWidth و SourcePageHeight و Succeeded و ErrorMessage
يدمج كل ختم داخليًا بين FPDF_NewFormObjectFromXObject و FPDFPageObj_SetMatrix و FPDFPageObj_SetBlendMode وإما FPDFPage_InsertObject للتراكب أو FPDFPage_InsertObjectAtIndex بفهرس مكدس 0 للتسطير۔ تُبنى مصفوفة الموضع من PageWidth/PageHeight مع حقول الخيارات، فتُسقط كل المراسي والهوامش والتحجيم والدوران على تحويل واحد يطبقه PDFium على كائن النموذج المدرج
يجب أن يكون المصدر والوجهة كلاهما Active۔ قد يكون المصدر نسخة TPdf منفصلة أو حتى هذا المستند نفسه وهو الختم الذاتي؛ إذ يُحفظ PageNumber الحالي للمستدعي على المستندين ويُستعاد عبر الاستدعاء
Source — نسخة TPdf نشطة أخرى تملك الصفحة المراد إعادة استخدامها، وقد تكون هي نفسها نسخة الوجهةSourcePageIndex — فهرس صفري للصفحة داخل SourceTargetPages — فهارس صفحات هدف صفرية داخل هذا المستند، ومرر مصفوفة فارغة لختم كل صفحةOptions — سجل TPdfOverlayOptions، واستخدم TPdfOverlayOptions.Default لتراكب في المنتصف بملاءمة تلقائية فوق المحتوىReport — يستلم عدّادات الختم والفشل والتخطي إضافة إلى عرض وارتفاع الصفحة المصدر المستخدمين لحساب مصفوفة الموضعopTopLeft و opTopCenter و opTopRight و opMiddleLeft و opCenter و opMiddleRight و opBottomLeft و opBottomCenter و opBottomRight و opStretch (تحجيم مستقل لكل محور) و opCustom (يستخدم X/Y صريحتين)Scale=0 يعني الملاءمة التلقائية داخل صندوق الصفحة مطروحًا منه الهامش المطلوب مع حفظ نسبة الأبعاد، إلا إذا كان Placement=opStretch فتُشد الصورة لتملأ الصندوقRotation بالدرجات عكس اتجاه عقارب الساعة ويدوّر الصورة الموضوعة حول مركزها، فتبقى علامة مائية بزاوية 45° في المنتصف بصريًاZUnderlay=True يدرج الختم عند فهرس المكدس 0 فيجلس خلف كل كائنات الصفحة الموجودة، وواجهة PDFium الأصلية لا تملك استدعاء عام لنقل كائن إلى فهرس، لذا يستخدم مسار التسطير Form XObject جديدًا يدرج مباشرة في الأسفل بدلًا من إعادة تموضع نسخة ملحقةBlendMode على كائن النموذج المدرج عبر FPDFPageObj_SetBlendMode، ولا تكشف واجهة PDFium العامة شفافية ألفا خالصة على Form XObject؛ لذا استخدم أوضاع مزج مثل bmMultiply أو bmScreen، أو اعرض المصدر مسبقًا بالألفا المرغوبة قبل الختمReport.SkippedPageCount ولا تُجهض العملية
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;