Κλάσεις Χρηστικών και Βοηθητικών

Κλάσεις Χρηστικών και Βοηθητικών

Κλάσεις βοηθητικών λειτουργιών

Αυτός ο οδηγός δείχνει πώς να χρησιμοποιήσετε τις μικρές, εξειδικευμένες κλάσεις βοηθών που Aspose.PDF FOSS για .NET παρέχει για κοινές χαμηλού επιπέδου εργασίες: ακέραια μαθηματικά που χρησιμοποιούνται από τις ασφάλειας πρωτογενείς, διαμόρφωση αναζήτησης regex, αξιολόγηση συναρτήσεων PostScript, εξωτερική ανακάλυψη γραμματοσειρών, εξαγωγή υπο-διαδρομών διανύσματος, φυσική μέτρηση κειμένου, επεξεργασίες ροής περιεχομένου με buffer, μεγάλα ρεύματα στη μνήμη, και αναφορά έκδοσης βιβλιοθήκης. Αυτές οι κλάσεις δεν αποτελούν αυτόνομα σημεία εισόδου, αλλά υποστηρίζουν λειτουργίες υψηλότερου επιπέδου εγγράφων, κειμένου και απόδοσης σε όλο το API.


Βοηθητικά για ακέραια μαθηματικά

MathExtensions είναι ένας μικρός στατικός βοηθός που χρησιμοποιείται εσωτερικά από τις ασφάλειας πρωτογενείς της βιβλιοθήκης, αλλά είναι διαθέσιμος για γενική χρήση όποτε χρειάζεστε μια λειτουργία modulo που πάντα επιστρέφει μη-αρνητικό αποτέλεσμα.

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

Διαμόρφωση αναζήτησης regex

RegexManager είναι μια στατική κλάση που διαμορφώνει τη μηχανή κανονικών εκφράσεων που χρησιμοποιείται από τις λειτουργίες αναζήτησης κειμένου όπως TextFragmentAbsorber. Ορίστε το MatchTimeout για να περιορίσετε το χρόνο εκτέλεσης ενός μοτίβου, και ενεργοποιήστε το NonBacktracking για να χρησιμοποιήσετε τη μη-backtracking μηχανή regex για αναζητήσεις ευαίσθητες στην απόδοση.

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

Αξιολόγηση συναρτήσεων PostScript

PostScriptEvaluator είναι μια στατική κλάση που αξιολογεί συναρτήσεις τύπου4PDF (PDF32000 §7.10.5) — PostScript προγράμματα υπολογιστή ενσωματωμένα σε PDF, όπως αυτά που χρησιμοποιούνται σε ορισμένους ορισμούς χρωματικού χώρου και σκίασης.

double[] inputs = { 0.5 };

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

Εξωτερικές διαδρομές αναζήτησης γραμματοσειρών

ExternalFontCache διαχειρίζεται τους φακέλους που αναζητούνται για εξωτερικά (μη ενσωματωμένα) TrueType/OpenType πρόσωπα κατά την απόδοση και τη μετατροπή. Χρησιμοποιήστε το Instance για να φτάσετε στο singleton, το GetDefaultFontsFolders για να επιθεωρήσετε τις ενσωματωμένες τοποθεσίες αναζήτησης, και το SetFontsFolders για να τα προσθέσετε ή να τα αντικαταστήσετε.

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

Εξαγωγή διανυσματικών υποδιαδρομών

GraphicsAbsorber επισκέπτεται μια σελίδα και εξάγει τις ζωγραφισμένες διανυσματικές υποδιαδρομές της ως στοιχεία SubPath, καθεμία με το δικό της περιθώριο Rectangle σε χώρο σελίδας. Αυτό είναι χρήσιμο για την επιθεώρηση ή τη μέτρηση διανυσματικής τέχνης χωρίς να χρειάζεται να αναλύσετε το ρεύμα περιεχομένου με το χέρι.

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}]");
    }
}

Φυσική μέτρηση τμήματος κειμένου

PhysicalTextSegment είναι η προβολή σε χώρο σελίδας ενός απορροφημένου TextSegment. Προσεγγίστε το μέσω TextSegment.PhysicalSegment για να μετρήσετε μια σειρά χαρακτήρων ή να διαβάσετε το επιλυμένο 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;
    }
}

Προφόρτωση επεξεργασιών ροής περιεχομένου

ContentsAppender, προσπελαζόμενο μέσω Page.ContentsAppender, προσωρινά αποθηκεύει τους χειριστές για να προσθέσει ή να προσαρτήσει στο ρεύμα περιεχομένου μιας σελίδας και τα υποβάλλει σε μία ενέργεια με 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();

Μεγάλα ρεύματα μνήμης

OptimizedMemoryStream είναι ένα επεκτάσιμο ρεύμα μνήμης που μπορεί να ξεπεράσει το όριο των 2GB ενός ενιαίου πίνακα του MemoryStream αποθηκεύοντας δεδομένα σε τμήματα σταθερού μεγέθους. Προέρχεται από το Stream, επομένως υποστηρίζει τις συνήθεις λειτουργίες ανάγνωσης, εγγραφής και μετακίνησης.

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

Πληροφορίες έκδοσης βιβλιοθήκης

BuildVersionInfo είναι μια στατική κλάση που εκθέτει το όνομα προϊόντος και τους αριθμούς έκδοσης της βιβλιοθήκης σε χρόνο εκτέλεσης — χρήσιμο για διαγνωστικούς σκοπούς και αιτήματα υποστήριξης.

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

Συμβουλές και βέλτιστες πρακτικές

  • Ορίστε το RegexManager.MatchTimeout πριν εκτελέσετε αναζητήσεις πάνω σε μη αξιόπιστα ή παρεχόμενα από χρήστη μοτίβα ώστε να αποφύγετε καταστροφικό backtracking.
  • Καλέστε το ExternalFontCache.SetFontsFolders με reset: true όταν θέλετε να αντικαταστήσετε πλήρως τις προεπιλεγμένες διαδρομές αναζήτησης αντί να τις προσθέσετε.
  • Προτιμήστε το OptimizedMemoryStream αντί του MemoryStream όταν κάνετε buffer πολύ μεγάλα έγγραφα ή δεδομένα εικόνας που ενδέχεται να υπερβαίνουν τα 2GB.
  • Πάντα ολοκληρώνετε μια παρτίδα επεξεργασιών ContentsAppender με το UpdateData() — οι τελεστές σε buffer δεν δεσμεύονται στο ρεύμα περιεχομένου μέχρι τότε.
  • Το GraphicsAbsorber.Elements μπορεί να περιέχει GraphicElement εκτός του SubPath; ελέγξτε τον τύπο πριν το κάνετε casting.

Συνηθισμένα Προβλήματα

ΠρόβλημαΑιτίαΔιόρθωση
Η αναζήτηση regex κρεμάει σε σύνθετα μοτίβαΔεν έχει ρυθμιστεί χρονικό όριο στο RegexManagerΟρίστε RegexManager.MatchTimeout πριν εκτελέσετε TextFragmentAbsorber αναζητήσεις
Οι επεμβάσεις ροής περιεχομένου από το ContentsAppender δεν εμφανίζονται στο αποθηκευμένο αρχείοΤο UpdateData() δεν κλήθηκε ποτέΚαλέστε το UpdateData() μετά την τελευταία κλήση του AppendToBegin/AppendToEnd call
Οι προσαρμοσμένες γραμματοσειρές δεν εντοπίζονται κατά την απόδοσηΟ φάκελος γραμματοσειρών δεν καταγράφηκε, ή το reset: true διέγραψε τις αναμενόμενες προεπιλογέςΚαλείστε το ExternalFontCache.SetFontsFolders με τη σωστή λίστα φακέλων και την τιμή reset
OutOfMemoryException όταν γίνεται προσωρινή αποθήκευση εξόδου πολύ μεγάληςΤο MemoryStream έφτασε το όριο των 2GB για ενιαίο πίνακαΧρησιμοποιήστε το OptimizedMemoryStream, το οποίο αποθηκεύει τα δεδομένα σε τμήματα σταθερού μεγέθους

FAQ

Γιατί το MathExtensions.Mod διαφέρει από τον τελεστή % του C# ;

Το MathExtensions.Mod επιστρέφει πάντα ένα μη αρνητικό υπόλοιπο, ενώ ο ενσωματωμένος τελεστής % μπορεί να επιστρέψει μια αρνητική τιμή όταν το διαίρετο είναι αρνητικό.

Πώς μπορώ να εμποδίσω μια αναζήτηση κειμένου με βάση regex να τρέχει πολύ ώρα;

Ορίστε το RegexManager.MatchTimeout σε ένα TimeSpan πριν δημιουργήσετε ή εκτελέσετε ένα TextFragmentAbsorber που χρησιμοποιεί ένα πρότυπο regex.

Αντικαθιστά το SetFontsFolders ή προσθέτει στα υπάρχοντα μονοπάτια αναζήτησης;

Εξαρτάται από το όρισμα reset: περάστε το true για να αντικαταστήσετε τη λίστα των τρεχόντων φακέλων, ή το false για να προσαρτήσετε τους νέους φακέλους σε αυτήν.

Τι εξάγει στην πραγματικότητα το GraphicsAbsorber;

Εξάγει τα βαμμένα υπο-μονοπάτια διανυσματικών στοιχείων μιας σελίδας ως στοιχεία SubPath, το καθένα με ένα περιβάλλον Rectangle στο χώρο της σελίδας, μέσω του GraphicsAbsorber.Visit.

Πότε θα πρέπει να χρησιμοποιήσω το OptimizedMemoryStream αντί για το MemoryStream;

Όταν τα δεδομένα στην ενδιάμεση μνήμη ενδέχεται να προσεγγίσουν ή να υπερβούν τα 2GB, καθώς το MemoryStream υποστηρίζεται από έναν ενιαίο πίνακα με αυτό το σκληρό όριο.


API Reference Σύνοψη

Κλάση / ΜέθοδοςΠεριγραφή
MathExtensions.ModΒοηθητικό modulo μη-αρνητικού ακέραιου που χρησιμοποιείται από τα πρωτογενή στοιχεία ασφαλείας
RegexManager.MatchTimeoutΧρονικό όριο που εφαρμόζεται σε αναζητήσεις κειμένου βάσει regex
RegexManager.NonBacktrackingΕνεργοποιεί τη μη-επαναληπτική μηχανή regex
PostScriptEvaluator.EvaluateΑξιολογεί μια συνάρτηση υπολογιστή τύπου 4 PDF PostScript
ExternalFontCache.InstanceΠρόσβαση singleton στην εξωτερική κρυφή μνήμη γραμματοσειρών
ExternalFontCache.GetDefaultFontsFoldersΕπιστρέφει τους προεπιλεγμένους εξωτερικούς φακέλους αναζήτησης γραμματοσειρών
ExternalFontCache.SetFontsFoldersΠροσθέτει ή αντικαθιστά εξωτερικούς φακέλους αναζήτησης γραμματοσειρών
GraphicsAbsorber.VisitΕξάγει στοιχεία διανυσματικών γραφικών από μια σελίδα
GraphicsAbsorber.ElementsΣυλλογή εξαγόμενων GraphicElement/SubPath στοιχείων
SubPath.RectangleΠλαίσιο περιορισμού σε χώρο σελίδας ενός εξαγόμενου υπο-μονοπατιού
PhysicalTextSegment.MeasureSegmentΜετρά ένα εύρος χαρακτήρων ενός φυσικού τμήματος κειμένου
PhysicalTextSegment.TextStateΕπιλυμένη κατάσταση μορφοποίησης ενός φυσικού τμήματος κειμένου
ContentsAppender.AppendToBeginΑποθηκεύει σε buffer έναν τελεστή για προσθήκη στην αρχή του ροής περιεχομένου της σελίδας
ContentsAppender.AppendToEndΑποθηκεύει σε buffer έναν operator για προσθήκη στη ροή περιεχομένου της σελίδας
ContentsAppender.UpdateDataΕφαρμόζει τους buffered operators στη ροή περιεχομένου
OptimizedMemoryStreamΜε δυνατότητα επέκτασης μνήμης ροής πέρα από το όριο των 2 GB MemoryStream
BuildVersionInfo.ProductΌνομα προϊόντος της εκτελούμενης βιβλιοθήκης
BuildVersionInfo.AssemblyVersionΈκδοση assembly της τρέχουσας βιβλιοθήκης
BuildVersionInfo.FileVersionΈκδοση αρχείου της εκτελούμενης βιβλιοθήκης

Δείτε επίσης

 Ελληνικά