ระบุตัวเลือกการโหลด

เมื่อโหลดเอกสาร คุณสามารถตั้งค่าคุณสมบัติขั้นสูงบางอย่างได้ Aspose.Words ให้คลาส LoadOptions แก่คุณ ซึ่งช่วยให้ควบคุมกระบวนการโหลดได้แม่นยำยิ่งขึ้น รูปแบบการโหลดบางรูปแบบมีคลาสที่สอดคล้องกันซึ่งมีตัวเลือกการโหลดสำหรับรูปแบบการโหลดนี้ เช่น มี PdfLoadOptions สำหรับการโหลดเป็นรูปแบบ PDF หรือ TxtLoadOptions สำหรับการโหลดไปยัง TXT บทความนี้จะแสดงตัวอย่างการทำงานกับตัวเลือกของคลาส LoadOptions

ตั้งค่าเวอร์ชัน Microsoft Word เพื่อเปลี่ยนรูปลักษณ์

แอปพลิเคชัน Microsoft Word เวอร์ชันต่างๆ สามารถแสดงเอกสารในรูปแบบที่แตกต่างกันได้ ตัวอย่างเช่น มีปัญหาที่ทราบกันดีเกี่ยวกับเอกสาร OOXML เช่น DOCX หรือ DOTX ที่สร้างโดยใช้ WPS Office ในกรณีดังกล่าว องค์ประกอบมาร์กอัปเอกสารที่สำคัญอาจหายไปหรืออาจถูกตีความแตกต่างออกไป ทำให้ Microsoft Word 2019 แสดงเอกสารดังกล่าวแตกต่างจาก Microsoft Word 2010

ตามค่าเริ่มต้น Aspose.Words จะเปิดเอกสารโดยใช้กฎ Microsoft Word 2019 หากคุณต้องการให้การโหลดเอกสารปรากฏขึ้นเหมือนกับที่จะเกิดขึ้นในแอปพลิเคชัน Microsoft Word เวอร์ชันก่อนหน้า คุณควรระบุเวอร์ชันที่ต้องการอย่างชัดเจนโดยใช้คุณสมบัติ MswVersion ของคลาส LoadOptions

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการตั้งค่าเวอร์ชัน Microsoft Word พร้อมตัวเลือกการโหลด:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
// Create a new LoadOptions object, which will load documents according to MS Word 2019 specification by default
// and change the loading version to Microsoft Word 2010.
LoadOptions loadOptions = new LoadOptions { MswVersion = MsWordVersion.Word2010 };
Document doc = new Document(MyDir + "Document.docx", loadOptions);
doc.Save(ArtifactsDir + "WorkingWithLoadOptions.SetMsWordVersion.docx");

ตั้งค่ากำหนดภาษาเพื่อเปลี่ยนรูปลักษณ์

รายละเอียดของการแสดงเอกสารใน Microsoft Word ไม่เพียงขึ้นอยู่กับเวอร์ชันของแอปพลิเคชันและค่าคุณสมบัติ MswVersion เท่านั้น แต่ยังขึ้นอยู่กับการตั้งค่าภาษาด้วย Microsoft Word อาจแสดงเอกสารแตกต่างกันไปขึ้นอยู่กับการตั้งค่ากล่องโต้ตอบ “การตั้งค่าภาษาของ Office” ซึ่งสามารถพบได้ใน “ไฟล์ → ตัวเลือก → ภาษา” การใช้กล่องโต้ตอบนี้ผู้ใช้สามารถเลือกได้ เช่น ภาษาหลัก ภาษาการพิสูจน์อักษร ภาษาที่แสดง และอื่นๆ Aspose.Words จัดเตรียมคุณสมบัติ LanguagePreferences ให้เทียบเท่ากับกล่องโต้ตอบนี้ หากเอาต์พุต Aspose.Words แตกต่างจากเอาต์พุต Microsoft Word ให้ตั้งค่าที่เหมาะสมสำหรับ EditingLanguage ซึ่งจะช่วยปรับปรุงเอกสารเอาต์พุตได้

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการตั้งค่าภาษาญี่ปุ่นเป็น EditingLanguage:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
LoadOptions loadOptions = new LoadOptions();
// Set language preferences that will be used when document is loading.
loadOptions.LanguagePreferences.AddEditingLanguage(EditingLanguage.Japanese);
Document doc = new Document(MyDir + "No default editing language.docx", loadOptions);
int localeIdFarEast = doc.Styles.DefaultFont.LocaleIdFarEast;
Console.WriteLine(
localeIdFarEast == (int)EditingLanguage.Japanese
? "The document either has no any FarEast language set in defaults or it was set to Japanese originally."
: "The document default FarEast language was set to another than Japanese language originally, so it is not overridden.");

ใช้ WarningCallback เพื่อควบคุมปัญหาขณะโหลดเอกสาร

เอกสารบางรายการอาจเสียหาย มีรายการที่ไม่ถูกต้อง หรือมีฟีเจอร์ที่ Aspose.Words ไม่รองรับในปัจจุบัน หากคุณต้องการทราบปัญหาที่เกิดขึ้นขณะโหลดเอกสาร Aspose.Words จะมีอินเทอร์เฟซ IWarningCallback ให้

ตัวอย่างโค้ดต่อไปนี้แสดงการใช้งานอินเทอร์เฟซ IWarningCallback:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
public class DocumentLoadingWarningCallback : IWarningCallback
{
public void Warning(WarningInfo info)
{
// Prints warnings and their details as they arise during document loading.
Console.WriteLine($"WARNING: {info.WarningType}, source: {info.Source}");
Console.WriteLine($"\tDescription: {info.Description}");
}
}

หากต้องการรับข้อมูลเกี่ยวกับปัญหาทั้งหมดตลอดระยะเวลาโหลด ให้ใช้คุณสมบัติ WarningCallback

ตัวอย่างรหัสต่อไปนี้แสดงวิธีการใช้คุณสมบัตินี้:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
LoadOptions loadOptions = new LoadOptions { WarningCallback = new DocumentLoadingWarningCallback() };
Document doc = new Document(MyDir + "Document.docx", loadOptions);

ใช้ ResourceLoadingCallback เพื่อควบคุมการโหลดทรัพยากรภายนอก

เอกสารอาจมีลิงก์ภายนอกไปยังรูปภาพที่อยู่ในดิสก์ภายในเครื่อง เครือข่าย หรืออินเทอร์เน็ต Aspose.Words จะโหลดรูปภาพดังกล่าวลงในเอกสารโดยอัตโนมัติ แต่มีบางสถานการณ์ที่จำเป็นต้องควบคุมกระบวนการนี้ ตัวอย่างเช่น เพื่อตัดสินใจว่าเราจำเป็นต้องโหลดรูปภาพบางรูปจริงๆ หรืออาจข้ามรูปภาพนั้นไป ตัวเลือกการโหลด ResourceLoadingCallback ช่วยให้คุณสามารถควบคุมสิ่งนี้ได้

ตัวอย่างโค้ดต่อไปนี้แสดงการใช้งานอินเทอร์เฟซ IResourceLoadingCallback:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
private class HtmlLinkedResourceLoadingCallback : IResourceLoadingCallback
{
public ResourceLoadingAction ResourceLoading(ResourceLoadingArgs args)
{
switch (args.ResourceType)
{
case ResourceType.CssStyleSheet:
{
Console.WriteLine($"External CSS Stylesheet found upon loading: {args.OriginalUri}");
// CSS file will don't used in the document.
return ResourceLoadingAction.Skip;
}
case ResourceType.Image:
{
// Replaces all images with a substitute.
Image newImage = Image.FromFile(ImagesDir + "Logo.jpg");
ImageConverter converter = new ImageConverter();
byte[] imageBytes = (byte[])converter.ConvertTo(newImage, typeof(byte[]));
args.SetData(imageBytes);
// New images will be used instead of presented in the document.
return ResourceLoadingAction.UserProvided;
}
case ResourceType.Document:
{
Console.WriteLine($"External document found upon loading: {args.OriginalUri}");
// Will be used as usual.
return ResourceLoadingAction.Default;
}
default:
throw new InvalidOperationException("Unexpected ResourceType value.");
}
}
}

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการใช้คุณสมบัติ ResourceLoadingCallback:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
LoadOptions loadOptions = new LoadOptions { ResourceLoadingCallback = new HtmlLinkedResourceLoadingCallback() };
// When we open an Html document, external resources such as references to CSS stylesheet files
// and external images will be handled customarily by the loading callback as the document is loaded.
Document doc = new Document(MyDir + "Images.html", loadOptions);
doc.Save(ArtifactsDir + "WorkingWithLoadOptions.ResourceLoadingCallback.pdf");

ใช้ TempFolder เพื่อหลีกเลี่ยงข้อยกเว้นหน่วยความจำ

Aspose.Words รองรับเอกสารที่มีขนาดใหญ่มากซึ่งมีเนื้อหามากมายหลายพันหน้า การโหลดเอกสารดังกล่าวอาจต้องใช้ RAM มาก ในกระบวนการโหลด Aspose.Words ต้องการหน่วยความจำเพิ่มเติมเพื่อเก็บโครงสร้างชั่วคราวที่ใช้ในการแยกวิเคราะห์เอกสาร

หากคุณมีปัญหากับข้อยกเว้นหน่วยความจำไม่เพียงพอขณะโหลดเอกสาร ให้ลองใช้คุณสมบัติ TempFolder ในกรณีนี้ Aspose.Words จะจัดเก็บข้อมูลบางส่วนไว้ในไฟล์ชั่วคราวแทนหน่วยความจำ และสามารถช่วยหลีกเลี่ยงข้อยกเว้นดังกล่าวได้

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการตั้งค่า TempFolder:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
LoadOptions loadOptions = new LoadOptions { TempFolder = ArtifactsDir };
Document doc = new Document(MyDir + "Document.docx", loadOptions);

ตั้งค่าการเข้ารหัสอย่างชัดเจน

รูปแบบเอกสารสมัยใหม่ส่วนใหญ่จัดเก็บเนื้อหาในรูปแบบ Unicode และไม่ต้องการการจัดการพิเศษ ในทางกลับกัน ยังมีเอกสารจำนวนมากที่ใช้การเข้ารหัสแบบ pre-Unicode และบางครั้งก็พลาดข้อมูลการเข้ารหัส หรือไม่รองรับข้อมูลการเข้ารหัสโดยธรรมชาติด้วยซ้ำ Aspose.Words พยายามตรวจหาการเข้ารหัสที่เหมาะสมโดยอัตโนมัติตามค่าเริ่มต้น แต่ในบางกรณีที่เกิดขึ้นไม่บ่อยนัก คุณอาจจำเป็นต้องใช้การเข้ารหัสที่แตกต่างจากการเข้ารหัสที่ตรวจพบโดยอัลกอริธึมการจดจำการเข้ารหัสของเรา ในกรณีนี้ ให้ใช้คุณสมบัติ Encoding เพื่อรับหรือตั้งค่าการเข้ารหัส

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการตั้งค่าการเข้ารหัสเพื่อแทนที่การเข้ารหัสที่เลือกโดยอัตโนมัติ:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
LoadOptions loadOptions = new LoadOptions { Encoding = Encoding.UTF7 };
Document doc = new Document(MyDir + "Encoded in UTF-7.txt", loadOptions);

โหลดเอกสารที่เข้ารหัส

คุณสามารถโหลดเอกสาร Word ที่เข้ารหัสด้วยรหัสผ่านได้ เมื่อต้องการทำเช่นนี้ ให้ใช้ตัวสร้างพิเศษโอเวอร์โหลด ซึ่งยอมรับวัตถุ LoadOptions วัตถุนี้มีคุณสมบัติ Password ซึ่งระบุสตริงรหัสผ่าน

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการโหลดเอกสารที่เข้ารหัสด้วยรหัสผ่าน:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document(MyDir + "Encrypted.docx", new LoadOptions("docPassword"));

หากคุณไม่ทราบล่วงหน้าว่าไฟล์ถูกเข้ารหัสหรือไม่ คุณสามารถใช้คลาส FileFormatUtil ซึ่งมีวิธีการอรรถประโยชน์ในการทำงานกับรูปแบบไฟล์ เช่น การตรวจจับรูปแบบไฟล์หรือการแปลงนามสกุลไฟล์เป็น/จากการแจงนับรูปแบบไฟล์ หากต้องการตรวจสอบว่าเอกสารถูกเข้ารหัสและต้องใช้รหัสผ่านในการเปิดหรือไม่ ให้ใช้คุณสมบัติ IsEncrypted

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการตรวจสอบ OpenDocument ว่าถูกเข้ารหัสหรือไม่:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
FileFormatInfo info = FileFormatUtil.DetectFileFormat(MyDir + "Encrypted.odt");
Console.WriteLine(info.IsEncrypted);