/Rotate değerini içerik akışına, sayfa kutularına ve ek açıklama dikdörtgenlerine işler, ardından /Rotate değerini 0'a sıfırlar; böylece görsel düzen, döndürme görüntüleme ipucuna güvenilmeden korunurfunction FlattenPageRotation(
const Options : TPdfFlattenRotationOptions;
out Report : TPdfFlattenRotationReport): Boolean; overload;
function FlattenPageRotation(
const PageNumbers : array of Integer;
const Options : TPdfFlattenRotationOptions;
out Report : TPdfFlattenRotationReport): Boolean; overload;
Birçok aşağı akış aracı (eski yazdırma hatları, görsel çıkarıcılar, OCR ön işlemcileri, raster dönüştürücüler) /Rotate sayfa girişini yok sayar ve döndürülmüş sayfaları yanlış yönde oluşturur. FlattenPageRotation, geçerli döndürmenin tersini sayfa içeriğine, ek açıklama dikdörtgenlerine ve sayfa kutularına uygular, ardından /Rotate değerini 0 yapar. Çağrıdan sonra görünen sayfa, döndürülmüş özgün hâliyle özdeşdir ancak artık görüntüleyicinin döndürme ipucunu uygulamasına gerek kalmaz
Tek argümanlı aşırı yükleme her sayfayı işler; PageNumbers aşırı yüklemesi sıfır tabanlı bir dizi kabul eder, böylece çağıranlar bir alt kümeyi düzleştirebilir. Halihazırda /Rotate=0 olan sayfalar Report.SkippedPageCount içinde sayılır ve dokunulmadan bırakılır
Dahili olarak her döndürülmüş sayfa; içerik için FPDFPage_CountObjects + FPDFPage_GetObject + FPDFPageObj_TransformF, ardından ek açıklamalar için FPDFPage_GetAnnot + FPDFAnnot_GetRect / FPDFAnnot_SetRect, sayfa kutuları için FPDFPage_SetMediaBox / FPDFPage_SetCropBox ve son olarak 0 değeriyle FPDFPage_SetRotation aşamalarından geçer. Matris, FPDFPage_GetMediaBox tarafından döndürülen döndürülmemiş MediaBox'tan türetilir
PageNumbers — işlenecek sıfır tabanlı sayfa indeksleri. Her sayfayı düzleştirmek için boş bir dizi geçirin (veya tek argümanlı aşırı yüklemeyi kullanın)Options — TransformAnnotations, TransformPageBoxes ve AutoUpdate içeren TPdfFlattenRotationOptions. Default; ek açıklamaları dönüştürür, sayfa kutularını takas eder ve her döndürülmüş sayfadan sonra UpdatePage çağırırReport — ProcessedPageCount, SkippedPageCount, FailedPageCount, TotalObjectsTransformed ve TotalAnnotationsTransformed içeren, ayrıca Succeeded ve ErrorMessage barındıran TPdfFlattenRotationReport[0, 1, -1, 0, H, 0], 180° için [-1, 0, 0, -1, W, H], 270° için [0, -1, 1, 0, 0, W] kullanılır; W ve H, döndürülmemiş MediaBox boyutlarıdırTransformPageBoxes=False ile devre dışı bırakabilirleft <= right / bottom <= top değişmezlerini tersine çevirebileceğinden, dönüştürülmüş dört köşeden yeniden inşa edilirPageNumber değeri çağrı öncesinde kaydedilir ve sonrasında geri yüklenir; böylece çağıranlar önceki etkin sayfalarında güvenle çalışmaya devam edebilir/Rotate=0 olan sayfalar atlanır ve Report.SkippedPageCount içinde sayılır; tamamen atlayan bir çalıştırma, hiçbir şey başarısız olmadığı için yine de True döndürür
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;