จัดการคำเตือนการนำเสนอใน Node.js
ภาพรวม
Aspose.Slides สามารถรายงานปัญหาที่สามารถกู้คืนได้ในขณะที่ทำการโหลด, เรนเดอร์, แปลง หรือบันทึกงานนำเสนอ ตัวอย่าง ได้แก่ บันทึกแหล่งที่เสียหาย, เนื้อหาที่ไม่สามารถเก็บรักษาได้, การทดแทนฟอนท์, และข้อจำกัดของรูปแบบเป้าหมาย คอลแบ็กการเตือนช่วยให้แอปพลิเคชันบันทึกเงื่อนไขเหล่านี้และตัดสินใจว่าการดำเนินการปัจจุบันควรดำเนินต่อหรือไม่
ใช้ java.newProxy เพื่อทำการนำเข้าระบบอินเทอร์เฟซ Java IWarningCallback ใน JavaScript และตรวจสอบค่า getWarningType และ getDescription ที่ส่งมาผ่าน IWarningInfo. คืนค่า ReturnAction.Continue เพื่อยอมรับการเตือนหรือ ReturnAction.Abort เพื่อหยุดการดำเนินการ
ใช้ LoadOptions.setWarningCallback สำหรับคำเตือนที่เกิดขึ้นขณะเปิดงานนำเสนอ คลาสตัวเลือกการเรนเดอร์และการส่งออกสืบทอดจาก SaveOptions.setWarningCallback, ซึ่งรับคำเตือนจากการเรนเดอร์สไลด์, การแปลง, และการบันทึก เนื่องจากคำเตือนเองไม่ได้ระบุการทำงานของแอปพลิเคชัน จึงเชื่อมโยงแต่ละอินสแตนซ์ของ callback กับขั้นตอนการทำงานเมื่อคุณสร้างรายงานรวม
คำเตือนและข้อยกเว้น
คำเตือนอธิบายสภาวะที่ Aspose.Slides สามารถกู้คืนได้หาก callback คืนค่า ReturnAction.Continue ข้อยกเว้นหมายถึงการดำเนินการที่ร้องขอไม่สามารถเสร็จสิ้นตามปกติ; ข้อยกเว้นจะไม่ถูกแปลงเป็นคำเตือนและไม่สามารถจัดการโดยนโยบายการเตือนได้
การคืนค่า ReturnAction.Abort จะให้ตัวกระจายคำเตือนหยุดการดำเนินการปัจจุบันโดยการโยงข้อยกเว้น ข้อยกเว้นสาธารณะจะแตกต่างตามการดำเนินการและรูปแบบงานนำเสนอ ตัวอย่างเช่น การโหลดอาจทำให้เกิด PptxReadException หรือ PptReadException, ขณะที่การบันทึกหรือการส่งออกอาจทำให้เกิด PptxException. จับข้อผิดพลาดจาก Java bridge ที่ขอบเขตของการดำเนินการและใช้รายงานคำเตือนเพื่อตัดสินใจว่านโยบายแอปพลิเคชันเป็นสาเหตุของการหยุดหรือไม่ แทนที่จะพึ่งพาประเภทข้อยกเว้นหรือข้อความเดียว คอลแบ็กบันทึกคำเตือนก่อนคืนค่า ReturnAction.Abort, ทำให้เหตุผลยังคงพร้อมสำหรับแอปพลิเคชัน
ประเภทคำเตือน
คลาส WarningType ให้ค่าคงที่จำนวนเต็มสำหรับประเภทต่อไปนี้:
| ประเภทคำเตือน | ความหมาย | นโยบายทั่วไป |
|---|---|---|
| SourceFileCorruption | งานนำเสนอแหล่งที่มีความเสียหายที่อาจทำให้เอกสารที่บันทึกในรูปแบบเดิมไม่สามารถใช้งานได้. | ยกเลิก. |
| DataLoss | ข้อความ, แผนภูมิ, รูปภาพ หรือข้อมูลอื่นอาจหายไปหลังจากการโหลดหรือบันทึก. | ยกเลิก. |
| MajorFormattingLoss | งานนำเสนออาจสูญเสียการจัดรูปแบบที่สำคัญ. | ยกเลิกในโหมดตรวจสอบที่เข้มงวด; มิฉะนั้นบันทึกและดำเนินต่อ. |
| MinorFormattingLoss | อาจเกิดความแตกต่างในการจัดรูปแบบที่จำกัด. | บันทึกเพื่อการวินิจฉัยและดำเนินต่อ. |
| CompatibilityIssue | ผลลัพธ์อาจไม่เปิดหรือทำงานอย่างถูกต้องในบางแอปพลิเคชันหรือเวอร์ชันเก่า. | บันทึกและดำเนินต่อเว้นแต่ความเข้ากันได้เป็นสิ่งจำเป็น. |
| UnexpectedContent | แหล่งที่มามีเนื้อหาที่ไม่รองรับหรือไม่รู้จักซึ่งผลกระทบอาจยังไม่ทราบ. | บันทึกและดำเนินต่อ, หรือถือเป็นข้อผิดพลาดในนโยบายที่เข้มงวด. |
ประเภทควรเป็นตัวกำหนดการตัดสินใจนโยบาย เก็บค่าที่คืนจาก getDescription เพื่อการวินิจฉัย, แต่ไม่ควรพึ่งพาคำอธิบายนี้ในตรรกะของแอปพลิเคชันเนื่องจากข้อความอาจแตกต่างระหว่างสถานการณ์คำเตือนและรุ่นผลิตภัณฑ์
รวบรวมและจัดประเภทคำเตือน
ตัวอย่าง JavaScript ต่อไปนี้ใช้รายงานระดับแอปพลิเคชันหนึ่งชุดสำหรับสายการประมวลผลทั้งหมด อินสแตนซ์ callback แยกกันทำเครื่องหมายคำเตือนจากการโหลด, การเรนเดอร์, การแปลงเป็น PDF, และการบันทึกเป็น PPTX นโยบายจะยกเลิกเมื่อพบความเสียหายของแหล่งข้อมูลหรือการสูญเสียข้อมูล, ตัวเลือกจะยกเลิกเมื่อเกิดการสูญเสียการจัดรูปแบบที่สำคัญ, และดำเนินต่อสำหรับคำเตือนอื่น ๆ
const java = require("java");
var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");
class WarningPolicy {
constructor(abortOnMajorFormattingLoss) {
this.abortOnMajorFormattingLoss = abortOnMajorFormattingLoss;
}
getAction(warningType) {
if (warningType === aspose.slides.WarningType.SourceFileCorruption || warningType === aspose.slides.WarningType.DataLoss) {
return aspose.slides.ReturnAction.Abort;
}
if (warningType === aspose.slides.WarningType.MajorFormattingLoss && this.abortOnMajorFormattingLoss) {
return aspose.slides.ReturnAction.Abort;
}
return aspose.slides.ReturnAction.Continue;
}
}
function createReportingWarningCallback(stage, report, policy) {
return java.newProxy("com.aspose.slides.IWarningCallback", {
warning: function (warning) {
const type = warning.getWarningType();
const description = warning.getDescription();
report.push({ stage, type, description });
return policy.getAction(type);
}
});
}
function processPresentation(inputPath, report, policy) {
try {
const loadOptions = new aspose.slides.LoadOptions();
const callback = createReportingWarningCallback("Loading", report, policy);
loadOptions.setWarningCallback(callback);
const presentation = new aspose.slides.Presentation(inputPath, loadOptions);
try {
if (!renderFirstSlide(presentation, report, policy)) {
return false;
}
if (!convertToPdf(presentation, report, policy)) {
return false;
}
return saveValidatedCopy(presentation, report, policy);
} finally {
presentation.dispose();
}
} catch (error) {
console.error("Loading stopped: " + error.message);
return false;
}
}
function renderFirstSlide(presentation, report, policy) {
if (presentation.getSlides().size() === 0) {
console.error("Rendering stopped: the presentation has no slides.");
return false;
}
try {
const options = new aspose.slides.RenderingOptions();
const callback = createReportingWarningCallback("Rendering", report, policy);
options.setWarningCallback(callback);
const image = presentation.getSlides().get_Item(0).getImage(options);
try {
image.save("slide-1.png", aspose.slides.ImageFormat.Png);
return true;
} finally {
image.dispose();
}
} catch (error) {
console.error("Rendering stopped: " + error.message);
return false;
}
}
function convertToPdf(presentation, report, policy) {
try {
const options = new aspose.slides.PdfOptions();
const callback = createReportingWarningCallback("Conversion", report, policy);
options.setWarningCallback(callback);
presentation.save("converted.pdf", aspose.slides.SaveFormat.Pdf, options);
return true;
} catch (error) {
console.error("Conversion stopped: " + error.message);
return false;
}
}
function saveValidatedCopy(presentation, report, policy) {
try {
const options = new aspose.slides.PptxOptions();
const callback = createReportingWarningCallback("Saving", report, policy);
options.setWarningCallback(callback);
presentation.save("validated-output.pptx", aspose.slides.SaveFormat.Pptx, options);
return true;
} catch (error) {
console.error("Saving stopped: " + error.message);
return false;
}
}
function warningTypeName(warningType) {
switch (warningType) {
case aspose.slides.WarningType.SourceFileCorruption:
return "SourceFileCorruption";
case aspose.slides.WarningType.DataLoss:
return "DataLoss";
case aspose.slides.WarningType.MajorFormattingLoss:
return "MajorFormattingLoss";
case aspose.slides.WarningType.MinorFormattingLoss:
return "MinorFormattingLoss";
case aspose.slides.WarningType.CompatibilityIssue:
return "CompatibilityIssue";
case aspose.slides.WarningType.UnexpectedContent:
return "UnexpectedContent";
default:
return "Unknown (" + warningType + ")";
}
}
const report = [];
const policy = new WarningPolicy(true);
const completed = processPresentation("input.pptx", report, policy);
console.log(completed ? "Processing completed." : "Processing stopped.");
for (const entry of report) {
const typeName = warningTypeName(entry.type);
console.log("[" + entry.stage + "] " + typeName + ": " + entry.description);
}
ส่งค่า false สำหรับ abortOnMajorFormattingLoss เมื่อตั้งค่า WarningPolicy หากยอมรับความแตกต่างการจัดรูปแบบที่สำคัญ ปัญหาความเข้ากันได้, การสูญเสียการจัดรูปแบบระดับย่อย, และเนื้อหาที่ไม่คาดคิดยังคงถูกเก็บในรายงานแม้การดำเนินการจะดำเนินต่อต่อไป ขยาย WarningPolicy.getAction หากแอปพลิเคชันต้องปฏิเสธหนึ่งในประเภทเหล่านี้
สถานการณ์คำเตือนทั่วไป
คำเตือนสามารถปรากฏได้ในขั้นตอนต่าง ๆ ของกระบวนการทำงาน:
- ลายเซ็นดิจิทัล: งานนำเสนอที่ลงลายเซ็นอาจสร้างคำเตือนขณะโหลดว่าลายเซ็นจะหายไประหว่างการประมวลผล Aspose.Slides รายงานสภาวะ
DataLossนี้ผ่าน IPresentationSignedWarningInfo. คอลแบ็กช่วงการโหลดทำให้แอปพลิเคชันปฏิเสธไฟล์หรือยอมรับการสูญเสียที่รายงานไว้โดยชัดเจน - การทดแทนฟอนท์: ฟอนท์ที่ไม่มีอาจถูกแทนที่ในขณะที่สไลด์กำลังเรนเดอร์หรือส่งออก คำเตือนการทดแทนฟอนท์จะรายงานเป็น
DataLossดังนั้นนโยบายเข้มงวดด้านบนจะยกเลิกแม้ว่าผู้ใช้จะถือว่าการเปลี่ยนฟอนท์นั้นรับได้ตามสายตา เพื่อตรวจสอบพฤติกรรมนี้ ให้ใช้งานนำเข้าที่มีข้อความในฟอนท์ที่ไม่พร้อมใช้งานใน runtime รายละเอียดคำเตือนจะแสดงการทดแทน; กำหนดฟอนท์ที่ต้องการหรือ font substitution rules ก่อนลองใหม่ - เนื้อหาไม่รองรับหรือไม่คาดคิด: ตัวโหลดอาจเจอบันทึกหรือฟีเจอร์ของงานนำเสนอที่ไม่รู้จัก คำเตือนเช่นนี้อาจใช้
UnexpectedContentหรือใช้ประเภทที่รุนแรงกว่าเมื่อพบว่าข้อมูลหรือการจัดรูปแบบได้รับผลกระทบ - ความเข้ากันได้ของรูปแบบ: การบันทึกเป็นรูปแบบงานนำเสนออื่นอาจละเว้นฟีเจอร์หรือทำให้ผลลัพธ์ทำงานแตกต่างในบางแอปพลิเคชัน ตัวอย่างเช่นการบันทึกงานนำเสนอที่มีไกด์การวาดมากกว่าสแปดแนวนอนหรือสแปดแนวตั้งไปยัง PPT รุ่นเก่าจะรายงาน
CompatibilityIssueคอลแบ็กช่วงการบันทึกสามารถบันทึกการสูญเสียและดำเนินต่อ, หรือปฏิเสธหากต้องการเก็บไกด์ทั้งหมด - พฤติกรรมการโหลด: ตัวเลือกการโหลดและพฤติกรรมเก่าสามารถสร้างคำเตือนได้เช่นกัน ตัวอย่างเช่น IObsoletePresLockingBehaviorWarningInfo ระบุการใช้พฤติกรรมการล็อกงานนำเสนอที่ล้าสมัยว่าเป็น
CompatibilityIssue
คำเตือนขึ้นอยู่กับเอกสารต้นทาง, รูปแบบเป้าหมาย, การดำเนินการ, และเวอร์ชันของ Aspose.Slides ไม่ควรสมมติว่าทุกไฟล์จะสร้างคำเตือนหรือว่าฉากใดจะตรงกับเพียงประเภทเดียวเสมอ
จัดการการดำเนินการที่ถูกยกเลิกอย่างปลอดภัย
เมื่อคอลแบ็กคืนค่า ReturnAction.Abort อย่าใช้วัตถุที่โหลดล้มเหลวและอย่ assuming ว่าผลลัพธ์การเรนเดอร์หรือการบันทึกสมบูรณ์ การดำเนินการอาจสิ้นสุดหลังจากสร้างไฟล์ผลลัพธ์แล้วแต่ก่อนที่ไฟล์จะเสร็จสมบูรณ์
บันทึกผลลัพธ์ที่ตรวจสอบแล้วลงในพาธแยกต่างหากเช่น validated-output.pptx แทนที่งานนำเสนอที่มีอยู่เฉพาะหลังจากการดำเนินการสำเร็จสมบูรณ์, รายงานคำเตือนสอดคล้องกับนโยบายแอปพลิเคชัน, และผลลัพธ์สามารถเปิดและตรวจสอบได้ วิธีนี้หลีกเลี่ยงการเขียนทับไฟล์ต้นทางที่ถูกต้องด้วยผลลัพธ์ครึ่งส่วนหรือถูกปฏิเสธ
รายงานคำเตือนว่างเปล่าไม่ใช่การรับประกันว่าฟีเจอร์ทุกอย่างของแหล่งข้อมูลได้ถูกเก็บรักษาไว้ ให้ทำการตรวจสอบเนื้อหาและภาพเพิ่มเติมตามที่แอปพลิเคชันต้องการ ดูเพิ่มเติมที่ Open Presentations และ Save Presentations
คำถามที่พบบ่อย
คอลแบ็กการเตือนสามารถจัดการกับข้อผิดพลาดทุกอย่างของ Aspose.Slides ได้หรือไม่?
ไม่. คอลแบ็กจัดการกับสภาวะที่กู้คืนได้ที่รายงานเป็นคำเตือน ข้อยกเว้นที่เกิดแยกจากคอลแบ็กต้องถูกจัดการโดยแอปพลิเคชันรอบการเรียกโหลด, เรนเดอร์, แปลง หรือบันทึก
การคืนค่า ReturnAction.Continue ให้ผลลัพธ์ที่เหมือนเดิมแน่นอนหรือไม่?
ไม่. การคืนค่านี้เพียงทำให้กระบวนการดำเนินต่อไปได้เท่านั้น สภาวะที่รายงานอาจยังทำให้เกิดความแตกต่างของข้อมูล, การจัดรูปแบบ, หรือความเข้ากันได้ ดังนั้นควรตรวจสอบประเภทและรายละเอียดของคำเตือนที่รวบรวมไว้
แอปพลิเคชันจะระบุการดำเนินการที่สร้างคำเตือนได้อย่างไร?
สร้างอินสแตนซ์คอลแบ็กสำหรับแต่ละการดำเนินการและเก็บขั้นตอนที่กำหนดโดยแอปพลิเคชันพร้อมกับค่าที่คืนจาก getWarningType และ getDescription, ตามตัวอย่างที่แสดง.