PDFium Delphi Component Docs

FlattenPageRotation Methode

Komponente: TPdf  ·  Unit: PDFium
Backt das aktuelle /Rotate jeder Seite in den Content-Stream, die Seitenboxen und die Annotationsrechtecke ein und setzt /Rotate danach auf 0 zurück, sodass das visuelle Layout erhalten bleibt, ohne auf den Drehungs-Anzeigehinweis angewiesen zu sein

Syntax

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;

Beschreibung

Viele nachgelagerte Werkzeuge (ältere Druckpipelines, Bild-Extraktoren, OCR-Vorverarbeiter, Rasterkonverter) ignorieren den Seiten-Eintrag /Rotate und rendern gedrehte Seiten in der falschen Ausrichtung. FlattenPageRotation wendet die Umkehrung der aktuellen Drehung auf den Seiteninhalt, die Annotationsrechtecke und die Seitenboxen an und setzt /Rotate dann auf 0. Nach dem Aufruf ist die sichtbare Seite identisch mit dem gedrehten Original, hängt aber nicht mehr davon ab, dass der Viewer den Drehungshinweis anwendet

Die Überladung mit einem Argument verarbeitet jede Seite; die PageNumbers-Überladung nimmt ein nullbasiertes Array entgegen, damit Aufrufer eine Teilmenge abflachen können. Seiten, die bereits /Rotate=0 haben, werden in Report.SkippedPageCount gezählt und unangetastet gelassen

Intern durchläuft jede gedrehte Seite FPDFPage_CountObjects + FPDFPage_GetObject + FPDFPageObj_TransformF für den Inhalt, dann FPDFPage_GetAnnot + FPDFAnnot_GetRect / FPDFAnnot_SetRect für Anmerkungen, dann FPDFPage_SetMediaBox / FPDFPage_SetCropBox für die Seitenboxen und schließlich FPDFPage_SetRotation mit 0. Die Matrix wird aus der ungedrehten MediaBox abgeleitet, die FPDFPage_GetMediaBox zurückgibt

Parameter

Hinweise

Beispiel

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;

Siehe auch

PageRotation, TransformPageObject, SetPageBox