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