จัดการแท็กและข้อมูลกำหนดเองในงานนำเสนอด้วย Python
ภาพรวม
บทความนี้อธิบายวิธีที่ Aspose.Slides ทำงานกับแท็กและข้อมูลที่กำหนดเองในงานนำเสนอ PowerPoint ข้อมูลเฉพาะของงานนำเสนอสามารถจัดเก็บเป็นแท็กหรือส่วน XML กำหนดเองได้ แท็กเป็นคู่คีย์‑ค่าแบบสตริงที่ง่าย ในขณะที่ส่วน XML กำหนดเองสามารถเก็บเมตาดาต้าแบบมีโครงสร้างและข้อมูล XML เฉพาะแอปพลิเคชันได้
Aspose.Slides มี API สำหรับการเพิ่ม, อ่าน, ปรับปรุง, ตรวจสอบและลบส่วน XML กำหนดเองในระดับงานนำเสนอ, สไลด์และรูปร่าง ส่วน XML กำหนดเองมีประโยชน์สำหรับการรวมที่ต้องจัดเก็บข้อมูลเช่น ตัวระบุการจัดการเอกสาร, สถานะเวิร์กโฟลว์, เมตาดาต้าตามข้อกำหนด, ข้อมูลการผูกเทมเพลต หรือข้อมูลแอปพลิเคชันที่มีโครงสร้างอื่น ๆ ภายในงานนำเสนอ
การจัดเก็บข้อมูลในไฟล์งานนำเสนอ
ไฟล์ PPTX — ไฟล์ที่มีนามสกุล .pptx — จะถูกเก็บในรูปแบบ PresentationML ซึ่งเป็นส่วนหนึ่งของสเปค Office Open XML Office Open XML กำหนดโครงสร้างแพ็กเกจและความสัมพันธ์ที่ใช้เก็บเนื้อหางานนำเสนอและข้อมูลที่เกี่ยวข้อง
งานนำเสนอประกอบด้วยหลายส่วนที่เชื่อมต่อกันด้วยความสัมพันธ์ ตัวอย่างเช่น ส่วนสไลด์จะบรรจุเนื้อหาของสไลด์เดียวและอาจมีความสัมพันธ์อย่างชัดเจนกับส่วนอื่น ๆ ตามที่กำหนดโดย ISO/IEC 29500
ข้อมูลกำหนดเองสามารถจัดเก็บเป็นแท็ก (TagCollection) หรือส่วน XML กำหนดเอง (CustomXmlPartCollection) ทั้งสองแบบใช้ได้ผ่านคลาส CustomData
ทำงานกับส่วน XML กำหนดเอง
คุณสมบัติ CustomData.custom_xml_parts คืนค่าคอลเลกชันของส่วน XML กำหนดเองที่เชื่อมโยงกับวัตถุงานนำเสนอเฉพาะ ตัวอย่างเช่น:
presentation.custom_data.custom_xml_partsมีส่วน XML กำหนดเองที่เชื่อมโยงกับงานนำเสนอเองslide.custom_data.custom_xml_partsมีส่วน XML กำหนดเองที่เชื่อมโยงกับสไลด์เฉพาะshape.custom_data.custom_xml_partsมีส่วน XML กำหนดเองที่เชื่อมโยงกับรูปร่างเฉพาะ
ใช้ Presentation.all_custom_xml_parts เมื่อต้องการตรวจสอบส่วน XML กำหนดเองทั้งหมดในงานนำเสนอโดยไม่คำนึงว่ามันเชื่อมโยงกับวัตถุใด
เพิ่มส่วน XML กำหนดเองไปยังงานนำเสนอ
ใช้ CustomXmlPartCollection.add เพื่อเพิ่มข้อมูล XML ไปยังคอลเลกชันส่วน XML กำหนดเอง XML ต้องเป็นที่ถูกต้องและไม่ว่างเปล่า
ตัวอย่างต่อไปนี้เพิ่มเมตาดาต้าแบบมีโครงสร้างไปยังคอลเลกชันข้อมูลกำหนดเองระดับงานนำเสนอ:
import uuid
import aspose.slides as slides
custom_xml_content = (
'<?xml version="1.0" encoding="UTF-8"?>'
'<metadata xmlns="urn:example:metadata">'
'<documentId>DOC-1001</documentId>'
'<workflowState>Draft</workflowState>'
'</metadata>'
)
with slides.Presentation() as presentation:
custom_xml_part = presentation.custom_data.custom_xml_parts.add(custom_xml_content)
# การเพิ่มจะกำหนดตัวระบุโดยอัตโนมัติ ตั้งค่า GUID เฉพาะเมื่อต้องการเท่านั้น.
presentation.save("presentation_with_custom_xml.pptx", slides.export.SaveFormat.PPTX)
เมธอด add ยังรับ XML ในรูปแบบอาเรย์ไบต์หรือสตรีมได้ ซึ่งมีประโยชน์เมื่อเนื้อหา XML มีอยู่แล้วในรูปไบต์
เพิ่มส่วน XML กำหนดเองไปยังสไลด์หรือรูปร่าง
ข้อมูล XML กำหนดเองสามารถเชื่อมโยงกับสไลด์หรือรูปร่างเฉพาะแทนการเชื่อมโยงกับงานนำเสนอทั้งหมด ซึ่งมีประโยชน์เมื่อเมตาดาต้าอธิบายเพียงอ็อบเจ็กต์เดียว เช่น คีย์เทมเพลต, ตัวระบุบันทึกภายนอก หรือข้อมูลการผูก
ตัวอย่างต่อไปนี้เพิ่มส่วน XML กำหนดเองหนึ่งส่วนไปยังสไลด์และอีกส่วนหนึ่งไปยังรูปร่าง:
import aspose.slides as slides
with slides.Presentation() as presentation:
slide = presentation.slides[0]
slide.custom_data.custom_xml_parts.add(
'<slideMetadata xmlns="urn:example:slides">'
'<templateKey>TitleSlide</templateKey>'
'</slideMetadata>'
)
shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 50, 50, 250, 80)
shape.text_frame.text = "Customer data"
shape.custom_data.custom_xml_parts.add(
'<shapeMetadata xmlns="urn:example:shapes">'
'<recordId>CRM-4281</recordId>'
'</shapeMetadata>'
)
presentation.save("object_custom_xml.pptx", slides.export.SaveFormat.PPTX)
ระดับที่ส่วนถูกเพิ่มจะกำหนดว่าคอลเลกชัน custom_data.custom_xml_parts ของอ็อบเจ็กต์ใดบรรจุความสัมพันธ์กับส่วนนั้น ข้อมูลระดับงานนำเสนอเหมาะสำหรับเมตาดาต้าทั่วเอกสาร, ข้อมูลระดับสไลด์สำหรับข้อมูลที่เป็นของสไลด์นั้น ๆ, และข้อมูลระดับรูปร่างสำหรับเมตาดาต้าที่เชื่อมโยงกับรูปร่างเฉพาะ
แสดงรายการและตรวจสอบส่วน XML กำหนดเองทั้งหมด
ใช้ Presentation.all_custom_xml_parts เพื่อดึงส่วน XML กำหนดเองทั้งหมดจากงานนำเสนอ แต่ละ CustomXmlPart จะเปิดเผยตัวระบุ, เนื้อหา XML และสคีมเนมสเปซที่เชื่อมโยง
ตัวอย่างต่อไปนี้แสดงรายการส่วน XML กำหนดเองทั้งหมดพร้อมสคีมเนมสเปซ:
import aspose.slides as slides
with slides.Presentation("presentation.pptx") as presentation:
for custom_xml_part in presentation.all_custom_xml_parts:
print("ItemId: " + str(custom_xml_part.item_id))
print("XML:")
print(custom_xml_part.xml_as_string)
for namespace_schema in custom_xml_part.namespace_schemas:
print("Namespace schema: " + namespace_schema)
print()
CustomXmlPart.namespace_schemas คืนค่าสคีม XML ที่เชื่อมโยงกับส่วน XML กำหนดเอง ข้อมูลนี้อาจมีประโยชน์เมื่อตรวจสอบงานนำเสนอที่มี XML มาจากระบบภายนอก
อ่านและอัปเดตเนื้อหา XML และ ItemId
ใช้ CustomXmlPart.xml_as_string เพื่อทำงานกับ XML เป็นสตริง UTF‑8 หรือใช้ CustomXmlPart.xml_data เพื่อทำงานกับไบต์ XML ดิบ ทั้งสองคุณสมบัติเสนอการอ่านและอัปเดตได้
คุณสมบัติ CustomXmlPart.item_id มี GUID ที่ระบุส่วน XML กำหนดเองในเอกสาร Office Open XML สามารถเปลี่ยนได้เมื่อการบูรณาการต้องการตัวระบุใหม่
ตัวอย่างต่อไปนี้อัปเดตเนื้อหา XML และตัวระบุ:
import uuid
import aspose.slides as slides
with slides.Presentation("presentation.pptx") as presentation:
custom_xml_part = presentation.all_custom_xml_parts[0]
# อ่าน XML ปัจจุบันเป็นข้อความ.
current_xml_content = custom_xml_part.xml_as_string
print(current_xml_content)
# อัปเดต XML เป็นสตริง UTF-8.
custom_xml_part.xml_as_string = (
'<metadata xmlns="urn:example:metadata">'
'<documentId>DOC-1001</documentId>'
'<workflowState>Approved</workflowState>'
'</metadata>'
)
# xml_data ให้เนื้อหา XML เดียวกันเป็นไบต์ดิบ.
custom_xml_data = custom_xml_part.xml_data
print(custom_xml_data.decode("utf-8"))
# แทนที่ตัวระบุเมื่อต้องการโดยการบูรณาการ.
custom_xml_part.item_id = uuid.uuid4()
presentation.save("updated_custom_xml.pptx", slides.export.SaveFormat.PPTX)
เมื่อกำหนด xml_as_string หรือ xml_data ให้ใช้ XML ที่ถูกต้องและไม่ว่างเปล่า ใช้แบบใดแบบหนึ่งตามว่าการประมวลผลของแอปพลิเคชันทำงานกับสตริงหรือไบต์เป็นหลัก
ลบส่วน XML กำหนดเอง
Aspose.Slides มีวิธีลบข้อมูล XML กำหนดเองหลายวิธี:
CustomXmlPart.removeลบส่วน XML กำหนดเองจากงานนำเสนอCustomXmlPartCollection.removeลบส่วนเฉพาะจากคอลเลกชันส่วน XML กำหนดเองCustomXmlPartCollection.remove_atลบส่วนที่ตำแหน่งดัชนีที่กำหนดในคอลเลกชันCustomXmlPartCollection.clearลบทุกส่วนจากคอลเลกชันที่ระบุ
ตัวอย่างต่อไปนี้ลบส่วน XML กำหนดเองระดับงานนำเสนอหนึ่งส่วนโดยอ้างอิง:
import aspose.slides as slides
with slides.Presentation("presentation.pptx") as presentation:
custom_xml_parts = presentation.custom_data.custom_xml_parts
if len(custom_xml_parts) > 0:
custom_xml_part = custom_xml_parts[0]
custom_xml_parts.remove(custom_xml_part)
presentation.save("custom_xml_removed.pptx", slides.export.SaveFormat.PPTX)
หากคุณมี CustomXmlPart อยู่แล้วและต้องการลบส่วนนั้นจากงานนำเสนอแทนการอ้างอิงคอลเลกชันใด ๆ ให้เรียก custom_xml_part.remove()
คุณยังสามารถลบรายการโดยดัชนีได้:
presentation.custom_data.custom_xml_parts.remove_at(0)
ลบส่วน XML กำหนดเองทั้งหมดจากคอลเลกชัน
ใช้ clear เมื่อส่วน XML กำหนดเองทั้งหมดที่เชื่อมโยงกับอ็อบเจ็กต์งานนำเสนอใดงานนำเสนอหนึ่งควรถูกลบ
import aspose.slides as slides
with slides.Presentation("presentation.pptx") as presentation:
presentation.slides[0].custom_data.custom_xml_parts.clear()
presentation.save("slide_custom_xml_cleared.pptx", slides.export.SaveFormat.PPTX)
clear มีผลต่อคอลเลกชันที่เลือกเท่านั้น ตัวอย่างเช่น การล้างคอลเลกชันของสไลด์ไม่ทำให้คอลเลกชันระดับงานนำเสนอหรือระดับรูปร่างถูกล้าง
เพื่อลบส่วน XML กำหนดเองทั้งหมดในงานนำเสนอ ให้วนลูปผ่าน all_custom_xml_parts แล้วลบแต่ละส่วน:
import aspose.slides as slides
with slides.Presentation("presentation.pptx") as presentation:
for custom_xml_part in presentation.all_custom_xml_parts:
custom_xml_part.remove()
presentation.save("all_custom_xml_removed.pptx", slides.export.SaveFormat.PPTX)
จัดการส่วน XML กำหนดเองที่เชื่อมโยงหรือใช้ร่วมกัน
ในงานนำเสนอ Office Open XML ส่วน XML กำหนดเองเดียวกันอาจถูกอ้างอิงจากอ็อบเจ็กต์งานนำเสนอหลายตัว ตัวอย่างเช่น ไฟล์ที่มีอยู่แล้วอาจมีความสัมพันธ์จากหลายสไลด์หรือรูปร่างไปยังส่วน XML กำหนดเองเดียวกัน
ส่วนที่ใช้ร่วมควรถือเป็นอ็อบเจ็กต์ข้อมูลเดียวกับการอ้างอิงหลายครั้ง:
- การอัปเดต
xml_as_string,xml_dataหรือitem_idจะเปลี่ยนส่วน XML กำหนดเองพื้นฐาน ดังนั้นการเปลี่ยนแปลงจะส่งผลทุกที่ที่ส่วนนั้นถูกอ้างอิง item_idสามารถใช้ระบุส่วน XML กำหนดเองเดียวกันขณะตรวจสอบคอลเลกชันระดับอ็อบเจ็กต์- การลบส่วนจากคอลเลกชัน
custom_xml_partsเฉพาะจะลบออกจากคอลเลกชันนั้น ใช้CustomXmlPart.remove()เมื่อส่วนนั้นควรถูกลบจากงานนำเสนอทั้งหมด - ก่อนลบหรือแทนที่ส่วนที่ใช้ร่วม ควรตรวจสอบคอลเลกชันระดับอ็อบเจ็กต์เพื่อดูว่ายังมีสไลด์หรือรูปร่างอื่นอ้างอิงอยู่หรือไม่
โอเวอร์โหลด add สร้างส่วน XML กำหนดเองใหม่จากเนื้อหา XML ไม่รับ CustomXmlPart ที่มีอยู่ ดังนั้นความสัมพันธ์ที่ใช้ร่วมมักพบเมื่อลดโหลดงานนำเสนอที่มีส่วนเหล่านั้นแล้ว
ตัวอย่างต่อไปนี้ตรวจสอบคอลเลกชันระดับงานนำเสนอ, สไลด์, และรูปร่างโดย item_id และรายงานส่วนที่อ้างอิงจากตำแหน่งมากกว่าหนึ่งแห่ง:
import aspose.slides as slides
with slides.Presentation("presentation.pptx") as presentation:
references_by_item_id = {}
def register_custom_xml_parts(owner_name, custom_xml_parts):
for custom_xml_part in custom_xml_parts:
references_by_item_id.setdefault(custom_xml_part.item_id, []).append(owner_name)
register_custom_xml_parts("Presentation", presentation.custom_data.custom_xml_parts)
for slide_index, slide in enumerate(presentation.slides):
register_custom_xml_parts(
"Slide " + str(slide_index + 1),
slide.custom_data.custom_xml_parts
)
for shape_index, shape in enumerate(slide.shapes):
register_custom_xml_parts(
"Slide " + str(slide_index + 1) + ", shape " + str(shape_index),
shape.custom_data.custom_xml_parts
)
for item_id, owner_names in references_by_item_id.items():
if len(owner_names) > 1:
print("Shared custom XML part: " + str(item_id))
for owner_name in owner_names:
print(" Referenced by: " + owner_name)
การตรวจสอบแบบนี้มีประโยชน์ก่อนทำการแก้ไขหรือลบข้อมูล XML กำหนดเองในงานนำเสนอที่สร้างโดยระบบภายนอก เนื่องจากส่วนเมตาดาต้าเดียวกันอาจมีส่วนร่วมในหลายความสัมพันธ์
รับค่าของแท็ก
ใน Slides แท็กสอดคล้องกับคุณสมบัติ DocumentProperties.keywords ตัวอย่างโค้ดนี้แสดงวิธีรับค่าของแท็กด้วย Aspose.Slides for Python via .NET สำหรับ Presentation:
import aspose.slides as slides
with slides.Presentation("presentation.pptx") as presentation:
keywords = presentation.document_properties.keywords
เพิ่มแท็กลงในงานนำเสนอ
Aspose.Slides อนุญาตให้คุณเพิ่มแท็กลงในงานนำเสนอ แท็กทั่วไปประกอบด้วยสองรายการ:
- ชื่อของคุณสมบัติกำหนดเอง ตัวอย่าง
MyTag - ค่า ของคุณสมบัติกำหนดเอง ตัวอย่าง
My Tag Value
หากต้องการจัดประเภทงานนำเสนอตามกฎหรือคุณสมบัติเฉพาะ คุณสามารถเพิ่มแท็กเพื่อจุดประสงค์นั้นได้ ตัวอย่างเช่น หากต้องการแบ่งประเภทงานนำเสนอจากประเทศในอเมริกาเหนือ คุณสามารถสร้างแท็ก North American แล้วกำหนดค่าประเทศที่เกี่ยวข้องเป็นค่าแท็ก
ตัวอย่างโค้ดนี้แสดงวิธีเพิ่มแท็กไปยัง Presentation ด้วย Aspose.Slides for Python via .NET:
import aspose.slides as slides
with slides.Presentation("presentation.pptx") as presentation:
tags = presentation.custom_data.tags
tags.add("MyTag", "My Tag Value")
สามารถตั้งค่าแท็กสำหรับ Slide ได้เช่นกัน:
import aspose.slides as slides
with slides.Presentation() as presentation:
slide = presentation.slides[0]
slide.custom_data.tags.add("tag", "value")
หรือสำหรับ Shape แยกแต่ละออบเจ็กต์:
import aspose.slides as slides
with slides.Presentation() as presentation:
slide = presentation.slides[0]
shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 10, 10, 100, 50)
shape.text_frame.text = "My text"
shape.custom_data.tags.add("tag", "value")
ข้อจำกัด
แท็กที่เพิ่มผ่านคอลเลกชัน custom_data.tags จะถูกจัดเก็บเฉพาะในไฟล์ PowerPoint เท่านั้น ไม่ ถูกโอนย้ายไปยังโครงสร้างแท็ก PDF เมื่อทำการส่งออกงานนำเสนอเป็น PDF ดังนั้นตัวระบุกำหนดเองที่กำหนดเป็นแท็กจะไม่สามารถดึงคืนจาก PDF ที่มีแท็กได้
วิธีแก้: คุณสามารถเก็บตัวระบุกำหนดเองใน Alt Text ของออบเจ็กต์ (เช่น shape.alternative_text = "MyId") หลังจากส่งออกเป็น PDF Alt Text อาจปรากฏในโครงสร้างแท็กของ PDF
คำถามที่พบบ่อย
ฉันสามารถลบแท็กทั้งหมดจากงานนำเสนอ, สไลด์ หรือรูปร่างในการดำเนินการหนึ่งได้หรือไม่?
ได้. คอลเลกชัน tag collection รองรับการทำงาน clear ที่ลบคีย์‑ค่าทั้งหมดพร้อมกัน
ฉันจะลบแท็กเดียวโดยใช้ชื่อของมันโดยไม่ต้องวนลูปผ่านคอลเลกชันทั้งหมดได้อย่างไร?
ใช้ remove(name) บน TagCollection เพื่อลบแท็กตามคีย์
ฉันจะดึงรายการชื่อแท็กทั้งหมดสำหรับการวิเคราะห์หรือการกรองได้อย่างไร?
ใช้ get_names_of_tags บน tag collection จะส่งกลับอาร์เรย์ของชื่อแท็กทั้งหมด
ฉันจะค้นหาส่วน XML กำหนดเองทั้งหมดโดยไม่คำนึงว่ามันถูกจัดเก็บที่ไหน?
ใช้ Presentation.all_custom_xml_parts เพื่อดึงส่วน XML กำหนดเองทั้งหมดในงานนำเสนอ
ควรใช้ xml_as_string หรือ xml_data เพื่ออัปเดตส่วน XML กำหนดเอง?
ใช้ xml_as_string เมื่อแอปพลิเคชันทำงานกับข้อความ XML UTF‑8 ใช้ xml_data เมื่อ XML มีอยู่แล้วในรูปอาเรย์ไบต์หรือการประมวลผลแบบไบต์สะดวกกว่า ทั้งสองคุณสมบัติเชิงอธิบายเนื้อหา XML ของส่วน XML กำหนดเองเดียวกัน