Προβολέας
Η κύρια κλάση προβολής εγγράφων
Viewer (namespace Doconut) είναι το δημόσιο σημείο εισόδου για το άνοιγμα εγγράφων από σελίδες Razor, ελεγκτές MVC, συστατικά Blazor ή ελάχιστα APIs. Είναι sealed, καταχωρημένο ως transient υπηρεσία από AddDoconut(), και επιλύεται μέσω ένεσης κατασκευαστή — ποτέ μην το δημιουργείτε άμεσα.
Viewer δεν διατηρεί κατάσταση ανά αίτημα και σκόπιμα δεν υλοποιεί IDisposable: οι συνεδρίες εγγράφων ζουν ανεξάρτητα στην κρυφή μνήμη συνεδρίας, έτσι η διαγραφή της υπηρεσίας δεν μπορεί ποτέ να κλείσει ένα ανοιχτό έγγραφο (δείτε Βασικές Έννοιες → Πώς Λειτουργεί ο Προβολέας).
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 πρέπει να περιέχει τη σωστή επέκταση — αυτή καθορίζει την ανίχνευση μορφής |
// Απλό άνοιγμα
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));Exceptions to handle:
LicenseException— μια βρεθείσα άδεια απορρίπτεται (το μήνυμα περιέχει τον λόγο απόρριψης), ή η μορφή απαιτεί δυνατότητα plugin που δεν παρέχεται πλέον. Η λήξη του ημερολογίου χωρίς μήνυμα απόρριψης καταλήγει σε απόδοση με υδατογράφημα αντί για εξαίρεση.FormatNotSupportedException—Document format '<extension>' is not supported.InvalidDataException— το περιεχόμενο του αρχείου είναι κατεστραμμένο ή δεν ταιριάζει με την επέκτασή του.
CloseDocument
void CloseDocument(string token)Αφαιρεί τη συνεδρία από την κρυφή μνήμη (αποδεσμεύει τη μηχανή εγγράφου αμέσως), διαγράφει το δείκτη ασφαλείας και ανακαλεί την άδεια πρόσβασης. Προαιρετικό — η κυλιόμενη λήξη εκτελεί την ίδια εκκαθάριση — αλλά συνιστάται για μεγάλα έγγραφα.
GetPageCount
int GetPageCount(string token)Συνολικές σελίδες της ανοιχτής συνεδρίας. Εξαίρεση εάν το διακριτικό είναι άγνωστο ή ληγμένο.
DocOptions
Επιλογές ανά άνοιγμα, ανεξάρτητες από τη μορφή (namespace Doconut):
| Τύπος | Ιδιότητα | Προεπιλογή | Περιγραφή |
|---|---|---|---|
string | Password | "" | Κωδικός πρόσβασης για προστατευμένα έγγραφα (αντιγράφεται αυτόματα στη ρύθμιση μορφής). |
int | ImageResolution | 0 | Παρωχημένο. Διατηρείται μόνο για συμβατότητα — ορίστε ImageResolution στη ρύθμιση μορφής αντί αυτού. |
string | Watermark | "" | Προσαρμοσμένο κείμενο υδατογραφήματος που σχεδιάζεται στις αποδομένες σελίδες. Μορφή συμβολοσειράς: "^Text~Color~FontSize~FontName~Opacity~Angle", π.χ. "^Sample Copy~Red~24~Verdana~80~-45". |
int | TimeOut | 60 | Κυλιόμενη λήξη συνεδρίας σε λεπτά. |
bool | IsSecured | true | Δεν επιβάλλεται επί του παρόντος — δεσμευμένο. Η σύνδεση διακριτικού ελέγχεται παγκοσμίως από DoconutOptions.UnsafeMode (δείτε Βασικές Έννοιες → Συνεδρίες & Ασφάλεια). |
Η κλάση εκθέτει επίσης εξειδικευμένες ιδιότητες που είναι σκόπιμα εκτός της κανονικής ροής προβολής ενός μόνο κεντρικού υπολογιστή:
| Τύπος | Ιδιότητα | Προεπιλογή | Περιγραφή |
|---|---|---|---|
bool | IsWebFarm | false | Σημαίνει ότι η λειτουργία ανοίγματος είναι σενάριο web‑farm. Χρησιμοποιείται μόνο με την αντίστοιχη αρχιτεκτονική κοινόχρηστης αποθήκευσης/συνεδρίας. |
string | WebFarmPath | "" | Κοινόχρηστος δρόμος που χρησιμοποιείται από τη εξειδικευμένη ροή web‑farm. Κενό στην κανονική προβολή ενός μόνο κεντρικού υπολογιστή. |
bool | EditMode | false | Δεσμευμένο για τη χωριστά διανεμημένη ροή του Editor· αφήστε το false για τον τυπικό προβολέα. |
Προσαρμοσμένο υδατογράφημα
DocOptions.Watermark χρησιμοποιεί έξι πεδία χωρισμένα με tilde. Ένα προαιρετικό αρχικό ^ ζητά τη διάταξη σε όλες τις γωνίες:
^Text~Color~FontSize~FontName~Opacity~Anglestring token = await viewer.OpenDocumentAsync(
path,
new PdfConfig(),
new DocOptions
{
Watermark = "^Confidential~Red~24~Verdana~80~-45",
TimeOut = 30
});| Πεδίο | Παράδειγμα | Νόημα |
|---|---|---|
Αρχικό ^ | ^ | Προαιρετική διάταξη σε όλες τις γωνίες. Χωρίς αυτό, χρησιμοποιείται η κανονική τοποθέτηση υδατογραφήματος. |
| Κείμενο | Confidential | Κείμενο που αποδίδεται σε κάθε σελίδα. Δεν πρέπει να είναι κενό. |
| Χρώμα | Red | Ονομαστικό χρώμα που κατανοείται από τη στρώση σχεδίασης. |
| Μέγεθος γραμματοσειράς | 24 | Μέγεθος γραμματοσειράς· εσφαλμένη αριθμητική είσοδος επαναφέρεται στην προεπιλογή του renderer. |
| Όνομα γραμματοσειράς | Verdana | Ζητούμενη οικογένεια γραμματοσειράς. Βεβαιωθείτε ότι είναι εγκατεστημένη στο περιβάλλον ανάπτυξης. |
| Διαφάνεια | 80 | Τιμή byte από 0 έως 255. Πρέπει να αναλυθεί επιτυχώς. |
| Γωνία | -45 | Γωνία περιστροφής σε μοίρες· εσφαλμένη αριθμητική είσοδος επαναφέρεται στην προεπιλογή. |
Ο parser αναμένει ακριβώς έξι πεδία μετά το προαιρετικό ^. Μια μη έγκυρη ορισμός αντικαθίσταται από το ορατό fallback του SDK Invalid Watermark αντί να εξαφανίζεται σιωπηρά.
Απόφαση άδειας
| Κατάσταση άδειας | Παρεχόμενη προσαρμοσμένη τιμή | Αποτέλεσμα απόδοσης |
|---|---|---|
| Έγκυρη πληρωμένη άδεια προβολέα | Όχι | Καθαρή σελίδα |
| Έγκυρη πληρωμένη άδεια προβολέα | Ναι | Προσαρμοσμένο υδατογράφημα |
| Ενεργός προσωρινός/δείγματος βασικός προβολέας | Όχι | Καθαρή σελίδα βασικού προβολέα |
| Ενεργός προσωρινός/δείγματος βασικός προβολέας | Ναι | Προσαρμοσμένο υδατογράφημα όταν εφαρμόζεται η καθαρή διαδρομή βασικού προβολέα |
| Απουσία, απόρριψη, λήξη, λανθασμένη έκδοση ή άδεια μη έγκυρου domain | Οποιαδήποτε | Υδατογράφημα επιβολής/αξιολόγησης· η προσαρμοσμένη τιμή δεν το αντικαθιστά |
| Απόδοση plugin σύμφωνα με τους κανόνες αξιολόγησης | Οποιαδήποτε | Υδατογράφημα αξιολόγησης |
Η ίδια απόφαση εφαρμόζεται στις εικόνες σελίδων που εξυπηρετούνται και στις εξαγωγές σχολίων. Η έξοδος Animated GIF σφραγίζεται καρέ‑καρέ. Έτσι, ένα προσαρμοσμένο υδατογράφημα είναι χαρακτηριστικό εφαρμογής με άδεια, όχι τρόπος αντικατάστασης ή καταστολής του υδατογραφήματος αξιολόγησης.
API Σχολίων
Φόρτωση και εξαγωγή σχολίων στο διακομιστή. Ο πλήρης οδηγός βρίσκεται στα Οδηγοί → Σχόλια· η επιφάνεια είναι:
| Μέλος | Σκοπός |
|---|---|
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
Task<DicomMetadata?> GetDicomMetadataAsync(string token, CancellationToken ct = default)Η μέθοδος υπάρχει για ευθυγράμμιση API, αλλά ο προβολέας DICOM .NET 6 δεν μπορεί να παρέχει τεχνικές ετικέτες. Επιστρέφει null για συνεδρίες DICOM και μη‑DICOM· σε συνεδρία DICOM γράφει επίσης μια εφάπαξ προειδοποίηση που εξηγεί τον περιορισμό της πλατφόρμας. Η απόδοση σελίδας, πλαισίου και animation παραμένει υποστηριζόμενη.
Βοηθοί πόρων — ReferenceCss / ReferenceScripts
Εκδώστε τις ετικέτες <link>/<script> για τους ενσωματωμένους πόρους που εξυπηρετούνται από UseDoconutResources(), με τη σωστή σειρά εξαρτήσεων. Τα πακέτα για λειτουργίες υπό άδεια όπως η αναζήτηση και τα σχόλια εκδίδονται μόνο όταν η άδεια τα ενεργοποιεί, διατηρώντας το UI του πελάτη συνεπές με τη συμπεριφορά του διακομιστή.
string ReferenceCss(CssConfig? config = null) // null → Bootstrap + viewer + search + annotation
string ReferenceScripts(ScriptConfig? config = null)CssConfig flags: IncludeBootstrapCss, IncludeViewerCss, IncludeSearchCss (εξαρτώμενο από αναζήτηση), IncludeAnnotationCss (εξαρτώμενο από σχόλιο).
ScriptConfig flags: IncludeJQuery (απαιτείται από όλα τα άλλα), IncludeBootstrap, IncludeViewerScripts (πυρήνας: docViewer.js + splitter + links), IncludeSearchScripts και IncludeSearchBar (εξαρτώμενο από αναζήτηση), IncludeAnnotationScripts και IncludeAnnotationBar (εξαρτώμενο από σχόλιο).
@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
IReadOnlyList<string> GetWorksheetNames(string token)Επιστρέφει τα ονόματα των φύλλων εργασίας ενός ανοιχτού υπολογιστικού φύλλου, με τη σειρά του βιβλίου εργασίας, ή μια κενή λίστα όταν το ανοιχτό έγγραφο δεν είναι υπολογιστικό φύλλο.
Προστέθηκε στην έκδοση 26.9.0.
Ήταν αυτή η σελίδα χρήσιμη;