PDFium Delphi Component Docs

Transaktionell ersättning av formaterad text

Lägg till FPdfStyledEdit och tillhandahåll en IPdfRegexEngine för att planera och utföra ersättningar mot nativa textobjekt på toppnivå

PlanStyledPdfRegexReplacements fångar en reproducerbar källögonblicksbild, sammanfogar faktiska Unicode-glyfer i sid- och objektordning och mappar träffar tillbaka till stabila objektankare; genererade extraktionsmellanslag och radbrytningar undantas

ExecuteStyledPdfReplacements validerar ögonblicksbildens SHA-256, aktuell källidentitet, ankare och överlappningsfria intervall innan ett oberoende inläst dokument ändras

Källidentiteten använder reproducerbar serialisering, inklusive normaliserade tidsstämplar och identifierare, i stället för originalfilens byte; planen lagrar de faktiska ögonblicksbildsbytena och deras SHA-256

Nativt teckensnitt, textstorlek, färg och matris återanvänds där det är möjligt; ersättningar som spänner över objekt eller sidor behåller första objektets stil och tar bort förbrukade tecken från senare objekter, samtidigt som kvarvarande text och sidordning bevaras

FallbackFontName väljer explicit ett standard PostScript-teckensnitt när nativ Unicode inte kan återskapas; ForceFallbackFont begär den vägen direkt

Fallback bevarar målarens ordning, matris, renderingsläge och fyllnads- och streckattribut; utklippta, transparenta, märkta eller taggade objekt avvisas i stället för att tyst tappa sin grafiksemantik

Text som är bredare än sina källgränser får krympa horisontellt när dess matris är upprätt och oskevad; MinHorizontalScale har 0.5 som standard, och smalare ersättningstext behåller den ursprungliga matrisen

Detta arbetsflöde stödjer ersättningstext på en rad och avgränsad horisontell anpassning; det går inte igenom kapslade Form XObjects, skriver inte om Tagged PDF-semantik och utför ingen styckesreflow

Signerade eller krypterade dokument samt XFA avvisas; avbrytning, inaktuella planer, ogiltig UTF-16, teckensnitt som inte stöds och förbrukade budgetar lämnar anroparens dokument oförändrat

PreviewOnly returnerar det oberoende återöppnade resultatet i PreviewPdf utan att ersätta anroparens; en lyckad commit ersätter dokumentet först efter att glyfextraktion och sidantal har verifierats efter sparning och återöppning

Alla träffar sammanställs till slutlig objekttext innan nativa objekt ändras; anpassning och minsta skala kontrolleras en gång mot de ursprungliga gränserna, vilket hindrar upprepade träffar från att ackumulera överdriven krympning

Tom ersättningstext tar bort ett fullständigt förbrukat textobjekt efter alla förankrade ändringar; flera ersättningar körs baklänges så att tidigare källoffset förblir giltiga

Standardgränserna är 256 MiB dokumentbyte, 10,000 sidor, 100,000 textobjekt, 16,777,216 UTF-16-enheter och 100,000 ersättningar; textskanningsarbetsbudgeten är 67,108,864 nativa teckenbesök och UTF-16-planeringskopienheter

Hårda maxgränser behåller sid-, objekt-, tecken- och ersättningsgränserna, tillåter 512 MiB dokumentbyte och 1,073,741,824 skanningsbesök, och begränsar ett fallback-teckensnittsnamn till 1,024 byte

Rapporten innehåller käll- och utdata-SHA-256-värden, antal tillämpade ersättningar, typsnittsfall tillbaka och skalningar, samt per objekt ursprunglig/slutlig text och gränser i PDF-användarrymdens punkter; sid- och objektindex är nollbaserade källindex

En ersättningsoperation är inte ett säkerhetsarbetsflöde för svartning; använd de dedikerade svartnings-API:erna för att ta bort känsligt innehåll och tillhörande 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);

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;