PDFium Delphi Component Docs

FlattenPageRotation Método

Componente: TPdf  ·  Unidad: PDFium
Integra el /Rotate actual de cada página en el flujo de contenido, los cuadros de página y los rectángulos de anotación, y después restablece /Rotate a 0 para que la disposición visual se conserve sin depender de la indicación de rotación de pantalla

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;

Description

Muchas herramientas posteriores (pipelines de impresión antiguos, extractores de imágenes, preprocesadores de OCR, conversores a raster) ignoran la entrada de página /Rotate y renderizan las páginas rotadas en una orientación incorrecta. FlattenPageRotation aplica la inversa de la rotación actual al contenido de la página, a los rectángulos de anotación y a los cuadros de página, y después establece /Rotate en 0. Tras la llamada la página visible es idéntica al original rotado, pero ya no depende de que el visor aplique la indicación de rotación

La sobrecarga de un solo argumento procesa todas las páginas; la sobrecarga con PageNumbers acepta una matriz basada en cero para que los llamadores puedan aplanar un subconjunto. Las páginas que ya están en /Rotate=0 se cuentan en Report.SkippedPageCount y se dejan intactas

Internamente cada página rotada pasa por FPDFPage_CountObjects + FPDFPage_GetObject + FPDFPageObj_TransformF para el contenido, después por FPDFPage_GetAnnot + FPDFAnnot_GetRect / FPDFAnnot_SetRect para las anotaciones, luego por FPDFPage_SetMediaBox / FPDFPage_SetCropBox para los cuadros de página y finalmente por FPDFPage_SetRotation con 0. La matriz se deriva del MediaBox sin rotar devuelto por FPDFPage_GetMediaBox

Parameters

Remarks

Example

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;

See Also

PageRotation, TransformPageObject, SetPageBox