الإعداد في .NET Standard / Core
ملف Startup.cs
داخل ملف Startup.cs لمشروع .NET Core، تُعرّف هذه الأسطر من الشيفرة تكوين خط أنابيب الوسيط باستخدام طريقة MapWhen. يتحقق الشرط المقدم مما إذا كان مسار الطلب الوارد ينتهي بـ DocImage.axd. داخل هذا القسم، يتم استدعاء طريقة UseDoconut مع كائن DoconutOptions كمعامل.
app.MapWhen(
context => context.Request.Path.ToString().EndsWith("DocImage.axd"),
appBranch =>
{
appBranch.UseDoconut(new DoconutOptions { UnSafeMode = false, ShowDoconutInfo = false });
}
);إضافة مساحات أسماء Doconut
في مشروعك، أضف عبارات using التالية:
using Doconut;
using Doconut.Configs;
using Doconut.Formats;
using Doconut.Clouds;إنشاء كائن Viewer
تنشئ هذه السطر نسخة جديدة من فئة Viewer، مما يتيح لك إنشاء كائن عارض داخل الشيفرة الخاصة بك.
var docViewer = new Viewer(_cache, _accessor, licenseFilePath);إعداد كائن DocOptions
مثال على تهيئة كائن DocOptions بإعدادات محددة:
var documentOptions = new DocOptions
{
Password = "",
ImageResolution = 200,
TimeOut = 30
};إعداد كائن config
تهيئة كائن PdfConfig جديد بإعدادات محددة لمعالجة مستندات PDF:
var config = new PdfConfig { DefaultRender = true, ExtractHyperlinks = true };فتح المستند الخاص بك
تستدعي هذه السطر طريقة OpenDocument لكائن العارض، مع تمرير مسار ملف المستند الموجود على الخادم وكائنات PdfConfig و DocOptions التي تم تكوينها مسبقًا كمعاملات.
var token = docViewer.OpenDocument(pathToFile, config, documentOptions);إضافة العارض في HTML الخاص بك
<div id="div_ctlDoc"></div>إضافة ملفات CSS و JavaScript
أضف ملفات CSS و JavaScript التالية في الصفحة. هذه السكريبتات مضمونة في ملف ZIP مع عينات الشيفرة.
<link rel="stylesheet" href="css/viewer.css" />
<!-- Main Viewer Related Scripts -->
<script src="scripts/jquery.min.js"></script>
<script src="scripts/docViewer.js"></script>
<script src="scripts/splitter.js"></script>
<script src="scripts/search.js"></script>
<script src="scripts/documentLinks.js"></script>
<!-- Viewer functions -->
<script src="scripts/docViewer.UI.js?v=1"></script>إضافة تراخيص إلى مشروعك
اكتشاف الترخيص تلقائيًا
لتهيئة docViewer مع اكتشاف الترخيص تلقائيًا، استخدم السطر التالي:
var docViewer = new Viewer(_cache, _accessor);إضافة ترخيص افتراضي يدوي
يمكنك تحديد مسار ملف ترخيص افتراضي واحد يدويًا عند تهيئة العارض.
var licenseFilePath = Path.Combine(_hostingEnvironment.WebRootPath, "path/to/your/license");
var docViewer = new Viewer(_cache, _accessor, licenseFilePath);إضافة ترخيص عبر تدفق
تستخدم هذه الطريقة overload Viewer.DoconutLicense(Stream licenseStream) لإضافة ترخيص باستخدام تدفق.
using (var licenseStream = new FileStream("path/to/your/license", FileMode.Open))
{
Viewer.DoconutLicense(licenseStream);
}إضافة ترخيص عبر مستند XML
تستخدم هذه الطريقة overload Viewer.DoconutLicense(XMLDocument licence) لإضافة ترخيص باستخدام مستند XML.
var xmlDoc = new XmlDocument();
xmlDoc.Load("path/to/your/license.xml");
Viewer.DoconutLicense(xmlDoc);ترخيصات متعددة للملحقات الافتراضية يدويًا
إذا كنت بحاجة لتحديد تراخيص متعددة، يمكنك تقديم قائمة بمسارات الملفات إلى تهيئة العارض.
List<string> licenseFilePaths = new List<string>
{
Path.Combine(_hostingEnvironment.WebRootPath, "Doconut.Viewer.lic"),
Path.Combine(_hostingEnvironment.WebRootPath, "Doconut.Viewer.Annotation.lic"),
Path.Combine(_hostingEnvironment.WebRootPath, "Doconut.Viewer.Search.lic")
};
var docViewer = new Viewer(_cache, _accessor, licenseFilePaths);إضافة ترخيص ملحق عبر تدفق
تستخدم هذه الطريقة overload Viewer.SetLicensePlugin(Stream pluginLicence) لإضافة ترخيص ملحق باستخدام تدفق.
using (var pluginLicenseStream = new FileStream("path/to/your/plugin-license.lic", FileMode.Open))
{
Viewer.SetLicensePlugin(pluginLicenseStream);
}إضافة ترخيص ملحق عبر مستند XML
تستخدم هذه الطريقة overload Viewer.SetLicensePlugin(XMLDocument xmlPluginLicence) لإضافة ترخيص ملحق باستخدام مستند XML.
var pluginXmlDoc = new XmlDocument();
pluginXmlDoc.Load("path/to/your/plugin-license.xml");
Viewer.SetLicensePlugin(pluginXmlDoc);حزم NuGet المطلوبة
لضمان توافق مشروعك بالكامل مع .NET Core Standard، يجب تضمين حزم NuGet التالية، مرتبة أبجديًا.
- MessagePack - Version 2.5.140
- Microsoft.Bcl.AsyncInterfaces - Version 8.0.0
- Microsoft.Extensions.Caching.Abstractions - Version 8.0.0
- Microsoft.Extensions.Configuration - Version 8.0.0
- Microsoft.Extensions.Configuration.Abstractions - Version 8.0.0
- Microsoft.Extensions.Configuration.FileExtensions - Version 8.0.0
- Microsoft.Extensions.Configuration.Json - Version 8.0.0
- Microsoft.Extensions.FileProviders.Abstractions - Version 8.0.0
- Microsoft.Extensions.FileProviders.Physical - Version 8.0.0
- Microsoft.Extensions.FileSystemGlobbing - Version 8.0.0
- Microsoft.Extensions.Primitives - Version 8.0.0
- System.Buffers - Version 4.5.1
- System.Formats.Asn1 - Version 8.0.0
- System.Numerics.Vectors - Version 4.5.0
- System.Security.Cryptography.Cng - Version 5.0.0
- System.Security.Cryptography.Pkcs - Version 8.0.0
- System.Text.Encoding.CodePages - Version 8.0.0
- System.Text.Encodings.Web - Version 8.0.0
- System.Text.Json - Version 8.0.3
- System.Threading.Tasks.Extensions - Version 4.5.4
خيارات تكوين العرض
يمكنك تكوين سلوك العرض باستخدام الخيارات التالية:
- CadConfig: يُستخدم لملفات DWG و DXF و DGN.
- EmailConfig: يُستخدم لملفات EML و EMLX و MSG.
- EpubConfig: يُستخدم لملفات EPUB.
- ExcelConfig: يُستخدم لملفات Excel و CSV.
- MhtConfig: يُستخدم لملفات MHT.
- PptConfig: يُستخدم لملفات PowerPoint.
- ProjectConfig: يُستخدم لملفات MPP.
- PsdConfig: يُستخدم لملفات PSD.
- TxtConfig: يُستخدم لملفات TXT.
- TiffConfig: يُستخدم لملفات TIFF.
تكوين خيارات العرض
يتم تكوين خيارات العرض باستخدام الخاصية DefaultRender:
- DefaultRender = true : يقدّم هذا الخيار عرضًا بجودة أعلى لكنه يستخدم المزيد من ذاكرة الخادم ووقت المعالجة.
- DefaultRender = false : يوفّر هذا الخيار عرضًا أسرع على حساب جودة أقل قليلًا.
كيفية إضافة توضيح صورة
في C#
1. افتح المستند واحصل على أبعاد الصفحة الأولى. 2. ابدأ بـ AnnotationManager باستخدام أبعاد الصفحة. 3. أنشئ ImageAnnotation، مع تحديد مسار الصورة في imgUrl، وحدد الموقع والحجم داخل Rectangle. 4. أضف التوضيح إلى المدير وحمّله في عارض المستند لعرضه.
var token = docViewer.OpenDocument(pathToFile, config, documentOptions);
var firstPage = docViewer.GetThumbnailDimensions(1, 0, 100, false);
var pageWidth = firstPage.Width;
var pageHeight = firstPage.Height;
using (var annMgr = docViewer.GetAnnotationManager(pageWidth, pageHeight))
{
string imgUrl = "img/sample.png";
var imgAnn = new ImageAnnotation(
1,
new Rectangle(600, 700, 750, 300),
imgUrl
);
annMgr.Add(imgAnn);
docViewer.LoadAnnotationXML(annMgr.GetAnnotationXml());
}في JavaScript
1. تأكد من توفر YourController. 2. أنشئ ImageAnnotation جديد، مع تحديد مسار الصورة باستخدام SetNote. 3. أضف ورسم التوضيح لعرضه على المستند.
function ImageStamp() {
if (null != objctlDoc.YourController()) {
var objStampImage = new ImageAnnotation({ left: 200, top: 200, width: 260, height: 55 });
objctlDoc.YourController().AddAnnotation(null, objStampImage, null);
objStampImage.SetNote('/images/Approved_Stamp.png');
objStampImage.Paint();
}
}خطوط مخصصة في مستندات Word
خاصية FontFolders في فئة WordConfig تحدد دلائل مخصصة حيث سيبحث التطبيق عن الخطوط. هذا مفيد بشكل خاص لمعالجة مستندات Word التي تعتمد على خطوط غير مثبتة في دلائل الخطوط الافتراضية للنظام.
var config = new WordConfig
{
FontFolders = new string[] { "C:\\CustomFonts", "D:\\SharedFonts" }
};تحديث مهم لـ Doconut 25.2.0
من الضروري تحديث حزمة System.Text.Json إلى الإصدار 8.0.5 في جميع مشاريعك. هذا التحديث حاسم لضمان التوافق مع الميزات الأخيرة وللتصدي للتحسينات الأمنية المهمة.
ترميز البريد الإلكتروني
خاصية EmailEncoding في فئة EmailConfig تحدد الترميز المفضل لكل من موضوع البريد الإلكتروني ومحتواه.
var emailConfig = new EmailConfig {
EmailEncoding = Encoding.UTF8 // Set preferred email encoding
};ترميز الموضوع والمحتوى
خاصيتي SubjectEncoding و BodyEncoding في فئة EmailConfig تحددان الترميز المستخدم للموضوع ومحتوى البريد الإلكتروني على التوالي.
var emailConfig = new EmailConfig {
SubjectEncoding = Encoding.UTF8, // Set encoding for the subject
BodyEncoding = Encoding.UTF8 // Set encoding for the body
};دعم الثقافة في عارض Word
خاصية DocumentCulture في فئة WordConfig تتيح لك تعريف الثقافة صراحةً لملفات DOC و DOCX. يضمن ذلك أن المحتوى المحلي—مثل التواريخ والعملات والأرقام—يُعرض تمامًا كما هو في Microsoft Word. هذا مفيد بشكل خاص للغات التي لديها متطلبات تنسيق محددة.
var config = new WordConfig { DocumentCulture = "he-IL" }; // Hebrew (Israel)
var config = new WordConfig { DocumentCulture = "ar-SA" }; // Arabic (Saudi Arabia)
var config = new WordConfig { DocumentCulture = "th-TH" }; // Thai (Thailand)
var config = new WordConfig { DocumentCulture = "ja-JP" }; // Japanese (Japan)