راهاندازی در .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.Clouds;
// TODO: implement licence loading, viewer registration, document opening, conversion using current APIایجاد شیء Viewer
این خط یک نمونه جدید از کلاس Viewer را ایجاد میکند و به شما امکان میدهد یک شیء viewer را در کد خود بسازید.
// Viewer is injected; no explicit construction required in Doconut.NETStandard 26.9.0راهاندازی شیء DocOptions
نمونهای از مقداردهی اولیه شیء DocOptions با پیکربندیهای خاص:
var documentOptions = new DocOptions
{
Password = "",
// ImageResolution is obsolete; omitted.
TimeOut = 30
};راهاندازی شیء config
یک شیء PdfConfig جدید را با پیکربندیهای خاص برای پردازش اسناد PDF مقداردهی اولیه کنید:
var config = new PdfConfig { DefaultRender = true, ExtractHyperlinks = true };باز کردن سند شما
این خط متد OpenDocument شیء viewer را فراخوانی میکند و مسیر فایل سند موجود بر روی سرور و اشیاء PdfConfig و DocOptions که قبلاً پیکربندی شدهاند را به عنوان پارامترها میگذارد.
dynamic viewer = null;
var token = viewer.LoadDocument(path, null, null);افزودن Viewer در 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 با تشخیص خودکار لایسنس، از خط زیر استفاده کنید:
```csharp
// Create a Viewer instance using the current API (no constructor arguments required).
var docViewer = new Viewer();
```افزودن لایسنس پیشفرض دستی
میتوانید مسیر یک فایل لایسنس پیشفرض تک را بهصورت دستی هنگام مقداردهی اولیه viewer مشخص کنید.
using System.IO;
using Microsoft.Extensions.DependencyInjection;
using Doconut;
var licenseFilePath = Path.Combine(builder.Environment.WebRootPath, "path/to/your/license");
var docViewer = app.Services.GetRequiredService<Viewer>();افزودن لایسنس با Stream
این متد از overload Viewer.DoconutLicense(Stream licenseStream) برای افزودن لایسنس با استفاده از یک stream استفاده میکند.
using System.IO;
using Doconut.Infrastructure.Licensing;
using (var licenseStream = new FileStream("path/to/your/license", FileMode.Open, FileAccess.Read))
{
var license = new DoconutLicense { DocBytes = new BinaryReader(licenseStream).ReadBytes((int)licenseStream.Length) };
}افزودن لایسنس با سند XML
این متد از overload Viewer.DoconutLicense(XMLDocument licence) برای افزودن لایسنس با استفاده از یک سند XML استفاده میکند.
using System.Xml;
using Doconut.Infrastructure.Licensing;
var xmlDoc = new XmlDocument(); // load the license XML
xmlDoc.Load("path/to/your/license.xml");
var license = new DoconutLicense(); // instantiate license object (populate properties as needed)لایسنسهای پیشفرض متعدد افزونه به صورت دستی
اگر نیاز به مشخص کردن چندین لایسنس دارید، میتوانید فهرستی از مسیرهای فایل را به مقداردهی اولیه viewer ارائه دهید.
```csharp
// Prepare the paths to the viewer licence files (kept for reference; the current API loads them automatically)
var 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")
};
// The Viewer class no longer requires the licences in its constructor.
// Create an instance with the default constructor.
var docViewer = new Viewer();
// Open a document (e.g., a PDF) and obtain a token that represents the opened file.
string token = await docViewer.OpenDocumentAsync(
filePath: Path.Combine(_hostingEnvironment.WebRootPath, "sample.pdf"),
options: new DocOptions(),
ct: CancellationToken.None);
```افزودن لایسنس افزونه با Stream
این متد از overload Viewer.SetLicensePlugin(Stream pluginLicence) برای افزودن لایسنس افزونه با استفاده از یک stream استفاده میکند.
using (var pluginLicenseStream = new FileStream("path/to/your/plugin-license.lic", FileMode.Open))
{
// In Doconut.NETStandard 26.9.0 the license is supplied via the configuration
// passed to OpenDocumentAsync (BaseConfig), so the explicit SetLicensePlugin call
// is no longer required. Keep the license file accessible to the viewer or
// include it in your BaseConfig as shown in other samples.
}افزودن لایسنس افزونه با سند XML
این متد از overload Viewer.SetLicensePlugin(XMLDocument xmlPluginLicence) برای افزودن لایسنس افزونه با استفاده از یک سند XML استفاده میکند.
// The license XML is discovered automatically by the viewer in Doconut.NETStandard 26.9.0.
// No explicit API call is required to register it.
string token = await Viewer.OpenDocumentAsync(
"path/to/your/document.pdf",
null, // DocOptions – use default settings
CancellationToken.None);پکیجهای 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. حاشیهنویسی را به مدیر اضافه کنید و آن را در نمایشگر سند بارگذاری کنید تا نمایش داده شود.
using Doconut.Annotations;
using System.Drawing;
// Placeholder: open the document and obtain page dimensions using the current Doconut.NETStandard API.
// Placeholder: create an annotation manager for the page size.
string imgUrl = "img/sample.png";
var imgAnn = new ImageAnnotation(
1,
new Rectangle(600, 700, 750, 300),
imgUrl
);
// Placeholder: add the annotation to the manager and load the annotation XML back into the viewer using the current API.در 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 Viewer
ویژگی 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)