Tilføj FPdfStyledEdit og lever en IPdfRegexEngine til planlægning og udførelse af erstatninger i native tekstobjekter på topniveau
PlanStyledPdfRegexReplacements indsamler et reproducerbart kildesnapshot, sammenkæder faktiske Unicode-glyphs i side- og objektrækkefølge og mapper matches til stabile objektankre; genererede extraction spaces og linjeskift udelades
ExecuteStyledPdfReplacements validerer snapshot-SHA-256, aktuel kildeidentitet, ankrene og ikke-overlappende intervaller før ændringer i et uafhængigt indlæst dokument
Kildeidentiteten bruger reproducerbar serialisering med normaliserede timestamps og identifiers, ikke de originale filbytes; planen gemmer de faktiske snapshot-bytes og deres SHA-256
Native skrifttype, tekststørrelse, farve og matrix genbruges hvor muligt; erstatning på tværs af objekter eller sider beholder det første objekts stil og fjerner forbrugte tegn fra senere objekter med bevaret resttekst og siderækkefølge
FallbackFontName vælger eksplicit en standard PostScript-font, når native Unicode ikke kan gengives; ForceFallbackFont vælger dette spor direkte
Fallback bevarer painter order, matrix, rendering mode, fill og stroke attributes; clipped, transparent, marked eller tagged objekter afvises i stedet for lydløst at miste deres grafiksemantik
Tekst bredere end kildens bounds kan skaleres vandret ned, hvis matricen er upright og uden shear; MinHorizontalScale er 0.5 som standard, mens smallere erstatningstekst beholder den oprindelige matrix
Arbejdsgangen understøtter enkeltlinje-erstatningstekst og begrænset vandret fitting; den traverserer ikke indlejrede Form XObjects, omskriver ikke Tagged PDF-semantik og udfører ikke paragraph reflow
Signerede eller krypterede dokumenter og XFA afvises; cancellation, forældede planer, ugyldig UTF-16, ikke-understøttede fonts og opbrugte budgetter efterlader kalderens dokument uændret
PreviewOnly returnerer det uafhængigt genåbnede resultat i PreviewPdf uden at erstatte kalderen; et vellykket commit erstatter først dokumentet, når glyph extraction og sideantal er verificeret efter gemning og genåbning
Alle matches samles til endelig objekttekst før native ændringer; fitting og minimum scale kontrolleres én gang mod originale bounds, så gentagne matches ikke akkumulerer overdreven nedskalering
Tom erstatningstekst fjerner et fuldt forbrugt tekstobjekt efter alle anchored edits; flere erstatninger udføres bagfra, så tidligere kildeoffsets forbliver gyldige
Standardgrænserne er 256 MiB dokumentbytes, 10,000 sider, 100,000 tekstobjekter, 16,777,216 UTF-16-enheder og 100,000 erstatninger; text-scan-arbejdsbudgettet er 67,108,864 native tegnbesøg og UTF-16 planning-copy-enheder
De hårde maksimummer bevarer disse side-, objekt-, tegn- og erstatningsgrænser, tillader 512 MiB dokumentbytes og 1,073,741,824 scan-besøg og begrænser et fallback-fontnavn til 1,024 bytes
Rapporten indeholder kilde- og output-SHA-256, antal anvendte erstatninger, fallbacks og skaleringer samt original/endelig tekst og bounds for hvert objekt i PDF user-space points; side- og objektindekser er nulbaserede kildeindekser
Teksterstatning er ikke en sikker redaction-arbejdsgang; brug de dedikerede redaction-API'er til fjernelse af følsomt indhold og tilknyttede dokumentdata
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;