Προβολέας

Η κύρια κλάση προβολής εγγράφων

Viewer (namespace Doconut) είναι το δημόσιο σημείο εισόδου για το άνοιγμα εγγράφων από σελίδες Razor, ελεγκτές MVC, στοιχεία Blazor ή ελάχιστα APIs. Είναι sealed, καταχωρημένο ως transient υπηρεσία από AddDoconut(), και επιλύεται μέσω ένεσης κατασκευαστή — ποτέ μην το δημιουργείτε απευθείας.

Το Viewer δεν διατηρεί κατάσταση ανά αίτημα και σκόπιμα δεν υλοποιεί IDisposable: οι συνεδρίες εγγράφων ζουν ανεξάρτητα στην κρυφή μνήμη συνεδρίας, έτσι η διαγραφή της υπηρεσίας δεν μπορεί ποτέ να κλείσει ένα ανοικτό έγγραφο (δείτε Βασικές Έννοιες → Πώς Λειτουργεί ο Viewer).

OpenDocumentAsync

Ανοίγει ένα έγγραφο και επιστρέφει το διακριτικό συνεδρίας που χρησιμοποιεί το widget του πελάτη για όλες τις επόμενες αιτήσεις.

ΥπερφόρτωσηΧρήση όταν
Task<string> OpenDocumentAsync(string filePath, DocOptions? options = null, CancellationToken ct = default)Άνοιγμα από δίσκο με αυτόματη ανίχνευση μορφής και την προεπιλεγμένη ρύθμιση της μορφής
Task<string> OpenDocumentAsync(string filePath, BaseConfig? config, DocOptions? options = null, CancellationToken ct = default)Χρειάζεστε επιλογές απόδοσης ανά μορφή (PdfConfig, WordConfig, …)
Task<string> OpenDocumentAsync(Stream stream, FileInfo fileInfo, BaseConfig? config = null, DocOptions? options = null, CancellationToken ct = default)Το έγγραφο δεν είναι αρχείο στον δίσκο (ανέβασμα, βάση δεδομένων, blob). fileInfo πρέπει να περιέχει τη σωστή επέκταση — αυτή καθορίζει την ανίχνευση μορφής
csharp
// Απλό άνοιγμα
string token = await viewer.OpenDocumentAsync(path);

// Με ρυθμίσεις ανά μορφή και επιλογές
token = await viewer.OpenDocumentAsync(
    path,
    new PdfConfig { AllowSearch = true, AllowCopy = true },
    new DocOptions { TimeOut = 30 });

// Από μια μεταφόρτωση
await using var ms = new MemoryStream();
await file.CopyToAsync(ms);
ms.Position = 0;
token = await viewer.OpenDocumentAsync(ms, new FileInfo(file.FileName));

Εξαιρέσεις προς διαχείριση:

  • LicenseException — μια βρεθείσα άδεια απορρίπτεται (το μήνυμα μεταφέρει τον λόγο απόρριψης), ή η μορφή χρειάζεται δυνατότητα plugin που δεν παρέχεται πλέον. Η λήξη του ημερολογίου χωρίς μήνυμα απόρριψης μετατρέπεται σε απόδοση με υδατογράφημα αντί για εξαίρεση.
  • FormatNotSupportedException — Document format '<extension>' is not supported.
  • InvalidDataException — το περιεχόμενο του αρχείου είναι κατεστραμμένο ή δεν ταιριάζει με την επέκτασή του.

CloseDocument

text
void CloseDocument(string token)

Αφαιρεί τη συνεδρία από την κρυφή μνήμη (αποδεσμεύει τη μηχανή εγγράφου άμεσα), διαγράφει το δείκτη ασφαλείας και ανακαλεί την άδεια πρόσβασης. Προαιρετικό — η κυλιόμενη λήξη εκτελεί τον ίδιο καθαρισμό — αλλά συνιστάται για μεγάλα έγγραφα.

GetPageCount

text
int GetPageCount(string token)

Συνολικές σελίδες της ανοικτής συνεδρίας. Εξαίρεση εάν το διακριτικό είναι άγνωστο ή έχει λήξει.

DocOptions

Επιλογές ανά άνοιγμα, ανεξάρτητες από τη μορφή (namespace Doconut):

ΤύποςΙδιότηταΠροεπιλογήΠεριγραφή
stringPassword""Κωδικός πρόσβασης για προστατευμένα έγγραφα (αντιγράφεται αυτόματα στη ρύθμιση μορφής).
intImageResolution0Παρωχημένο. Διατηρείται μόνο για συμβατότητα — ορίστε ImageResolution στη ρύθμιση μορφής αντί αυτού.
stringWatermark""Προσαρμοσμένο κείμενο υδατογραφήματος που σχεδιάζεται στις αποδομένες σελίδες. Μορφή συμβολοσειράς: "^Text~Color~FontSize~FontName~Opacity~Angle", π.χ. "^Sample Copy~Red~24~Verdana~80~-45".
intTimeOut60Κυλιόμενη λήξη συνεδρίας σε λεπτά.
boolIsSecuredtrueΔεν επιβάλλεται επί του παρόντος — δεσμευμένο. Η σύνδεση διακριτικού ελέγχεται παγκοσμίως από DoconutOptions.UnsafeMode (δείτε Βασικές Έννοιες → Συνεδρίες & Ασφάλεια).

Η κλάση εκθέτει επίσης εξειδικευμένες ιδιότητες που είναι σκόπιμα εκτός της κανονικής ροής προβολής ενός μόνο κεντρικού υπολογιστή:

ΤύποςΙδιότηταΠροεπιλογήΠεριγραφή
boolIsWebFarmfalseΣημαδεύει τη λειτουργία ανοίγματος ως σενάριο web-farm. Χρησιμοποιήστε μόνο με την αντίστοιχη αρχιτεκτονική κοινόχρηστης αποθήκευσης/συνεδρίας.
stringWebFarmPath""Κοινόχρηστη διαδρομή που χρησιμοποιείται από τη εξειδικευμένη ροή εργασίας web-farm. Κενή στην κανονική προβολή ενός μόνο κεντρικού υπολογιστή.
boolEditModefalseΔεσμευμένο για τη ροή εργασίας του Editor που διανέμεται ξεχωριστά· αφήστε το false για τον τυπικό viewer.

Προσαρμοσμένο υδατογράφημα

DocOptions.Watermark χρησιμοποιεί έξι πεδία χωρισμένα με tilde. Ένα προαιρετικό αρχικό ^ ζητά τη διάταξη σε όλες τις γωνίες:

text
^Text~Color~FontSize~FontName~Opacity~Angle
csharp
string token = await viewer.OpenDocumentAsync(
    path,
    new PdfConfig(),
    new DocOptions
    {
        Watermark = "^Confidential~Red~24~Verdana~80~-45",
        TimeOut = 30
    });
ΠεδίοΠαράδειγμαΣημασία
Leading ^^Προαιρετική διάταξη σε όλες τις γωνίες. Χωρίς αυτήν, χρησιμοποιείται η κανονική τοποθέτηση του υδατογραφήματος.
TextConfidentialΚείμενο που αποδίδεται σε κάθε σελίδα. Δεν πρέπει να είναι κενό.
ColorRedΟνομαστικό χρώμα που κατανοείται από το επίπεδο σχεδίασης.
FontSize24Μέγεθος γραμματοσειράς· εσφαλμένη αριθμητική είσοδος επιστρέφει στην προεπιλογή του renderer.
FontNameVerdanaΖητούμενη οικογένεια γραμματοσειρών. Βεβαιωθείτε ότι είναι εγκατεστημένη στο περιβάλλον ανάπτυξης.
Opacity80Τιμή byte από 0 έως 255. Πρέπει να αναλυθεί επιτυχώς.
Angle-45Γωνία περιστροφής σε μοίρες· εσφαλμένη αριθμητική είσοδος επιστρέφει στην προεπιλογή.

Ο parser αναμένει ακριβώς έξι πεδία μετά το προαιρετικό ^. Μια μη έγκυρη ορισμός αντικαθίσταται από το ορατό fallback του SDK Invalid Watermark αντί να εξαφανιστεί σιωπηλά.

Απόφαση άδειας

Κατάσταση άδειαςΠαρέχεται προσαρμοσμένη τιμήΑποτέλεσμα απόδοσης
Έγκυρη πληρωμένη άδεια προβολέαΌχιΚαθαρή σελίδα
Έγκυρη πληρωμένη άδεια προβολέαΝαιΠροσαρμοσμένο υδατογράφημα
Ενεργός προσωρινός/δείγματος βασικός προβολέαςΌχιΚαθαρή σελίδα βασικού προβολέα
Ενεργός προσωρινός/δείγματος βασικός προβολέαςΝαιΠροσαρμοσμένο υδατογράφημα όταν εφαρμόζεται η καθαρή διαδρομή του βασικού προβολέα
Άδεια που λείπει, απορρίπτεται, έχει λήξει, είναι λανθασμένη έκδοση ή μη έγκυρος τομέαςΚάθεΥδατογράφημα επιβολής/αξιολόγησης· η προσαρμοσμένη τιμή δεν το παρακάμπτει
Απόδοση πρόσθετου υπό κανόνες αξιολόγησηςΚάθεΥδατογράφημα αξιολόγησης

Η ίδια απόφαση εφαρμόζεται στις εικόνες σελίδων που σερβίρονται και στις εξαγωγές σχολίων. Η έξοδος Animated GIF σφραγίζεται καρέ-καρέ. Έτσι, ένα προσαρμοσμένο υδατογράφημα είναι χαρακτηριστικό εφαρμογής με άδεια, όχι τρόπος αντικατάστασης ή καταστολής του υδατογραφήματος αξιολόγησης.

API Σχολίων

Φόρτωση και εξαγωγή σχολίων στο διακομιστή. Η πλήρης περιήγηση βρίσκεται στα Guides → Annotations· η επιφάνεια είναι:

ΜέλοςΣκοπός
AnnotationManager GetAnnotationManager(string token)Διαχειριστής δεσμευμένος στις διαστάσεις σελίδας της ανοιχτής συνεδρίας
AnnotationManager GetAnnotationManager(string token, int pageWidth, int pageHeight)Διαχειριστής με ρητές διαστάσεις σελίδας
AnnotationManager GetAnnotationManager(int pageWidth, int pageHeight)Διαχειριστής ανεξάρτητος από τη συνεδρία
void LoadAnnotationData(string token, AnnotationManager manager)Φόρτωση σχολίων που δημιουργήθηκαν σε C# στη συνεδρία
void LoadAnnotationData(string token, string annotationData)Φόρτωση σχολίων από την κωδικοποιημένη σελίδα/περιβάλλον Base64 που επιστρέφεται από AnnotationManager.GetAnnotationData()
void LoadAnnotationXML(string token, XmlDocument annotationXml)Φόρτωση σχολίων από XML
XmlDocument GetAnnotationXML(string token)Εξαγωγή των σχολίων της συνεδρίας ως XML
Task<byte[]> ExportAnnotationsToPdfAsync(string token, int zoom = 100, CancellationToken ct = default)PDF με ενσωματωμένα σχόλια
Task<int> ExportAnnotationsToPngAsync(…)Αρχεία PNG με ενσωματωμένα σχόλια
Task<byte[]> ExportAnnotationsToPngZipAsync(string token, int zoom = 100, CancellationToken ct = default)ZIP με PNG ανά σελίδα με ενσωματωμένα σχόλια

Μεταδεδομένα DICOM

text
Task<DicomMetadata?> GetDicomMetadataAsync(string token, CancellationToken ct = default)

Επιστρέφει μεταδεδομένα ετικετών DICOM για συνεδρίες που ανοίχτηκαν μέσω του πρόσθετου DICOM· null για έγγραφα που δεν είναι DICOM.

Βοηθοί πόρων — ReferenceCss / ReferenceScripts

Εκδώστε τις ετικέτες <link>/<script> για τους ενσωματωμένους πόρους που σερβίρονται από UseDoconutResources(), με τη σωστή σειρά εξαρτήσεων. Τα πακέτα για λειτουργίες υπό άδεια, όπως η αναζήτηση και τα σχόλια, εκδίδονται μόνο όταν η άδεια τα ενεργοποιεί, διατηρώντας το UI του πελάτη σύμφωνο με τη συμπεριφορά του διακομιστή.

text
string ReferenceCss(CssConfig? config = null)      // null → Bootstrap + προβολέας + αναζήτηση + σχόλιο
string ReferenceScripts(ScriptConfig? config = null)

CssConfig σημαίες: IncludeBootstrapCss, IncludeViewerCss, IncludeSearchCss (search-gated), IncludeAnnotationCss (annotation-gated).

ScriptConfig σημαίες: IncludeJQuery (required by all others), IncludeBootstrap, IncludeViewerScripts (core: docViewer.js + splitter + links), IncludeSearchScripts and IncludeSearchBar (search-gated), IncludeAnnotationScripts and IncludeAnnotationBar (annotation-gated).

html
@inject Doconut.Viewer Viewer

@Html.Raw(Viewer.ReferenceCss(new CssConfig { IncludeBootstrapCss = true, IncludeViewerCss = true }))
@Html.Raw(Viewer.ReferenceScripts(new ScriptConfig { IncludeJQuery = true, IncludeViewerScripts = true }))

GetWorksheetNames

text
IReadOnlyList<string> GetWorksheetNames(string token)

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

Προστέθηκε στην έκδοση 26.9.0.

Ήταν αυτή η σελίδα χρήσιμη;