PDFium Delphi Component 文件

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, 最後以 0 呼叫 FPDFPage_SetRotation。 矩陣由 FPDFPage_GetMediaBox 傳回的 未旋轉 MediaBox 推導而來

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