/Rotate van elke pagina in de contentstream, de page boxes en de annotatierechthoeken en zet daarna /Rotate terug op 0, zodat de visuele layout behouden blijft zonder op de rotatie-displayhint te vertrouwenfunction FlattenPageRotation(
const Options : TPdfFlattenRotationOptions;
out Report : TPdfFlattenRotationReport): Boolean; overload;
function FlattenPageRotation(
const PageNumbers : array of Integer;
const Options : TPdfFlattenRotationOptions;
out Report : TPdfFlattenRotationReport): Boolean; overload;
Veel downstream-tools (oudere print-pipelines, image-extractors,
OCR-voorverwerkers, rasterconverters) negeren de /Rotate-
pagina-entry en renderen gedraaide pagina's in de verkeerde oriëntatie.
FlattenPageRotation past de inverse van de huidige rotatie toe op de
paginacontent, de annotatierechthoeken en de page boxes en zet daarna
/Rotate op 0. Na de aanroep is de zichtbare pagina
identiek aan het gedraaide origineel, maar niet langer afhankelijk
van een viewer die de rotatiehint toepast
De overload met één argument verwerkt elke pagina; de
PageNumbers-overload accepteert een op nul gebaseerde array zodat
aanroepers een subset kunnen afvlakken. Pagina's die al op
/Rotate=0 staan worden geteld in
Report.SkippedPageCount en ongemoeid gelaten
Intern doorloopt elke gedraaide pagina
FPDFPage_CountObjects + FPDFPage_GetObject
+ FPDFPageObj_TransformF voor de content, daarna
FPDFPage_GetAnnot + FPDFAnnot_GetRect /
FPDFAnnot_SetRect voor annotaties, daarna
FPDFPage_SetMediaBox / FPDFPage_SetCropBox
voor de page boxes en tenslotte FPDFPage_SetRotation
met 0. De matrix wordt afgeleid uit de niet-gedraaide MediaBox die
FPDFPage_GetMediaBox teruggeeft
PageNumbers — op nul gebaseerde pagina-indexen om te verwerken. Geef een lege array door (of gebruik de overload met één argument) om elke pagina af te vlakkenOptions — TPdfFlattenRotationOptions met TransformAnnotations, TransformPageBoxes en AutoUpdate. Default transformeert annotaties, wisselt page boxes en roept UpdatePage aan na elke gedraaide paginaReport — TPdfFlattenRotationReport met ProcessedPageCount, SkippedPageCount, FailedPageCount, TotalObjectsTransformed en TotalAnnotationsTransformed, plus Succeeded en ErrorMessage[0, 1, -1, 0, H, 0], 180° gebruikt [-1, 0, 0, -1, W, H], 270° gebruikt [0, -1, 1, 0, 0, W], waarbij W en H de afmetingen van de niet-gedraaide MediaBox zijnTransformPageBoxes=False wanneer aanroepers de boxes zelf opnieuw willen schrijvenleft <= right / bottom <= top kunnen omdraaienPageNumber van de aanroeper wordt bewaard en rond de aanroep hersteld, zodat aanroepers veilig kunnen verderwerken op hun eerder actieve pagina/Rotate=0 staan worden overgeslagen en geteld in Report.SkippedPageCount; een run waarin alles wordt overgeslagen geeft alsnog True terug omdat niets is misgegaan
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;