กำหนดรูปแบบพรีเซนเทชันต้นฉบับใน Python ผ่าน Java
ภาพรวม
หลังจากโหลดพรีเซนเทชันแล้ว ให้เรียกใช้เมธอด Presentation.getSourceFormat เพื่อกำหนดรูปแบบเดิมของมัน ใช้เมธอดนี้เมื่อการประมวลผลต่อไปขึ้นอยู่กับรูปแบบที่อินสแตนซ์ปัจจุบันถูกโหลดมา
รูปแบบแหล่งที่มานั้นแตกต่างจาก SaveFormat ที่เลือกสำหรับไฟล์ผลลัพธ์ การบันทึกเป็นรูปแบบอื่นจะไม่เปลี่ยนรูปแบบแหล่งที่มาของอินสแตนซ์ที่มีอยู่
ตัวอย่างเหล่านี้ต้องใช้ Aspose.Slides for Python via Java และ Java runtime ที่เข้ากันได้ แต่ละตัวอย่างจะเริ่ม JVM หากยังไม่ได้รันอยู่
อ่านรูปแบบแหล่งที่มาของไฟล์
ตัวอย่างนี้ต้องอ้างอิงไฟล์ sample.pptx ที่มีอยู่แล้ว มันโหลดไฟล์และเลือกนโยบายการประมวลผลของแอปพลิเคชันโดยใช้ Presentation.getSourceFormat แทนการใช้ชื่อไฟล์ เปลี่ยนเส้นทางอินพุตเพื่อทดลองรูปแบบอื่น ตัวอย่างจะแสดงนโยบายที่เลือก; ให้แทนข้อความเหล่านี้ด้วยตรรกะของแอปพลิเคชันของคุณ
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SourceFormat
presentation = Presentation("sample.pptx")
try:
source_format = presentation.getSourceFormat()
if source_format in (SourceFormat.Ppt, SourceFormat.Pps, SourceFormat.Pot):
print("Use the legacy PowerPoint processing policy.")
elif source_format == SourceFormat.Pptx:
print("Use the standard PPTX processing policy.")
else:
print(f"Use the general policy for source format {source_format}.")
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 รับเพียงสตรีม Python อ่านไบต์ไฟล์และ JPype แปลงเป็นอาร์เรย์ไบต์ของ Java สำหรับสตรีมหน่วยความจำของ Java
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from pathlib import Path
from asposeslides.api import Presentation
try:
data = Path("sample.pps").read_bytes()
java_bytes = jpype.JArray(jpype.JByte)(data)
stream = jpype.JClass("java.io.ByteArrayInputStream")(java_bytes)
try:
presentation = Presentation(stream)
try:
print(f"Source format: {presentation.getSourceFormat()}")
finally:
presentation.dispose()
finally:
stream.close()
except OSError as exception:
print(f"Cannot read the presentation: {exception}")
PPT, PPS และ POT ใช้รูปแบบไบนารีพื้นฐานเดียวกัน เมื่อโหลดโดยพาธไฟล์ ส่วนต่อขยายสามารถช่วยแยกสไลด์โชว์หรือเทมเพลตได้ หากไม่มีชื่อไฟล์ เนื้อหา PPS และ POT รุ่นเก่าอาจถูกระบุเป็น SourceFormat.Ppt; ตัวอย่าง PPS ด้านบนพิมพ์ค่าจำนวนเต็มของ SourceFormat.Ppt
หากแอปพลิเคชันของคุณต้องคงความแตกต่างนี้ไว้ ควรเก็บชื่อไฟล์ดั้งเดิมหรือเมตาดาต้าย่อยแยกต่างหาก ส่วนต่อขยายเป็นข้อมูลบ่งชี้ที่มีประโยชน์สำหรับย่อยแบบเก่าเหล่านี้ แต่ไม่ควรเป็นฐานเดียวในการระบุเนื้อหาพรีเซนเทชันใด ๆ
เปรียบเทียบการตรวจจับก่อนและหลังการโหลด
ใช้ PresentationFactory.getPresentationInfo และ PresentationInfo.getLoadFormat เมื่อคุณต้องตรวจสอบไฟล์ก่อนที่จะโหลดโมเดลออบเจ็กต์พรีเซนเทชันอย่างเต็มรูปแบบ ใช้ Presentation.getSourceFormat เมื่ออินสแตนซ์มีอยู่แล้ว
ตัวอย่างนี้ต้องอ้างอิง sample.pptx และพิมพ์ค่าจำนวนเต็มของ LoadFormat.Pptx และ SourceFormat.Pptx ตามลำดับ ในการผลิต ให้เลือก API ที่เหมาะสมกับขั้นตอนการประมวลผลของคุณ; พรีเซนเทชันที่โหลดแล้วไม่จำเป็นต้องตรวจสอบครั้งที่สองเพื่อรับรูปแบบแหล่งที่มา
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, PresentationFactory
path = "sample.pptx"
information = PresentationFactory.getInstance().getPresentationInfo(path)
print(f"Before loading: {information.getLoadFormat()}")
presentation = Presentation(path)
try:
print(f"After loading: {presentation.getSourceFormat()}")
finally:
presentation.dispose()
ผลลัพธ์ใช้ค่าคงที่จากคลาสต่างกัน: LoadFormat และ SourceFormat อย่าเปรียบเทียบค่าจำนวนเต็มของพวกมันหรือสันนิษฐานว่าทุกรูปแบบมีผลการตรวจจับที่เหมือนกัน PowerPoint XML อาจรายงานเป็น LoadFormat.Unknown ก่อนโหลด และ SourceFormat.Xml หลังโหลด
แยกแยะรูปแบบแหล่งที่มาและรูปแบบผลลัพธ์
ตัวอย่างนี้ต้องอ้างอิง sample.pptx และเขียนไฟล์ converted.odp มันพิมพ์ค่าจำนวนเต็มของ SourceFormat.Pptx ทั้งก่อนและหลังบันทึกอินสแตนซ์เดิม เฉพาะอินสแตนซ์ใหม่ที่โหลดจากผลลัพธ์ ODP เท่านั้นที่รายงาน Odp
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat
presentation = Presentation("sample.pptx")
try:
print(f"Before saving: {presentation.getSourceFormat()}")
presentation.save("converted.odp", SaveFormat.Odp)
print(f"After saving: {presentation.getSourceFormat()}")
reopened = Presentation("converted.odp")
try:
print(f"Reopened output: {reopened.getSourceFormat()}")
finally:
reopened.dispose()
finally:
presentation.dispose()
พรีเซนเทชันที่สร้างจากศูนย์ด้วย Presentation() รายงาน SourceFormat.Pptx เนื่องจากไม่มีไฟล์อินพุต: นี่คือค่าดีฟอลต์สำหรับอินสแตนซ์ที่สร้างใหม่ ไม่ได้เป็นหลักฐานว่ามีการโหลดไฟล์ PPTX ติดตามว่าแอปพลิเคชันของคุณสร้างหรือโหลดอินสแตนซ์แยกต่างหากหากความแตกต่างนี้สำคัญ
แมปรูปแบบแหล่งที่มาเป็นส่วนขยาย
ตัวอย่างต่อไปนี้ต้องอ้างอิง sample.pptx มันแมปค่า SourceFormat ที่รองรับทุกค่าปัจจุบันเป็นส่วนขยายแบบทั่วไปโดยไม่ต้องพิเคราะห์ชื่อไฟล์อินพุต การสำรองค่าจะหลีกเลี่ยงการกำหนดส่วนขยายให้กับค่าที่ไม่รู้จักโดยเงียบ
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SourceFormat
extensions = {
SourceFormat.Ppt: ".ppt",
SourceFormat.Pptx: ".pptx",
SourceFormat.Pptm: ".pptm",
SourceFormat.Pps: ".pps",
SourceFormat.Ppsx: ".ppsx",
SourceFormat.Ppsm: ".ppsm",
SourceFormat.Pot: ".pot",
SourceFormat.Potx: ".potx",
SourceFormat.Potm: ".potm",
SourceFormat.Odp: ".odp",
SourceFormat.Otp: ".otp",
SourceFormat.Fodp: ".fodp",
SourceFormat.Xml: ".xml",
}
presentation = Presentation("sample.pptx")
try:
extension = extensions.get(presentation.getSourceFormat())
print(extension if extension is not None else "No extension mapping is available.")
finally:
presentation.dispose()
การแมปนี้ไม่ได้แปลงไฟล์หรือกู้คืนย่อย PPS/POT รุ่นเก่าที่สูญหายระหว่างการโหลดสตรีม สำหรับการบันทึกจริง ให้เลือก SaveFormat อย่างชัดเจน หรือใช้การแปลงที่แสดงใน Save Presentations in Their Original Format
ยืนยันรูปแบบโดยการบันทึกและเปิดใหม่
ตัวอย่างแบบสแตนด์อโลนนี้สร้างพรีเซนเทชันและเขียนไฟล์สามไฟล์ในไดเรกทอรีทำงาน ทับไฟล์ที่มีชื่อเดียวกันใหม่ ทั้งหมดจะเปิดผลลัพธ์แต่ละไฟล์ใหม่โดยพาธและโดยสตรีมหน่วยความจำ สำหรับ PPTX และ ODP ทั้งสองวิธีจะรายงานรูปแบบที่บันทึกไว้ สำหรับ PPS การโหลดโดยพาธรายงาน Pps ขณะที่การโหลดไบต์เดียวกันโดยไม่มีชื่อไฟล์รายงาน Ppt
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from pathlib import Path
from asposeslides.api import Presentation, SaveFormat
presentation = Presentation()
try:
formats = [
(SaveFormat.Pptx, "pptx"),
(SaveFormat.Odp, "odp"),
(SaveFormat.Pps, "pps"),
]
for save_format, extension in formats:
path = f"roundtrip.{extension}"
presentation.save(path, save_format)
from_file = Presentation(path)
try:
data = Path(path).read_bytes()
java_bytes = jpype.JArray(jpype.JByte)(data)
stream = jpype.JClass("java.io.ByteArrayInputStream")(java_bytes)
try:
from_stream = Presentation(stream)
try:
print(f"{extension}: file={from_file.getSourceFormat()}, stream={from_stream.getSourceFormat()}")
finally:
from_stream.dispose()
finally:
stream.close()
finally:
from_file.dispose()
except OSError as exception:
print(f"Cannot read a saved presentation: {exception}")
finally:
presentation.dispose()
| รูปแบบที่บันทึก | 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 ใช้รูปแบบไบนารีเดียวกัน เก็บชื่อไฟล์หรือเมตาดาต้าย่อยแยกต่างหากเมื่อความแตกต่างนี้จำเป็น
ควรใช้ API ใดหากพรีเซนเทชันถูกโหลดแล้ว?
อ่าน Presentation.getSourceFormat ใช้ PresentationFactory.getPresentationInfo เพื่อทำการตรวจสอบก่อนโหลด