/Rotate الحالية لكل صفحة في تيار المحتوى وصناديق الصفحة ومستطيلات التعليقات التوضيحية، ثم تعيد ضبط /Rotate على 0 بحيث يُحفظ التخطيط المرئي دون الاعتماد على تلميح العرض بالدورانfunction FlattenPageRotation(
const Options : TPdfFlattenRotationOptions;
out Report : TPdfFlattenRotationReport): Boolean; overload;
function FlattenPageRotation(
const PageNumbers : array of Integer;
const Options : TPdfFlattenRotationOptions;
out Report : TPdfFlattenRotationReport): Boolean; overload;
كثير من الأدوات اللاحقة (خطوط طباعة أقدم، مُستخرِجات صور، مُعالِجات OCR تمهيدية، محولات نقطية) تتجاهل مدخل الصفحة /Rotate وتعرض الصفحات المدورة باتجاه خاطئ. يطبق FlattenPageRotation عكس الدوران الحالي على محتوى الصفحة ومستطيلات التعليقات التوضيحية وصناديق الصفحة، ثم يضبط /Rotate على 0. بعد الاستدعاء تصبح الصفحة المرئية مطابقة للأصل المدور، لكنها لم تعد تعتمد على تطبيق العارض تلميح الدوران
تعالج الصيغة أحادية الوسيطة كل صفحة؛ وتقبل صيغة PageNumbers مصفوفة يبدأ ترقيمها من الصفر ليتمكن المستدعون من دمج مجموعة فرعية. وتُحصى الصفحات التي هي عند /Rotate=0 أصلًا في Report.SkippedPageCount ويُترك دون مساس
داخليًا تمر كل صفحة مدورة عبر FPDFPage_CountObjects و FPDFPage_GetObject و FPDFPageObj_TransformF للمحتوى، ثم FPDFPage_GetAnnot و FPDFAnnot_GetRect / FPDFAnnot_SetRect للتعليقات التوضيحية، ثم FPDFPage_SetMediaBox / FPDFPage_SetCropBox لصناديق الصفحة، وأخيرًا FPDFPage_SetRotation بالقيمة 0. وتُشتق المصفوفة من MediaBox غير المدور الذي يعيده FPDFPage_GetMediaBox
PageNumbers — فهارس صفحات يبدأ ترقيمها من الصفر تُعالج. مرر مصفوفة فارغة (أو استخدم الصيغة أحادية الوسيطة) لدمج كل صفحةOptions — TPdfFlattenRotationOptions بالحقول TransformAnnotations و TransformPageBoxes و AutoUpdate. ويحوِّل Default التعليقات التوضيحية ويبدّل صناديق الصفحة ويستدعي UpdatePage بعد كل صفحة مدورةReport — TPdfFlattenRotationReport بالحقول ProcessedPageCount و SkippedPageCount و FailedPageCount و TotalObjectsTransformed و TotalAnnotationsTransformed، مع Succeeded و ErrorMessage[0, 1, -1, 0, H, 0]، و 180° تستخدم [-1, 0, 0, -1, W, H]، و 270° تستخدم [0, -1, 1, 0, 0, W]، حيث W و H بُعدا MediaBox غير المدورTransformPageBoxes=False حين ينوي المستدعون إعادة كتابة الصناديق بأنفسهمleft <= right / bottom <= topPageNumber الحالي للمستدعي ويُستعاد حول الاستدعاء، فيمكن للمستدعين متابعة العمل بأمان على صفحتهم النشطة سابقًا/Rotate=0 أصلًا وتُحصى في Report.SkippedPageCount؛ والتشغيلة المتخطاة كلها تعيد True رغم ذلك لأن شيئًا لم يفشل
var
Options: TPdfFlattenRotationOptions;
Report: TPdfFlattenRotationReport;
begin
Pdf1.FileName := 'C:\Scanned.pdf';
Pdf1.Active := True;
Options := TPdfFlattenRotationOptions.Default;
Pdf1.FlattenPageRotation(Options, Report);
Pdf1.SaveAs('C:\Scanned_flat.pdf');
end;