/Rotate ind i content streamen, sideboksene og annotationsrektanglerne og nulstiller derefter /Rotate til 0, så det visuelle layout bevares uden at stole på rotationsvisningshintetfunction FlattenPageRotation(
const Options : TPdfFlattenRotationOptions;
out Report : TPdfFlattenRotationReport): Boolean; overload;
function FlattenPageRotation(
const PageNumbers : array of Integer;
const Options : TPdfFlattenRotationOptions;
out Report : TPdfFlattenRotationReport): Boolean; overload;
Mange downstream-værktøjer (ældre print-pipelines, billedekstraktorer,
OCR-forprocessorer, rasterkonvertere) ignorerer side-entries /Rotate
og renderer roterede sider i forkert orientering.
FlattenPageRotation anvender det inverse af den aktuelle rotation på
sideindholdet, annotationsrektanglerne og sideboksene og sætter derefter
/Rotate til 0. Efter kaldet er den synlige side
identisk med det roterede original, men stoler ikke længere på, at
fremviseren anvender rotationshintet
Overloaden med ét argument behandler hver side; overloaden med
PageNumbers tager et nulbaseret array, så kaldere kan fladteste et udvalg. Sider, der allerede har
/Rotate=0, tælles i Report.SkippedPageCount
og efterlades urørt
Internt kører hver roteret side gennem
FPDFPage_CountObjects + FPDFPage_GetObject
+ FPDFPageObj_TransformF for indholdet, derefter
FPDFPage_GetAnnot + FPDFAnnot_GetRect /
FPDFAnnot_SetRect for annoteringerne, derefter
FPDFPage_SetMediaBox / FPDFPage_SetCropBox
for sideboksene og til sidst FPDFPage_SetRotation
med 0. Matricen udledes af den urotaterede MediaBox, som
FPDFPage_GetMediaBox returnerer
PageNumbers — nulbaserede sideindeks, der skal behandles. Giv et tomt array (eller brug overloaden med ét argument) for at fladteste hver sideOptions — TPdfFlattenRotationOptions med TransformAnnotations, TransformPageBoxes og AutoUpdate. Default transformerer annoteringer, bytter sidebokse og kalder UpdatePage efter hver roteret sideReport — TPdfFlattenRotationReport med ProcessedPageCount, SkippedPageCount, FailedPageCount, TotalObjectsTransformed og TotalAnnotationsTransformed plus Succeeded og ErrorMessage[0, 1, -1, 0, H, 0], 180° bruger [-1, 0, 0, -1, W, H], 270° bruger [0, -1, 1, 0, 0, W], hvor W og H er den urotaterede MediaBox' dimensionerTransformPageBoxes=False, når kaldere selv agter at skrive boksene omleft <= right / bottom <= topPageNumber gemmes og gendannes omkring kaldet, så kaldere trygt kan fortsætte på deres tidligere aktive side/Rotate=0, springes over og tælles i Report.SkippedPageCount; en kørsel, hvor alle blev sprunget over, returnerer stadig True, for intet fejlede
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;