PDFium Delphi Component Docs

Transakční náhrady textu se stylem

Přidejte FPdfStyledEdit a dodejte IPdfRegexEngine pro plánování a provádění náhrad nad nativními textovými objekty nejvyšší úrovně

PlanStyledPdfRegexReplacements zachytí reprodukovatelný snapshot zdroje, spojí skutečné glyphy Unicode v pořadí stránek a objektů a mapuje shody zpět na stabilní anchors objektů; generované mezery extrakce a konce řádků vynechává

ExecuteStyledPdfReplacements před změnou nezávisle načteného dokumentu ověří SHA-256 snapshotu, aktuální identitu zdroje, anchors a nepřekrývající se intervaly

Identita zdroje používá reprodukovatelnou serializaci včetně normalizovaných timestampů a identifikátorů, nikoli původní bajty souboru; plán uchovává skutečné bajty snapshotu a jejich SHA-256

Nativní font, velikost textu, barva a matice se pokud možno znovu používají; náhrady přes objekty či stránky zachovávají styl prvního objektu a odstraní spotřebované znaky z dalších objektů při zachování zbývajícího textu a pořadí stránek

FallbackFontName explicitně vybere standardní PostScript font, pokud nelze reprodukovat nativní Unicode; ForceFallbackFont žádá tuto cestu přímo

Fallback zachovává pořadí kreslení, matici, režim vykreslení a atributy fill a stroke; objekty s clippingem, průhledností, marked content nebo tagy odmítá, místo aby potichu ztratil jejich grafickou sémantiku

Text širší než zdrojové hranice může vodorovně zmenšit, pokud je matice vzpřímená a bez shear; MinHorizontalScale má výchozí hodnotu 0.5, užší náhradní text zachová původní matici

Tento postup podporuje jednořádkový náhradní text a omezený vodorovný fitting; neprochází vnořené Form XObjects, nepřepisuje sémantiku Tagged PDF ani nepřeformátovává odstavce

Podepsané či šifrované dokumenty a XFA se odmítají; zrušení, zastaralé plány, neplatné UTF-16, nepodporovaná písma či vyčerpané rozpočty ponechají dokument volajícího beze změny

PreviewOnly vrací nezávisle znovu otevřený výsledek v PreviewPdf bez náhrady dokumentu volajícího; úspěšný Commit nahrazuje dokument až po ověření extrakce glyphů a počtu stránek po uložení a opětovném otevření

Všechny shody se skládají do konečného textu objektu před změnou nativních objektů; fitting a minimální scale se ověří jednou proti původním hranicím, aby opakované shody nehromadily přílišné zmenšení

Prázdný náhradní text po dokončení všech anchored úprav odstraní úplně spotřebovaný textový objekt; více náhrad se provádí odzadu, aby starší zdrojové offsety zůstaly platné

Výchozí limity jsou 256 MiB dokumentových bajtů, 10,000 stránek, 100,000 textových objektů, 16,777,216 jednotek UTF-16 a 100,000 náhrad; rozpočet skenování textu je 67,108,864 nativních návštěv znaků a kopírovaných jednotek plánování UTF-16

Pevná maxima zachovávají tyto limity stránek, objektů, znaků a náhrad, dovolují 512 MiB dokumentových bajtů a 1,073,741,824 návštěv skenování a omezují název fallback fontu na 1,024 bajtů

Report obsahuje SHA-256 zdroje a výstupu, počty aplikovaných náhrad, fallbacků a škálování a původní/konečný text i hranice každého objektu v bodech uživatelského prostoru PDF; indexy stránek a objektů jsou zdrojové indexy od nuly

Nahrazování textu není workflow bezpečnostní redakce; pro odstranění citlivého obsahu a souvisejících dat dokumentu použijte vyhrazená API redakce

Options := TPdfStyledEditOptions.Default;
Plan := PlanStyledPdfRegexReplacements(Pdf, Pattern, Replacement, Engine, Options);
Options.PreviewOnly := True;
if not ExecuteStyledPdfReplacements(Pdf, Plan, Options, PreviewPdf, Report) then
  raise EPdfProduction.Create(Report.ErrorMessage);

Veřejné deklarace

type
  TPdfStyledEditOptions= record
    MaxDocumentBytes: Integer;
    MaxPages, MaxTextObjects, MaxCharacters, MaxReplacements: Integer;
    MaxTextScanWork: Int64;
    MinHorizontalScale: Double;
    FallbackFontName: AnsiString;
    ForceFallbackFont: Boolean;
    PreviewOnly: Boolean;
    CancellationToken: IPdfCancellationToken;
    class function Default: TPdfStyledEditOptions; static;
  end;
  TPdfStyledEditPlan= record
    SourceSha256: string;
    SourceBytes: TBytes;
    Spans: TPdfStyledSpans;
    Replacements: TPdfStyledReplacements;
  end;
  TPdfStyledObjectChange= record
    PageIndex, ObjectIndex: Integer;
    BeforeText, AfterText: WideString;
    BeforeBounds, AfterBounds: TPdfRectangle;
    HorizontalScale: Double;
    FontFallback: Boolean;
  end;
  TPdfStyledObjectChanges= array of TPdfStyledObjectChange;
  TPdfStyledEditReport= record
    Succeeded, Cancelled, PreviewOnly: Boolean;
    AppliedReplacementCount, FontFallbackCount, ScaledObjectCount: Integer;
    SourceSha256, OutputSha256, ErrorMessage: string;
    Changes: TPdfStyledObjectChanges;
  end;

function PlanStyledPdfRegexReplacements(Pdf: TPdf;
  const Pattern, Replacement: WideString; Engine: IPdfRegexEngine;
  const Options: TPdfStyledEditOptions): TPdfStyledEditPlan;
function ExecuteStyledPdfReplacements(Pdf: TPdf;
  const Plan: TPdfStyledEditPlan; const Options: TPdfStyledEditOptions;
  out PreviewPdf: TBytes; out Report: TPdfStyledEditReport): Boolean;