Verktygs- och hjälparklasser

Verktygs- och hjälparklasser

Verktygs- och hjälparklasser

Denna guide visar hur man använder de små, fokuserade hjälparklasserna som Aspose.PDF FOSS för .NET levererar för vanliga låg-nivå-uppgifter: heltalsmatematik som används av säkerhetsprimitiver, regex-sökkonfiguration, PostScript funktionsutvärdering, extern teckensnittsupptäckt, vektorundervägsextraktion, fysisk textmätning, buffrade innehållsströmsredigeringar, stora minnesströmmar och rapportering av biblioteksversion. Dessa klasser är inte självständiga ingångspunkter, men de stödjer högre nivåers dokument-, text- och renderingsoperationer i hela API.


Hjälparklasser för heltalsmatematik

MathExtensions är en liten statisk hjälparfunktion som används internt av bibliotekets säkerhetsprimitiver, men den är tillgänglig för allmänt bruk när du behöver en modulooperation som alltid returnerar ett icke-negativt resultat.

// Unlike the C# % operator, Mod never returns a negative value.
int wrapped = MathExtensions.Mod(-3, 5); // 2

Regex-sökkonfiguration

RegexManager är en statisk klass som konfigurerar regex-motorn som används av textsökoperationer såsom TextFragmentAbsorber. Ställ in MatchTimeout för att begränsa hur länge ett mönster får köras, och aktivera NonBacktracking för att använda den icke-backtracking regex-motorn för prestandakänsliga sökningar.

using var doc = Document.Open(pdfBytes);

// Guard against runaway regex patterns.
RegexManager.MatchTimeout = TimeSpan.FromSeconds(5);
RegexManager.NonBacktracking = true;

var absorber = new TextFragmentAbsorber(@"\d{3}-\d{4}", true);
doc.Pages[1].Accept(absorber);

Utvärdera PostScript funktioner

PostScriptEvaluator är en statisk klass som utvärderar Type 4 PDF-funktioner (PDF32000 §7.10.5) — PostScript kalkylatorprogram inbäddade i en PDF, såsom de som används i vissa färgrymds- och skuggdefinitioner.

double[] inputs = { 0.5 };

// Evaluate a PostScript calculator program against the input array.
var outputs = PostScriptEvaluator.Evaluate("{ 2 mul }", inputs);

Externa teckensnittssökvägar

ExternalFontCache hanterar de mappar som söks efter externa (icke-inbäddade) TrueType/OpenType-ansikten under rendering och konvertering. Använd Instance för att nå singletonen, GetDefaultFontsFolders för att inspektera de inbyggda sökplatserna, och SetFontsFolders för att lägga till eller ersätta dem.

var cache = ExternalFontCache.Instance;
var defaultFolders = cache.GetDefaultFontsFolders();

// reset: false appends to the existing search paths instead of replacing them.
cache.SetFontsFolders(new[] { @"C:\Fonts\Custom" }, reset: false);

Extrahering av vektorsubvägar

GraphicsAbsorber besöker en sida och extraherar dess målade vektorsubvägar som SubPath-element, var och en med sin egen sidrymds avgränsande Rectangle. Detta är användbart för att inspektera eller mäta vektorillustrationer utan att manuellt parsra innehållsströmmen.

using var doc = Document.Open(pdfBytes);

var absorber = new GraphicsAbsorber();
absorber.Visit(doc.Pages[1]);

Console.WriteLine($"Elements found: {absorber.Elements.Count}");

foreach (var element in absorber.Elements)
{
    if (element is SubPath subPath)
    {
        Rectangle bounds = subPath.Rectangle;
        Console.WriteLine($"Sub-path bounds: [{bounds.LLX}, {bounds.LLY}, {bounds.URX}, {bounds.URY}]");
    }
}

Mätning av fysiska textsegment

PhysicalTextSegment är sidrymdens projektion av en absorberad TextSegment. Nå den via TextSegment.PhysicalSegment för att mäta en sekvens av tecken eller läsa dess lösta TextState.

using var doc = Document.Open(pdfBytes);

var absorber = new TextFragmentAbsorber();
doc.Pages[1].Accept(absorber);

foreach (TextFragment fragment in absorber.TextFragments)
{
    foreach (TextSegment segment in fragment.Segments)
    {
        PhysicalTextSegment physical = segment.PhysicalSegment;
        var width = physical.MeasureSegment(segment.StartCharIndex, segment.EndCharIndex, true);
        TextState state = physical.TextState;
    }
}

Buffring av redigeringar av innehållsström

ContentsAppender, nås via Page.ContentsAppender, buffrar operatörer för att föra in eller lägga till i en sidas innehållsström och committerar dem i ett pass med UpdateData.

using var doc = Document.Open(pdfBytes);

Page page = doc.Pages[1];
page.ContentsAppender.AppendToBegin(new GSave());
page.ContentsAppender.AppendToEnd(new GRestore());
page.ContentsAppender.UpdateData();

Stora minnesströmmar

OptimizedMemoryStream är en expanderbar minnesström som kan överskrida 2 GB-gränsen för en enda array i MemoryStream genom att lagra data i fasta segment. Den härstammar från Stream, så den stödjer de vanliga läs-, skriv- och sökoperationerna.

using var stream = new OptimizedMemoryStream();

byte[] buffer = System.Text.Encoding.UTF8.GetBytes("large payload");
stream.Write(buffer, 0, buffer.Length);

bool canSeek = stream.CanSeek;
byte[] allBytes = stream.ToArray();

Biblioteksversionsinformation

BuildVersionInfo är en statisk klass som exponerar bibliotekets produktnamn och versionsnummer vid körning — användbart för diagnostik och supportförfrågningar.

Console.WriteLine(BuildVersionInfo.Product);
Console.WriteLine(BuildVersionInfo.AssemblyVersion);
Console.WriteLine(BuildVersionInfo.FileVersion);

Tips och bästa praxis

  • Ställ in RegexManager.MatchTimeout innan du kör sökningar över opålitliga eller användargenererade mönster för att undvika catastrophic backtracking.
  • Anropa ExternalFontCache.SetFontsFolders med reset: true när du vill helt ersätta standard-sökvägarna i stället för att lägga till dem.
  • Föredra OptimizedMemoryStream framför MemoryStream när du buffrar mycket stora dokument eller bilddata som kan överstiga 2 GB.
  • Avsluta alltid ett parti ContentsAppender-redigeringar med UpdateData() — buffrade operatorer kommittas inte till innehållsströmmen förrän dess.
  • GraphicsAbsorber.Elements kan innehålla GraphicElement-instanser förutom SubPath; kontrollera typen innan du castar.

Vanliga problem

ProblemOrsakLösning
Regex-sökning hänger på komplexa mönsterIngen timeout konfigurerad på RegexManagerStäll in RegexManager.MatchTimeout innan du kör TextFragmentAbsorber sökningar
Ändringar av content-stream från ContentsAppender visas inte i den sparade filenUpdateData() anropades aldrigAnropa UpdateData() efter det sista AppendToBegin/AppendToEnd-anropet
Användade typsnitt plockas inte upp under renderingTypsnittsmappen registrerades inte, eller reset: true rensade förväntade standardvärdenAnropa ExternalFontCache.SetFontsFolders med rätt mapplista och reset-värde
OutOfMemoryException vid buffring av mycket stor utdataMemoryStream nådde sin 2 GB enkellista-gränsAnvänd OptimizedMemoryStream, som lagrar data i fasta storleksblock

FAQ

Varför skiljer sig MathExtensions.Mod från C# %-operatorn?

MathExtensions.Mod returnerar alltid en icke-negativ rest, medan den inbyggda %-operatorn kan returnera ett negativt värde när dividend är negativ.

Hur stoppar jag en regex-baserad textsökning från att köra för länge?

Ställ in RegexManager.MatchTimeout till en TimeSpan innan du konstruerar eller kör en TextFragmentAbsorber som använder ett regex-mönster.

Ersätter SetFontsFolders eller lägger till de befintliga sökvägarna?

Det beror på argumentet reset: skicka true för att ersätta den aktuella mapp-listan, eller false för att lägga till de nya mapparna i den.

Vad extraherar GraphicsAbsorber egentligen?

Den extraherar de målade vektor-undervägarna på en sida som SubPath-element, var och en med en sidrymds avgränsande Rectangle, via GraphicsAbsorber.Visit.

När bör jag använda OptimizedMemoryStream istället för MemoryStream?

När den buffrade datan kan närma sig eller överstiga 2 GB, eftersom MemoryStream stöds av en enda array med den hårda gränsen.


API Reference Sammanfattning

Klass / MetodBeskrivning
MathExtensions.ModIcke-negativ heltals-modulohjälp som används av säkerhetsprimitiver
RegexManager.MatchTimeoutTimeout som tillämpas på regex-baserade textsökningar
RegexManager.NonBacktrackingAktiverar den icke-backtracking-regex-motorn
PostScriptEvaluator.EvaluateUtvärderar en typ 4 PDF PostScript kalkylatorfunktion
ExternalFontCache.InstanceSingleton-åtkomst till den externa teckensnittscachen
ExternalFontCache.GetDefaultFontsFoldersReturnerar standardmapparna för extern teckensnittssökning
ExternalFontCache.SetFontsFoldersLägger till eller ersätter externa teckensnittssökmappar
GraphicsAbsorber.VisitExtraherar vektorgrafikelement från en sida
GraphicsAbsorber.ElementsSamling av extraherade GraphicElement/SubPath-objekt
SubPath.RectangleSidrymdens avgränsningsrektangel för en extraherad delväg
PhysicalTextSegment.MeasureSegmentMäter ett teckenintervall för ett fysiskt textsegment
PhysicalTextSegment.TextStateUpplöst formateringsstatus för ett fysiskt textsegment
ContentsAppender.AppendToBeginBuffrar en operator för att prefixa sidans innehållsström
ContentsAppender.AppendToEndBuffrar en operator för att lägga till i sidans innehållsström
ContentsAppender.UpdateDataSkriver de buffrade operatorerna till innehållsströmmen
OptimizedMemoryStreamExpanderbar minnesström bortom 2 GB MemoryStream-gränsen
BuildVersionInfo.ProductProduktnamn för det körande biblioteket
BuildVersionInfo.AssemblyVersionAssemblerversion av det körande biblioteket
BuildVersionInfo.FileVersionFilversion av det körande biblioteket

Se även

 Svenska