PDFium Delphi Component Docs

FlattenPageRotation Método

Componente: TPdf  ·  Unidad: PDFium
Incorpora el /Rotate actual de cada página en el flujo de contenido, las cajas de página y los rectángulos de anotación, y luego restablece /Rotate a 0, de modo que la disposición visual se conserva sin depender de la sugerencia de visualización de rotación

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, convertidores 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 las cajas de página, y luego establece /Rotate en 0. Después de la llamada la página visible es idéntica al original rotado, pero ya no depende de que el visor aplique la sugerencia de rotación

La sobrecarga de un solo argumento procesa todas las páginas; la sobrecarga con PageNumbers acepta un arreglo basado en cero para que quien llame pueda 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, luego FPDFPage_GetAnnot + FPDFAnnot_GetRect / FPDFAnnot_SetRect para las anotaciones, después FPDFPage_SetMediaBox / FPDFPage_SetCropBox para las cajas de página y, por último, FPDFPage_SetRotation con 0. La matriz se deriva del MediaBox sin rotar que devuelve 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