PDFium Delphi Component Docs

Transactionele vervanging van opgemaakte tekst

Voeg FPdfStyledEdit toe en lever een IPdfRegexEngine om vervangingen op native top-level tekstobjecten te plannen en uit te voeren

PlanStyledPdfRegexReplacements legt een reproduceerbare bronsnapshot vast, voegt de echte Unicode-glyphs samen in pagina- en objectvolgorde en wijst treffers terug aan stabiele objectankers; gegenereerde spaties en regeleinden uit de extractie blijven buiten beschouwing

ExecuteStyledPdfReplacements valideert de snapshot-SHA-256, de huidige bronidentiteit, de ankers en niet-overlappende intervallen voordat een onafhankelijk geladen document wordt gewijzigd

De bronidentiteit gebruikt reproduceerbare serialisatie, inclusief genormaliseerde timestamps en identifiers, in plaats van de oorspronkelijke bestandsbytes; het plan bewaart de feitelijke snapshotbytes en hun SHA-256

Native font, tekengrootte, kleur en matrix worden waar mogelijk hergebruikt; vervangingen die objecten of pagina's overspannen behouden de stijl van het eerste object en verwijderen verbruikte tekens uit latere objecten, met behoud van resterende tekst en paginavolgorde

FallbackFontName kiest expliciet een standaard PostScript-font wanneer native Unicode niet gereproduceerd kan worden; ForceFallbackFont vraagt dat pad direct aan

De fallback behoudt de tekenvolgorde, matrix, renderingmodus en vul- en lijneigenschappen; geclipte, transparante, gemarkeerde of getagde objecten worden geweigerd in plaats van stilletjes hun grafische semantiek te verliezen

Tekst die breder is dan zijn bronbegrenzing kan horizontaal krimpen wanneer zijn matrix rechtop en zonder afschuiving is; MinHorizontalScale staat standaard op 0.5, en smallere vervangingstekst behoudt de oorspronkelijke matrix

Deze werkstroom ondersteunt vervangingstekst van één regel en begrensd horizontaal inpassen; hij doorloopt geen geneste Form XObjects, herschrijft geen Tagged PDF-semantiek en doet geen alinea-herflow

Ondertekende of versleutelde documenten en XFA worden geweigerd; annulering, verouderde plannen, ongeldige UTF-16, niet-ondersteunde fonts en uitgeputte budgetten laten het document van de aanroeper ongewijzigd

PreviewOnly geeft het onafhankelijk heropende resultaat terug in PreviewPdf zonder de aanroeper te vervangen; een geslaagde commit vervangt het document pas nadat glyphextractie en pagina-aantal na opslaan en heropenen zijn geverifieerd

Alle treffers worden samengevoegd tot de definitieve objecttekst voordat native objecten worden gewijzigd; inpassen en de minimale schaal worden één keer tegen de oorspronkelijke begrenzing gecontroleerd, zodat herhaalde treffers geen overmatige krimp ophopen

Lege vervangingstekst verwijdert een volledig verbruikt tekstobject nadat alle geankerde bewerkingen zijn uitgevoerd; meervoudige vervangingen lopen achterstevoren zodat eerdere bronoffsets geldig blijven

Standaardlimieten zijn 256 MiB aan documentbytes, 10,000 pagina's, 100,000 tekstobjecten, 16,777,216 UTF-16-eenheden en 100,000 vervangingen; het werkbudget voor het tekstscangen is 67,108,864 native tekenbezoeken en UTF-16-plankopie-eenheden

Harde maxima behouden die paginagebonden, object-, teken- en vervangingslimieten, staan 512 MiB aan documentbytes en 1,073,741,824 scanbezoeken toe en begrenzen een fallback-fontnaam op 1,024 bytes

Het rapport bevat bron- en uitvoer-SHA-256-waarden, aantallen toegepaste vervangingen, fallbacks en schalingen, en per object de oorspronkelijke/definitieve tekst en begrenzing in PDF-user-space-punten; pagina- en objectindexen zijn op 0 gebaseerde bronindexen

Een vervangingsoperatie is geen security-redaction-werkstroom; gebruik de specifieke redaction-API's om gevoelige inhoud en bijbehorende documentgegevens te verwijderen

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);

Public declarations

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;