ระบุรูปแบบการนำเสนอดั้งเดิมบน Android
ภาพรวม
หลังจากโหลดการนำเสนอ ให้เรียกเมธอด Presentation.getSourceFormat เพื่อระบุรูปแบบดั้งเดิมของไฟล์ เมธอดนี้ยังสามารถใช้ผ่าน IPresentation.getSourceFormat ได้เช่นกัน ใช้เมธอดนี้เมื่อการประมวลผลต่อไปอาศัยรูปแบบที่ไฟล์ต้นฉบับถูกโหลดมา
รูปแบบต้นฉบับแตกต่างจาก SaveFormat ที่เลือกสำหรับไฟล์ผลลัพธ์ การบันทึกเป็นรูปแบบอื่นจะไม่เปลี่ยนรูปแบบต้นฉบับของอ็อบเจ็กต์ที่มีอยู่แล้ว
ตัวอย่างใช้ Java และเส้นทางไฟล์ บน Android ให้เปลี่ยนเส้นทางตัวอย่างเป็นเส้นทางที่อยู่ในที่เก็บข้อมูลที่แอปเข้าถึงได้ เช่น ไดเร็กทอรีไฟล์ภายในของแอป
อ่านรูปแบบต้นฉบับของไฟล์
ตัวอย่างนี้ต้องมีไฟล์ sample.pptx อยู่แล้ว จะโหลดไฟล์และเลือกนโยบายการประมวลผลของแอปโดยใช้ Presentation.getSourceFormat แทนการอ้างอิงชื่อไฟล์ เปลี่ยนเส้นทางเข้าเพื่อทดสอบรูปแบบอื่น ตัวอย่างจะพิมพ์นโยบายที่เลือก; สามารถแทนข้อความเหล่านี้ด้วยตรรกะของแอปของคุณได้
import com.aspose.slides.Presentation;
import com.aspose.slides.SourceFormat;
Presentation presentation = new Presentation("sample.pptx");
try {
switch (presentation.getSourceFormat()) {
case SourceFormat.Ppt:
case SourceFormat.Pps:
case SourceFormat.Pot:
System.out.println("Use the legacy PowerPoint processing policy.");
break;
case SourceFormat.Pptx:
System.out.println("Use the standard PPTX processing policy.");
break;
default:
System.out.println("Use the general policy for source format " + presentation.getSourceFormat() + ".");
break;
}
} finally {
presentation.dispose();
}
รับรู้ค่าที่ได้รับการสนับสนุน
คลาส SourceFormat กำหนดค่าคงที่จำนวนเต็มที่แยกความแตกต่างของรูปแบบการนำเสนอด้านล่าง ส่วนขยายต่อไปนี้เป็นส่วนขยายที่เป็นมาตรฐาน ไม่ได้เป็นการสร้างใหม่จากชื่อไฟล์ต้นฉบับ
| ค่า SourceFormat | นามสกุล | รูปแบบ |
|---|---|---|
Ppt |
.ppt |
การนำเสนอ PowerPoint 97–2003 |
Pptx |
.pptx |
การนำเสนอ Office Open XML |
Pptm |
.pptm |
การนำเสนอ Office Open XML ที่เปิดใช้งานมาโคร |
Pps |
.pps |
การแสดงสไลด์ PowerPoint 97–2003 |
Ppsx |
.ppsx |
การแสดงสไลด์ Office Open XML |
Ppsm |
.ppsm |
การแสดงสไลด์ Office Open XML ที่เปิดใช้งานมาโคร |
Pot |
.pot |
เทมเพลต PowerPoint 97–2003 |
Potx |
.potx |
เทมเพลต Office Open XML |
Potm |
.potm |
เทมเพลต Office Open XML ที่เปิดใช้งานมาโคร |
Odp |
.odp |
การนำเสนอ OpenDocument |
Otp |
.otp |
เทมเพลตการนำเสนอ OpenDocument |
Fodp |
.fodp |
การนำเสนอ Flat XML ODF |
Xml |
.xml |
การนำเสนอ PowerPoint XML |
อ่านรูปแบบต้นฉบับจากสตรีม
ตัวอย่างนี้ต้องมีไฟล์ sample.pps อยู่แล้ว การอ่านไบต์ของไฟล์เข้าสู่สตรีมหน่วยความจำจำลองการรับข้อมูลโดยไม่มีชื่อไฟล์ เช่น ค่าจากฐานข้อมูลหรืออาเรย์ไบต์ที่อัปโหลด ตัวสร้าง Presentation จะรับสตรีมเท่านั้น
import com.aspose.slides.Presentation;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
try {
byte[] bytes;
try (FileInputStream input = new FileInputStream("sample.pps");
ByteArrayOutputStream output = new ByteArrayOutputStream()) {
byte[] buffer = new byte[8192];
int bytesRead;
while ((bytesRead = input.read(buffer)) != -1) {
output.write(buffer, 0, bytesRead);
}
bytes = output.toByteArray();
}
try (ByteArrayInputStream stream = new ByteArrayInputStream(bytes)) {
Presentation presentation = new Presentation(stream);
try {
System.out.println("Source format: " + presentation.getSourceFormat());
} finally {
presentation.dispose();
}
}
} catch (IOException exception) {
System.err.println("Cannot read the presentation: " + exception.getMessage());
}
PPT, PPS และ POT ใช้รูปแบบไบนารีพื้นฐานเดียวกัน เมื่อโหลดโดยเส้นทางไฟล์ ส่วนขยายสามารถช่วยแยกความแตกต่างระหว่างการแสดงสไลด์หรือเทมเพลตได้ หากไม่มีชื่อไฟล์ เนื้อหา PPS หรือ POT แบบเก่าอาจถูกรายงานเป็น SourceFormat.Ppt; ตัวอย่าง PPS ด้านบนพิมพ์ค่าจำนวนเต็มของ SourceFormat.Ppt
หากแอปของคุณต้องการรักษาความแตกต่างไว้ ให้เก็บชื่อไฟล์ต้นฉบับหรือข้อมูลเมตา subtype แยกกัน ส่วนขยายเป็นเคล็ดลับที่มีประโยชน์สำหรับ subtype แบบเก่าเหล่านี้ แต่ไม่ควรใช้เป็นเกณฑ์เดียวในการระบุเนื้อหาการนำเสนอใด ๆ
เปรียบเทียบการตรวจจับก่อนและหลังการโหลด
ใช้ PresentationFactory.getPresentationInfo และ IPresentationInfo.getLoadFormat เมื่อต้องการตรวจสอบไฟล์ก่อนที่จะโหลดโมเดลอ็อบเจ็กต์การนำเสนอเต็มรูปแบบ ใช้ Presentation.getSourceFormat เมื่ออ็อบเจ็กต์มีอยู่แล้ว
ตัวอย่างนี้ต้องมี sample.pptx และพิมพ์ค่าจำนวนเต็มของ LoadFormat.Pptx และ SourceFormat.Pptx ตามลำดับ ในสภาพการผลิต ให้เลือก API ที่เหมาะสมกับขั้นตอนการประมวลผลของคุณ; การนำเสนอที่โหลดแล้วไม่จำเป็นต้องตรวจสอบสองครั้งเพียงเพื่อรับรูปแบบต้นฉบับ
import com.aspose.slides.Presentation;
import com.aspose.slides.IPresentationInfo;
import com.aspose.slides.PresentationFactory;
String path = "sample.pptx";
IPresentationInfo information = PresentationFactory.getInstance().getPresentationInfo(path);
System.out.println("Before loading: " + information.getLoadFormat());
Presentation presentation = new Presentation(path);
try {
System.out.println("After loading: " + presentation.getSourceFormat());
} finally {
presentation.dispose();
}
ผลลัพธ์ใช้ค่าคงที่จากคลาสต่าง ๆ: LoadFormat และ SourceFormat อย่าทำการเปรียบเทียบค่าตัวเลขของพวกมันหรือสมมติว่าทุกรูปแบบมีผลการตรวจจับที่เหมือนกัน PowerPoint XML อาจถูกรายงานเป็น LoadFormat.Unknown ก่อนโหลดและเป็น SourceFormat.Xml หลังโหลด
แยกรูปแบบต้นฉบับและรูปแบบผลลัพธ์ออกจากกัน
ตัวอย่างนี้ต้องมี sample.pptx และจะเขียน converted.odp ตัวอย่างจะพิมพ์ค่าจำนวนเต็มของ SourceFormat.Pptx ทั้งก่อนและหลังการบันทึกอ็อบเจ็กต์ต้นฉบับ ตัวอ็อบเจ็กต์ใหม่ที่โหลดจากไฟล์ ODP ผลลัพธ์จะรายงานเป็น Odp
import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;
Presentation presentation = new Presentation("sample.pptx");
try {
System.out.println("Before saving: " + presentation.getSourceFormat());
presentation.save("converted.odp", SaveFormat.Odp);
System.out.println("After saving: " + presentation.getSourceFormat());
Presentation reopened = new Presentation("converted.odp");
try {
System.out.println("Reopened output: " + reopened.getSourceFormat());
} finally {
reopened.dispose();
}
} finally {
presentation.dispose();
}
การสร้างการนำเสนอจากศูนย์ด้วย new Presentation() จะรายงาน SourceFormat.Pptx เนื่องจากไม่มีไฟล์อินพุต: นี่คือค่าตั้งต้นสำหรับอ็อบเจ็กต์ที่สร้างใหม่ ไม่ได้หมายความว่ามีการโหลดไฟล์ PPTX ติดตามว่าการสร้างหรือการโหลดอ็อบเจ็กต์เกิดขึ้นแยกจากกันหากความแตกต่างนั้นมีความสำคัญ
แมพรูปแบบต้นฉบับเป็นนามสกุลไฟล์
ตัวอย่างต่อไปนี้ต้องมี sample.pptx จะแมพค่าทั้งหมดของ SourceFormat ที่สนับสนุนในปัจจุบันเป็นนามสกุลแบบมาตรฐาน โดยไม่ต้องพาร์สชื่อไฟล์อินพุต การแมพสำรองนี้ช่วยหลีกเลี่ยงการกำหนดนามสกุลโดยอัตโนมัติให้กับค่าที่ไม่รู้จัก
import com.aspose.slides.Presentation;
import com.aspose.slides.SourceFormat;
Presentation presentation = new Presentation("sample.pptx");
try {
String extension;
switch (presentation.getSourceFormat()) {
case SourceFormat.Ppt:
extension = ".ppt";
break;
case SourceFormat.Pptx:
extension = ".pptx";
break;
case SourceFormat.Pptm:
extension = ".pptm";
break;
case SourceFormat.Pps:
extension = ".pps";
break;
case SourceFormat.Ppsx:
extension = ".ppsx";
break;
case SourceFormat.Ppsm:
extension = ".ppsm";
break;
case SourceFormat.Pot:
extension = ".pot";
break;
case SourceFormat.Potx:
extension = ".potx";
break;
case SourceFormat.Potm:
extension = ".potm";
break;
case SourceFormat.Odp:
extension = ".odp";
break;
case SourceFormat.Otp:
extension = ".otp";
break;
case SourceFormat.Fodp:
extension = ".fodp";
break;
case SourceFormat.Xml:
extension = ".xml";
break;
default:
extension = null;
break;
}
System.out.println(extension != null ? extension : "No extension mapping is available.");
} finally {
presentation.dispose();
}
การแมพนี้ไม่ได้แปลงไฟล์หรือกู้คืน subtype PPS/POT แบบเก่าที่หายไประหว่างการโหลดสตรีม สำหรับการบันทึกจริง ให้เลือก SaveFormat อย่างชัดเจน หรือใช้การแปลงที่แสดงใน Save Presentations in Their Original Format
ตรวจสอบรูปแบบโดยการบันทึกและเปิดใหม่
ตัวอย่างแบบอิสระนี้สร้างการนำเสนอและเขียนไฟล์สามไฟล์ในไดเร็กทอรีทำงาน โดยเขียนทับไฟล์ที่มีชื่อเดียวกัน จะเปิดไฟล์ผลลัพธ์แต่ละไฟล์ทั้งโดยเส้นทางและผ่านสตรีมหน่วยความจำ สำหรับ PPTX และ ODP ทั้งสองวิธีจะรายงานรูปแบบที่บันทึกไว้ สำหรับ PPS การโหลดโดยเส้นทางจะรายงาน Pps ส่วนการโหลดไบต์เดียวกันโดยไม่มีชื่อไฟล์จะรายงาน Ppt
import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
Presentation presentation = new Presentation();
try {
int[] formats = { SaveFormat.Pptx, SaveFormat.Odp, SaveFormat.Pps };
String[] extensions = { "pptx", "odp", "pps" };
for (int i = 0; i < formats.length; i++) {
String path = "roundtrip." + extensions[i];
presentation.save(path, formats[i]);
Presentation fromFile = new Presentation(path);
try {
byte[] bytes;
try (FileInputStream input = new FileInputStream(path);
ByteArrayOutputStream output = new ByteArrayOutputStream()) {
byte[] buffer = new byte[8192];
int bytesRead;
while ((bytesRead = input.read(buffer)) != -1) {
output.write(buffer, 0, bytesRead);
}
bytes = output.toByteArray();
}
try (ByteArrayInputStream stream = new ByteArrayInputStream(bytes)) {
Presentation fromStream = new Presentation(stream);
try {
System.out.println(extensions[i] + ": file=" + fromFile.getSourceFormat() + ", stream=" + fromStream.getSourceFormat());
} finally {
fromStream.dispose();
}
}
} finally {
fromFile.dispose();
}
}
} catch (IOException exception) {
System.err.println("Cannot read a saved presentation: " + exception.getMessage());
} finally {
presentation.dispose();
}
ตารางต่อไปสรุปการระบุรูปแบบต้นฉบับสำหรับการนำเสนอที่มีนามสกุลตรงกัน ชื่อแสดงค่าคงที่; ตัวอย่าง Java พิมพ์ค่าจำนวนเต็มของพวกมัน:
| รูปแบบที่บันทึก | SourceFormat จากเส้นทางไฟล์ | SourceFormat จากสตรีมที่ไม่มีชื่อ |
|---|---|---|
| PPT | Ppt |
Ppt |
| PPTX, PPTM | Pptx, Pptm ตามลำดับ |
เหมือนกับเส้นทางไฟล์ |
| PPS | Pps |
Ppt |
| PPSX, PPSM | Ppsx, Ppsm ตามลำดับ |
เหมือนกับเส้นทางไฟล์ |
| POT | Pot |
Ppt |
| POTX, POTM | Potx, Potm ตามลำดับ |
เหมือนกับเส้นทางไฟล์ |
| ODP, OTP | Odp, Otp ตามลำดับ |
เหมือนกับเส้นทางไฟล์ |
| FODP | Fodp |
Fodp |
| PowerPoint XML | Xml |
Xml |
เนื้อหา PPS/POT จะถูกระบุเป็น Ppt สำหรับสตรีมที่ไม่มีชื่อ ตารางนี้อธิบายการระบุรูปแบบ ไม่ได้หมายถึงการรักษาคุณลักษณะทุกอย่างของการนำเสนอระหว่างการแปลง
คำถามที่พบบ่อย
การบันทึกเป็น ODP จะเปลี่ยนรูปแบบต้นฉบับของการนำเสนอที่โหลดจาก PPTX หรือไม่?
ไม่ รายการอ็อบเจ็กต์ที่มีอยู่ยังคงรายงาน Pptx ส่วนอ็อบเจ็กต์ที่โหลดจากไฟล์ ODP ที่บันทึกแล้วจะรายงาน Odp
สตรีมสามารถแยกความแตกต่างระหว่างการนำเสนอแบบเก่า การแสดงสไลด์ และเทมเพลตได้เสมอหรือไม่?
ไม่ PPT, PPS และ POT ใช้รูปแบบไบนารีเดียวกัน ให้เก็บชื่อไฟล์หรือข้อมูลเมตา subtype แยกกันเมื่อจำเป็นต้องแยกความแตกต่างเหล่านี้
ควรใช้ API ใดหากการนำเสนอถูกโหลดแล้ว?
อ่าน Presentation.getSourceFormat ใช้ PresentationFactory.getPresentationInfo สำหรับการตรวจสอบก่อนโหลด