PDFium Delphi Component Docs

FlattenPageRotation Метод

Компонент: TPdf  ·  Модуль: PDFium
Вшивает текущий /Rotate каждой страницы в поток содержимого, блоки страницы и прямоугольники аннотаций, затем сбрасывает /Rotate в 0, чтобы визуальный макет сохранялся без необходимости полагаться на указание поворота при отображении

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

Многие сторонние инструменты (старые печатные конвейеры, извлекатели изображений, препроцессоры OCR, растровые конвертеры) игнорируют запись страницы /Rotate и отображают повёрнутые страницы в неверной ориентации. FlattenPageRotation применяет обратное преобразование текущего поворота к содержимому страницы, прямоугольникам аннотаций и блокам страницы, затем устанавливает /Rotate в 0. После вызова видимая страница идентична повёрнутому оригиналу, но больше не зависит от применения подсказки поворота просмотрщиком

Перегрузка с одним аргументом обрабатывает каждую страницу; перегрузка PageNumbers принимает массив с индексацией от нуля, так что вызывающий код может преобразовать подмножество страниц. Страницы, уже находящиеся в /Rotate=0, учитываются в Report.SkippedPageCount и остаются нетронутыми

Внутри каждая повёрнутая страница проходит через FPDFPage_CountObjects + FPDFPage_GetObject + FPDFPageObj_TransformF для содержимого, затем FPDFPage_GetAnnot + FPDFAnnot_GetRect / FPDFAnnot_SetRect для аннотаций, затем FPDFPage_SetMediaBox / FPDFPage_SetCropBox для блоков страницы и в конце FPDFPage_SetRotation с 0. Матрица строится из неповернутого MediaBox, возвращаемого 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