PDFium Delphi Component Docs

Transaktionaler Textersatz mit Stilerhalt

Fügen Sie FPdfStyledEdit hinzu und stellen Sie eine IPdfRegexEngine bereit, um Ersetzungen in nativen Textobjekten der obersten Ebene zu planen und auszuführen

PlanStyledPdfRegexReplacements erfasst einen reproduzierbaren Quellsnapshot, verbindet echte Unicode-Glyphen in Seiten- und Objektreihenfolge und ordnet Treffer stabilen Objektankern zu; erzeugte Extraktionsleerzeichen und Zeilenumbrüche werden ausgeschlossen

ExecuteStyledPdfReplacements prüft Snapshot-SHA-256, aktuelle Quellidentität, Anker und überlappungsfreie Intervalle vor der Änderung eines unabhängig geladenen Dokuments

Die Quellidentität verwendet reproduzierbare Serialisierung mit normalisierten Zeitstempeln und Kennungen statt Originaldateibytes; der Plan speichert die tatsächlichen Snapshotbytes und ihren SHA-256

Native Schrift, Textgröße, Farbe und Matrix werden möglichst wiederverwendet; Ersetzungen über mehrere Objekte oder Seiten behalten den Stil des ersten Objekts und entfernen verbrauchte Zeichen aus den folgenden, bei erhaltenem Resttext und Seitenreihenfolge

FallbackFontName wählt explizit eine Standard-PostScript-Schrift, wenn natives Unicode nicht reproduziert werden kann; ForceFallbackFont fordert diesen Weg direkt an

Der Fallback erhält Zeichenreihenfolge, Matrix, Renderingmodus, Füll- und Konturattribute; beschnittene, transparente, markierte oder getaggte Objekte werden abgelehnt, statt ihre Grafiksemantik stillschweigend zu verlieren

Breiterer Ersatztext darf bei aufrechter, nicht gescherten Matrix horizontal schrumpfen; MinHorizontalScale beträgt standardmäßig 0.5, schmalerer Ersatztext behält die Originalmatrix

Der Workflow unterstützt einzeiligen Ersatztext und begrenzte horizontale Anpassung; er durchläuft keine verschachtelten Form XObjects, schreibt keine Tagged-PDF-Semantik um und bricht keine Absätze neu um

Signierte oder verschlüsselte Dokumente und XFA werden abgelehnt; Abbruch, veraltete Pläne, ungültiges UTF-16, nicht unterstützte Schriften und erschöpfte Budgets lassen das Aufruferdokument unverändert

PreviewOnly liefert das unabhängig wiedergeöffnete Ergebnis in PreviewPdf, ohne den Aufrufer zu ersetzen; ein erfolgreicher Commit ersetzt das Dokument erst nach geprüfter Glyphenextraktion und Seitenanzahl nach Speichern/Wiederöffnen

Alle Treffer werden vor nativen Änderungen zum finalen Objekttext zusammengesetzt; Anpassung und Mindestskalierung werden einmal gegen die Originalgrenzen geprüft, damit mehrere Treffer nicht übermäßig kumulativ schrumpfen

Leerer Ersatztext entfernt ein vollständig verbrauchtes Textobjekt nach allen verankerten Änderungen; mehrere Ersetzungen laufen rückwärts, damit frühere Quelloffsets gültig bleiben

Standardlimits sind 256 MiB Dokumentbytes, 10,000 Seiten, 100,000 Textobjekte, 16,777,216 UTF-16-Einheiten und 100,000 Ersetzungen; das Scanbudget beträgt 67,108,864 native Zeichenbesuche und UTF-16-Planungskopiereinheiten

Die festen Maxima behalten Seiten-, Objekt-, Zeichen- und Ersetzungsgrenzen bei, erlauben 512 MiB Dokumentbytes und 1,073,741,824 Scanbesuche und begrenzen den Fallback-Schriftnamen auf 1,024 Bytes

Der Bericht enthält Quell- und Ausgabe-SHA-256, Ersetzungs-, Fallback- und Skalierungszahlen sowie ursprünglichen/finalen Objekttext und Grenzen in PDF-Benutzerraumpunkten; Seiten- und Objektindizes sind nullbasierte Quellindizes

Textersatz ist kein Sicherheits-Schwärzungsworkflow; nutzen Sie dafür die dedizierten APIs zur Entfernung sensibler Inhalte und zugehöriger Dokumentdaten

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

Öffentliche Deklarationen

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;