Avgränsad styckeredigering

HPDFParagraphReflow markerar laddade glyfcentrum inom en explicit källrektangel och skriver ett nymätt stycke inom en explicit målrektangel på samma sida

Acceptansprofilen täcker Delphi Win32/Win64 och Windows FPC/Lazarus; uppmätt teckensnittsgenerering använder dokumentets befintliga appearance-byggare och dess stöd för installerade teckensnitt

Urval, layout och bevarande

Koordinater är oroterade punkter i PDF-sidans användarrymd, med uppåtgående y-axel; båda rektanglarna måste vara ändliga, ha positiva dimensioner på högst 14400 punkter och passa sidans MediaBox

Urvalet kan spänna över flera ursprungliga baslinjer och flera sidinnehållsströmmar; literala, hexadecimala, TJ-, enkla citattecken- och dubbla citattecken-textoperander skrivs om vid valda teckenkodgränser

Kvarhållna prefix, suffix, textbredder och ursprungliga numeriska kerningjusteringar stannar på plats; källtexten tas bort från verkliga operander i stället för att döljas av en bakgrundsrektangel

Nästlade Form XObjects använder sin Matrix och BBox; varje vald invokation och dess förfaderresurser kopieras privat, medan andra invokationer och andra sidor som delar original-Forms bevaras

Glyfcentrum utanför en Form-BBox utesluts; partiella källglyfgränser ger avvisning som standard, och RejectPartialSourceGlyphs = False tillåter uttryckligen borttagning av en hel teckenkod när dess centrum är valt

Appearance väljer installerat teckensnitt, stil, storlek, färg, utfyllnad, justering och policy för överfullt innehåll; målbredden styr radbrytningen, och shrink-to-fit redovisar den verkliga EffectiveFontSize

Genererad glyfgeometri tolkas och kontrolleras oberoende mot målrektangeln; rotation är låst till noll och opacitet till ett för denna avgränsade hjälpfunktion

En tom ersättning raderar den valda källtexten; sätt RequireSourceText = False för att infoga ett stycke i en tom källregion

Kollisionsbelägg

Ovald text som inte är blanksteg, XObject- och inline-bilder, ritade path-gränser och annoteringsrektanglar jämförs med de genererade ersättningsglyfernas gränser

Varje kollision anger sin sort, gränser i sidrummet, valfri omgivande text och ett ersättningsglyfindex; det totala antalet behålls även när den returnerade kollisionslistan når sitt tak

Path-kontrollpunkter, transformerade Form-klippgränser, streckbredd och miter-gränser ger konservativa lådor; shading med okänt målutsträck upptar konservativt hela målrektangeln

Detta geometritest kan överrapportera transparenta bilder, omålade annoteringsytor, kurvor, klippta paths och roterade Form-omslag; det bevisar inte pixelperfekt bläckseparation och granskar inte godtyckliga klipp-paths, blend-komponering eller teckensnittskonturer

RejectCollisions = True avvisar överlappande ersättningar utan mutering; sätts den till false behålls rapporten samtidigt som anroparens medvetna överlappspolicy tillåts

Förhandsvisning, verkställande och återställning

HPDFPreviewParagraphReflow returnerar en förseglad plan som anroparen äger, semantisk ersättningslayout, fingeravtryck och kollisionsbelägg, och rullar sedan tillbaka genererade dokumentobjekt

HPDFCommitParagraphReflow upprepar den avgränsade analysen och tillämpar planen atomärt endast när källinnehåll, Form-gränser, annoteringsgeometri och ersättningsteckensnittsgeometri fortfarande matchar förhandsvisningen

En plan tillhör samma levande dokumentinstans; frigör den när du är klar, håll dokumentet vid liv hela vägen och generera förhandsvisningen på nytt efter att ha laddat ett annat dokument eller ändrat valt innehåll

THPDFParagraphReflowSession lägger till ett tillämpat granskningstillstånd: Apply exponerar det redigerade dokumentet för extraktion eller rendering, Commit publicerar det, och Rollback eller destruktion återställer originalgrafen

Använd sessioner seriellt; dokumentet måste överleva sessionen, och andra graftransaktioner eller redigeringsanrop får inte blanda sig in medan Pending är true

Rollback återställer dokumentstatusen i minnet; redan sparade externa filer förblir anroparens ansvar

Ändligt arbete och felförlopp

Standardgränserna är 64 MiB avkodat innehåll, 64 MiB genererade strömmar, 100000000 arbetsenheter, 100000 glyfer, 250000 tokens, 12 Form-nivåer, 256 Form-invokationer, 256 returnerade kollisioner och 100000 klonade resursnoder

Kodade strängbyte kontrolleras mot den återstående glyfgränsen före glyftolkningen, så flerbyte-teckenkodningar kan konservativt förbruka mer budget än sitt antal synliga glyfer

Avkodade och genererade gränser täcker innehåll som hjälpfunktionen hanterar; genererad strömstorlek kontrolleras före publiceringen, och representerar ingen gräns för processens toppminne eller tak för alla allokeringar i byggaren för installerade teckensnitt

Avbrott är kooperativa genom innehållstokenisering och hjälpfunktionens loopar, med kontroller runt befintliga teckensnittsgenereringsanrop; behåll token tills anropet är klart

Saknad källa, ogiltig indata, kollisioner, inaktuella planer, innehåll som inte stöds, uttömda budgeter, avbrott och vanliga fel returnerar false med en explicit status och bevarar originalobjektgrafen

Vald vertikal eller enkel text, cykliska eller olösta Forms, XObject-typer som inte stöds för målning och dokument med signaturfält avvisas; inkrementell redigering med bevarade signaturer kräver ett separat arbetsflöde

Exempel

Options := HPDFDefaultParagraphReflowOptions;
Options.Appearance.FontName := 'Arial';
Options.Appearance.FontSize := 11;
Source.Left := 55; Source.Bottom := 659;
Source.Right := 350; Source.Top := 714;
Target := Source;
Plan := nil;
try
  if HPDFPreviewParagraphReflow(Document, 0, Source, Target,
    'The Supplier must deliver signed monthly reports.', Options,
    Plan, Report, CancellationToken) then
    if HPDFCommitParagraphReflow(Document, Plan, Report, CancellationToken) then
      Document.SaveLoadedDocument('reviewed-contract.pdf');
finally
  Plan.Free;
end;

Acceptans och sparad utdata

De dedikerade Delphi- och FPC-runnerarna använder verkliga laddade PDF-fixtures för flerbaslinjestycken, partiella operander, nästlade delade Forms, klippt Form-text, bredd- och teckensnittsändringar, kollisionssorter, avbrott och grafåterställning

Upprepade fil/fil- och ström/fil-sparningar bevarar den redigerade grafen; färska oförändrade laddade dokument behåller sina exakta källbyte, och ett injicerat skrivfel vid utdata kan följas av ett lyckat nytt försök

Tests/Fixtures/ParagraphReflow/loaded-repeat-save.pdf isolerar spara-regressionen utan att använda styckehjälpfunktionen: ladda, infoga en markör, spara två gånger och läs den andra filen oberoende

Kör Tests/Delphi/Run-ParagraphReflowTests.ps1 -Platform Win64 eller Tests/FPC/Run-ParagraphReflowTests.ps1 -Platform Win64, och välj Win32 för den andra arkitekturen

Den valfria Python-verifieraren Tests/Fixtures/ParagraphReflow/verify_output.py använder PyMuPDF för att extrahera verklig sparad Unicode-text och rendera redigerade sidor; varje runner undertrycker automatisk visarstart

Relaterade ämnen

Avgränsad styckeredigering · Alternativ · Rapport