PDFium Delphi Component Docs

Transaktionel teksterstatning med bevaret stil

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

Offentlige deklarationer

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;