วิธีทำงานกับคุณสมบัติของเอกสารใน .NET
วิธีทำงานกับคุณสมบัติของเอกสารใน .NET
ทุกเอกสาร Word จะมีเมทาดาต้าสองประเภท — ฟิลด์มาตรฐานที่ Word ติดตามสำหรับทุกไฟล์ และค่าที่กำหนดโดยแอปพลิเคชันซึ่งโปรแกรมได้เพิ่มเข้าไป คู่มือเล่มนี้แสดงวิธีการอ่านและตั้งค่าทั้งสองด้วย Aspose.Words FOSS สำหรับ .NET โดยใช้ Document.BuiltInDocumentProperties และ Document.CustomDocumentProperties ซึ่งในที่สุดทั้งสองสร้างบนการแสดงผล DocumentProperty เดียวกัน.
คู่มือแบบทีละขั้นตอน
ขั้นตอนที่ 1: อ่านและตั้งค่าคุณสมบัติเอกสารที่มีอยู่ในตัว
Document.BuiltInDocumentProperties คืนค่าเป็นคอลเลกชัน BuiltInDocumentProperties. เนื่องจากเป็นชุดคุณสมบัติที่คงที่และทราบล่วงหน้า ค่าจะถูกอ่านและเขียนเป็นสมาชิกทั่วไปแทนการค้นหาด้วยชื่อ — ตัวอย่างเช่น BuiltInDocumentProperties.Author, .Title, .Subject, .Manager, .Company, .Category, .Keywords, และ .Comments สำหรับฟิลด์เชิงบรรยาย, หรือ .CreatedTime, .LastSavedTime, .LastPrinted, และ .LastSavedBy สำหรับเวลาประทับ. สถิติเช่น .Characters, .CharactersWithSpaces, .Lines, และ .Bytes ก็เปิดให้เข้าถึงในลักษณะเดียวกัน, พร้อมกับ .Template และ .HyperlinkBase.
ขั้นตอนที่ 2: เพิ่มคุณสมบัติเอกสารที่กำหนดเอง
Document.CustomDocumentProperties คืนค่าชุด CustomDocumentProperties สำหรับเมตาดาต้าที่กำหนดโดยแอปพลิเคชันซึ่งไม่ได้เป็นส่วนหนึ่งของชุดที่ Word มีมาโดยตรง เรียกใช้หนึ่งใน overload ของ Add(name, value) พร้อมชื่อและค่าที่มีประเภท — สตริง, ตัวเลข, บูลีน หรือวันที่ ขึ้นอยู่กับ overload ที่ตรงกับประเภทของค่า — เพื่อสร้างคุณสมบัติใหม่.
ขั้นตอนที่ 3: เชื่อมคุณสมบัติกำหนดเองกับเนื้อหาเอกสาร
แทนค่าคงที่ คุณสมบัติกำหนดเองสามารถติดตามช่วงเนื้อหาที่มีเครื่องหมายบุ๊กมาร์กเพื่อให้ค่าของมันสอดคล้องกับเนื้อหานั้น เรียก CustomDocumentProperties.AddLinkToContent(name, linkSource) โดยส่งชื่อบุ๊กมาร์กเป็น linkSource แทนการทำการซิงค์ค่าคงที่ด้วยตนเองทุกครั้งที่เนื้อหาที่เชื่อมโยงเปลี่ยนแปลง.
ขั้นตอนที่ 4: ค้นหา ตรวจสอบ และลบคุณสมบัติ
ทั้ง BuiltInDocumentProperties และ CustomDocumentProperties สืบทอดมาจาก DocumentPropertyCollection แบบนามธรรม ดังนั้นจึงตรวจสอบได้แบบเดียวกัน: การเข้าถึงโดยชื่อ (เช่น properties[name]) จะดึงคุณสมบัติ, Contains(name) ตรวจสอบว่ามีอยู่หรือไม่, IndexOf(name) คืนค่าตำแหน่งของมัน, และ Count รายงานจำนวนคุณสมบัติที่ชุดนี้มี. เรียก Contains(name) ก่อนการเข้าถึงโดยชื่อเมื่อคุณสมบัติกำหนดเองอาจไม่มีอยู่ เพื่อหลีกเลี่ยงการจัดการคุณสมบัติที่หายไปเป็นเส้นทางของข้อยกเว้น. ลบคุณสมบัติด้วย Remove(name) หรือ RemoveAt(index), หรือเคลียร์คุณสมบัติทั้งหมดในชุดด้วย Clear().
ขั้นตอนที่ 5: อ่านค่าของคุณสมบัติกำหนดเองโดยไม่ต้องรู้ประเภทล่วงหน้า
อ็อบเจ็กต์ DocumentProperty มี Name, Value ที่ไม่มีประเภท, และ Type — ค่าตัวแปร enum ของ PropertyType: Boolean, DateTime, Double, Number, String, StringArray, ObjectArray, ByteArray, หรือ Other. เนื่องจาก Value ไม่มีประเภท ให้ใช้ accessor ที่มีประเภทตรงกันแทนการแคสต์โดยตรง: ToInt(), ToDouble(), ToDateTime(), ToBool(), ToByteArray(), หรือ ToString(). ตรวจสอบ IsLinkToContent และ LinkSource เพื่อดูว่าคุณสมบัติเชื่อมโยงกับเนื้อหาเอกสาร (ดูขั้นตอนที่ 3) หรือเป็นค่าคงที่.
ขั้นตอนที่ 6: ตรวจสอบสถานะการปกป้องของเอกสาร
BuiltInDocumentProperties.Security รายงานค่าที่เป็น DocumentSecurity ซึ่งอธิบายเมตาดาต้าการป้องกันที่จัดเก็บของเอกสาร: None, PasswordProtected, ReadOnlyRecommended, ReadOnlyEnforced หรือ ReadOnlyExceptAnnotations. อ่านคุณสมบัตินี้ก่อนตัดสินใจว่าต้องการการประมวลผลที่เกี่ยวกับการป้องกันเพิ่มเติมหรือไม่บนเอกสารที่โหลดแล้ว.
ปัญหาทั่วไปและการแก้ไข
การทำดัชนีของ CustomDocumentProperties คอลเลกชันตามชื่อไม่ได้คืนค่าใดที่ใช้งานได้. คุณสมบัตินี้ไม่มีอยู่ในเอกสารนี้. เรียก Contains(name) ก่อน, หรือเพิ่มคุณสมบัตินั้นด้วย Add(name, value) การโอเวอร์โหลด.
การอ่านค่าของคุณสมบัติกำหนดเองให้ประเภทที่ไม่ถูกต้อง. DocumentProperty.Value ไม่มีการกำหนดประเภท object; ผู้เรียกสมมติประเภทที่ไม่ตรงกัน Type. ใช้ตัวเข้าถึงที่มีประเภทที่สอดคล้องกัน (ToInt(), ToDouble(), ToDateTime(), ToBool(), ToByteArray()) ตาม DocumentProperty.Type.
ค่าของคุณสมบัติที่กำหนดเองที่เชื่อมโยงดูเหมือนจะล้าสมัย. คุณสมบัตินี้ถูกเชื่อมโยงผ่าน AddLinkToContent, และเนื้อหาที่ถูกคั่นหน้าได้เปลี่ยนแปลงแล้ว. ยืนยันว่า linkSource คั่นหน้ายังคงทำเครื่องหมายช่วงที่ควรป้อนค่าให้กับคุณสมบัติ.
สถิติคำเช่น Characters or Lines ไม่ตรงกับเนื้อหาจริงของเอกสารในปัจจุบัน. สถิติในตัวสะท้อนข้อมูลเมตาที่จัดเก็บไว้ ไม่ใช่การนับแบบสดใหม่. คำนวณใหม่และอัปเดตค่าที่เกี่ยวข้อง BuiltInDocumentProperties ค่าหากต้องการการนับที่เป็นปัจจุบัน.
คำถามที่พบบ่อย
ฉันจะอ่านหรือกำหนดผู้เขียนและชื่อเรื่องของเอกสารได้อย่างไร?
ใช้ Document.BuiltInDocumentProperties.Author และ .Title โดยตรง — พวกมันเป็นคุณสมบัติสตริงทั่วไปในคอลเลกชัน BuiltInDocumentProperties ที่เข้าถึงได้จาก Document.BuiltInDocumentProperties.
ฉันจะเพิ่มเมตาดาต้าเฉพาะแอปพลิเคชันที่ไม่ใช่คุณสมบัติมาตรฐานของ Word ได้อย่างไร?
ใช้ Document.CustomDocumentProperties.Add(name, value) พร้อมชื่อและค่าของคุณสมบัติ; overload Add ที่ตรงกันจะถูกเลือกตามประเภทของค่า.
ความแตกต่างระหว่าง BuiltInDocumentProperties กับ CustomDocumentProperties คืออะไร?
BuiltInDocumentProperties คือชุดฟิลด์เมตาดาต้ามาตรฐานที่กำหนดไว้ของ Word ที่เข้าถึงได้เป็นสมาชิกตามชื่อ. CustomDocumentProperties คือคอลเลกชันที่เปิดกว้างและมีชื่อของค่า DocumentProperty สำหรับเมตาดาต้าที่กำหนดโดยแอปพลิเคชัน, เข้าถึงโดยใช้ชื่อผ่านตัวดัชนี (เช่น properties[name]) และ Contains.
ฉันจะทำให้คุณสมบัติกำหนดเองติดตามส่วนของเนื้อหาในเอกสารแทนค่าคงที่ได้อย่างไร?
ใช้ CustomDocumentProperties.AddLinkToContent(name, linkSource) โดยส่งชื่อบุ๊กมาร์กเป็น linkSource; ค่าของคุณสมบัติก็จะสะท้อนเนื้อหาที่บุ๊กมาร์กนั้น.
ฉันจะตรวจสอบว่าเอกสารมีการป้องกันด้วยรหัสผ่านหรือไม่อย่างไร?
อ่าน Document.BuiltInDocumentProperties.Security, ค่าของ DocumentSecurity; PasswordProtected แสดงว่าเมตาดาต้าที่จัดเก็บของเอกสารระบุว่ามีการป้องกันด้วยรหัสผ่าน.