ข้อมูลพื้นฐานและเมตาดาต้า XMP
ข้อมูลพื้นฐานและเมตาดาต้า XMP
Aspose.PDF FOSS สำหรับ Python สร้าง API ระดับสูงของมัน — Document, Page, และคลาส annotation และ form — บนชุดข้อมูลพื้นฐานขนาดเล็กที่กำหนดใน aspose_pdf.engine.data. คุณจะไม่ค่อยสร้างส่วนใหญ่ของสิ่งเหล่านี้โดยตรง, แต่พวกมันปรากฏบ่อยเป็นประเภทของ property และค่าที่ส่งคืน: พจนานุกรม resources ของหน้าใช้คีย์เป็นค่า PdfName, สีเป็นอินสแตนซ์ของ Color, และ Document.xmp_metadata ส่งคืน XmpPacket. คู่มือนี้แนะนำ primitive ของอัตลักษณ์วัตถุ, wrapper ของค่า primitive, Color, enum การเข้ารหัสข้อความ, และโมเดลเมตาดาต้า XMP.
อัตลักษณ์ของวัตถุและรีจิสทรีของวัตถุ
PdfObjectID ระบุตัววัตถุแบบอ้อมในไฟล์ PDF ด้วย object_number และ generation_number. PdfObjectRegistry กำหนดและติดตามตัวระบุเหล่านี้เมื่อวัตถุถูกทำซีเรียลไลซ์, และ PdfTrailerable เป็นสัญญาร่วมสำหรับวัตถุที่สามารถสร้างพจนานุกรมที่เขียนลงใน trailer ของ PDF.
import aspose_pdf
from aspose_pdf.engine.data import PdfObjectRegistry
registry = PdfObjectRegistry()
# register() assigns a PdfObjectID to a serializable object
object_id = registry.register(some_pdf_object)
print(object_id.object_number, object_id.generation_number)
# get() resolves an object back from its PdfObjectID
resolved = registry.get(object_id)ตัวห่อค่า primitive
PdfNumber และ PdfName ห่อค่าดิบของ PDF ลงในอ็อบเจ็กต์ Python ที่มีประเภท. PdfNumber เก็บค่าเชิงตัวเลข value ของมันเป็น Python เนทีฟ int หรือ float; PdfName เก็บสตริง name และเป็นประเภทที่ใช้เป็นคีย์ของพจนานุกรมทั่วทั้งโมเดลอ็อบเจ็กต์ระดับต่ำ — ตัวอย่างเช่น คีย์ Font และ Resources ในพจนานุกรม resources ของหน้า. PdfNull แทนวัตถุ null ของ PDF.
import aspose_pdf
from aspose_pdf.engine.data.number import PdfNumber
from aspose_pdf.engine.data.types import PdfName
number = PdfNumber(3.14)
raw_value = number.value # already the native int/float you passed in
resources_key = PdfName("Resources")
font_key = PdfName("Font")ค่าของสี
Color แสดงถึงสี RGBA ที่มีคุณสมบัติแบบ float r, g, b, และ a. นอกจากคอนสตรัคเตอร์สองอาร์กิวเมนต์บวกอัลฟ่าแล้ว, มันยังเปิดเผยชุดเต็มของโรงงานสีที่ตั้งชื่อไว้ — ทั้งแบบตัวพิมพ์เล็ก (aqua(), blue(), azure(), red(), green(), yellow(), black(), white(), gray()) และนามแฝง PascalCase (Aqua(), Blue(), Azure(), Red(), Green(), Yellow(), Black(), White(), Gray()).
import aspose_pdf
from aspose_pdf.engine.data.types import Color
custom = Color(r=0.2, g=0.4, b=0.8, a=1.0)
# Named factories return ready-made Color instances
highlight = Color.yellow()
border = Color.Black()การเข้ารหัสข้อความและตัวกรองสตรีม
EncodingType (WIN_ANSI, MAC_ROMAN, MAC_EXPERT, PDF_DOC, UNICODE) ระบุการเข้ารหัสข้อความ, และ Encoding เปิดเผยค่าคงที่การเข้ารหัสที่สอดคล้อง (UTF8, UTF16, LATIN1, WIN_ANSI) พร้อมกับวิธี encode(text, encoding_type) ที่คืนค่าข้อความที่เข้ารหัส bytes. FilterType (NONE, FLATE_DECODE, LZW_DECODE, DCT_DECODE, JPX_DECODE, CCITT_FAX_DECODE, JBIG2_DECODE) ระบุตัวกรองสตรีมที่ใช้กับเนื้อหา PDF ที่บีบอัด.
import aspose_pdf
from aspose_pdf.engine.data import Encoding, EncodingType, FilterType
encoded = Encoding.encode("Hello, world", EncodingType.WIN_ANSI)
# FilterType values identify how a content or image stream is compressed
current_filter = FilterType.FLATE_DECODEเมตาดาต้า XMP
XmpPacket เป็นโมเดลในหน่วยความจำสำหรับแพ็กเกจเมตาดาต้า XMP ของเอกสาร — เป็นประเภทที่คืนค่าจาก Document.xmp_metadata. มันเก็บคอลเลกชันที่เรียงลำดับของ fields (แต่ละอันเป็น XmpField, XmpArray, หรือ XmpProperty) และแก้ไขคำนำหน้าชื่อเนมสเปซผ่าน XmpNamespaceProvider. ตัวรับและตัวตั้งค่าแบบพิมพ์ (getter และ setter) ที่มีสไตล์ get_value เช่น get_bool, get_int, get_real, get_date, get_localized_text, get_array, และเวอร์ชันคู่ set_* จะอ่านและเขียนคุณสมบัติเฉพาะโดยคำนำหน้าชื่อเนมสเปซหรือ URI และชื่อคุณสมบัติ.
import aspose_pdf
doc = aspose_pdf.Document()
doc.load_from("input.pdf")
xmp = doc.xmp_metadata # XmpPacket
title = xmp.get_localized_text("dc", "title", lang="x-default")
xmp.set_value("dc", "creator", "Jane Doe")
serialized = xmp.serialize()XmpStruct จำลองค่าที่มีโครงสร้าง (rdf:parseType="Resource") พร้อมการค้นหา get(name) ของตนเอง, XmpArray จำลองอาเรย์ที่เรียงลำดับพร้อม add(item) และ remove(item), และ XmpProperty เป็นคุณสมบัติที่มีคุณลักษณะ add_qualifier/remove_qualifier ของตนเอง. ทั้งสี่ใช้บล็อกสร้าง XmpField เดียวกันสำหรับค่ารายบุ.
เคล็ดลับและแนวทางปฏิบัติที่ดีที่สุด
- อ่าน
Document.xmp_metadataเพื่อรับXmpPacketของเอกสารแทนการสร้างใหม่จากศูนย์ — มันถูกเติมข้อมูลไว้แล้วจากไฟล์ที่โหลด. - อ่าน
PdfNumber.valueโดยตรง — มันมี Pythonintหรือfloatดั้งเดิมที่คุณส่งให้กับคอนสตรัคเตอร์แล้ว; ไม่มีวิธีแปลงto_double()หรือto_int(). - ควรใช้โรงงาน
Colorที่มีชื่อ (Color.red(),Color.Black()ฯลฯ) แทนทูเพิลr/g/b/aที่สร้างด้วยตนเองสำหรับสีทั่วไป — จะอ่านได้ชัดเจนมากขึ้นที่จุดเรียกใช้งาน. - ให้
EncodingTypeที่คุณส่งให้Encoding.encode()ตรงกับการเข้ารหัสที่ปลายทาง (ฟอนต์, สตรีม, หรือผู้ดู) คาดหวังจริง; ความไม่ตรงกันของการเข้ารหัสข้อความใน PDF เป็นสาเหตุทั่วไปของผลลัพธ์ที่บิดเบือน. - ถือว่า
PdfObjectRegistryและPdfObjectIDเป็นประเภทระดับล่างที่ทำงานกับเอนจิน — โค้ดส่วนใหญ่ของแอปพลิเคชันอ่านเนื้อหาเอกสารผ่านDocumentและPageแทนการลงทะเบียนอ็อบเจกต์โดยตรง.
ปัญหาทั่วไป
| ปัญหา | สาเหตุ | แก้ไข |
|---|---|---|
การเปรียบเทียบ PdfNumber ทำงานอย่างไม่คาดคิด | การเปรียบเทียบ wrapper แทนค่าตัวเลขของมัน | อ่าน .value ก่อนเปรียบเทียบหรือทำการคำนวณ |
การค้นหาคุณสมบัติ XMP คืนค่า None | ส่ง prefix หรือ uri ที่ไม่ถูกต้องให้กับตัวเข้าถึงแบบ get_value | ยืนยันคำนำหน้าชื่อเนมสเปซผ่าน XmpNamespaceProvider.get_uri() / get_prefix() ก่อนอ่าน |
ข้อความที่เข้ารหัสดูเป็นอักขระผิดพลาดหลังจาก Encoding.encode() | EncodingType ไม่ตรงกับที่ปลายทางคาดหวัง | ใช้ค่า EncodingType (WIN_ANSI, MAC_ROMAN, MAC_EXPERT, PDF_DOC, UNICODE) ที่ตรงกับฟอนต์หรือผู้ดูเป้าหมาย |
วัตถุ PdfObjectRegistry ที่กำหนดเองไม่สามารถแก้ไขได้ภายหลัง | get() ถูกเรียกด้วย PdfObjectID ที่ไม่เคยถูก register()-ed บนอินสแตนซ์รีจิสทรีนั้น | ลงทะเบียนวัตถุทั้งหมดบนอินสแตนซ์ PdfObjectRegistry เดียวกันก่อนทำการแก้ไข |
FAQ
ฉันต้องสร้าง PdfObjectID หรือ PdfObjectRegistry ด้วยตัวเองหรือไม่?
โดยทั่วไปแล้วไม่จำเป็น พวกมันสนับสนุนกระบวนการซีเรียลไลเซชันของเอนจิน; โค้ดส่วนใหญ่ของแอปพลิเคชันไม่เคยสร้างอินสแตนซ์ของพวกมันโดยตรง เว้นแต่จะทำงานกับโมเดลอ็อบเจกต์ระดับล่าง.
ความแตกต่างระหว่าง XmpField, XmpArray, XmpStruct และ XmpProperty คืออะไร?
XmpField คือค่าสเกลาร์เดียว. XmpArray คือรายการค่าที่เรียงลำดับ, XmpStruct คือการจัดกลุ่มฟิลด์แบบโครงสร้าง (rdf:parseType="Resource"), และ XmpProperty คือค่าที่ยังมีคุณลักษณะของตนเองด้วย.
ฉันจะดึงเมตาดาต้า XMP ของเอกสารได้อย่างไร?
อ่านคุณสมบัติ xmp_metadata บน Document ที่โหลดแล้ว — มันจะคืนค่า XmpPacket ที่คุณสามารถสอบถามและอัปเดตได้โดยตรง.
สีตัวพิมพ์เล็กและ PascalCase Color factories เป็นสีที่ต่างกันหรือไม่?
ไม่ — Color.red() และ Color.Red() เป็นนามแฝงที่คืนค่าสีเดียวกัน; ทั้งสองรูปแบบถูกให้เพื่อความสะดวก.
API Reference สรุป
| คลาส / เมธอด | คำอธิบาย |
|---|---|
PdfObjectID | ระบุวัตถุ PDF แบบอ้อมโดยใช้หมายเลขวัตถุและหมายเลขรุ่น |
PdfObjectRegistry.register | กำหนด PdfObjectID ให้กับวัตถุที่กำลังทำการซีเรียลไลซ์ |
PdfObjectRegistry.get | ดึงวัตถุจาก PdfObjectID ที่ได้ลงทะเบียนไว้ก่อนหน้า |
PdfTrailerable.get_dictionary | สร้างพจนานุกรมที่เขียนลงในส่วนท้ายของ PDF |
PdfNumber.value | ค่าตัวเลขที่ห่อหุ้มแล้ว, ซึ่งเป็น Python ดั้งเดิม int หรือ float |
PdfName | ห่อหุ้มค่าชื่อ PDF, ใช้เป็นคีย์ของดิกชันนารีในโมเดลออบเจกต์ระดับต่ำ |
PdfNull | แสดงอ็อบเจ็กต์ null ของ PDF |
Color | ค่าสี RGBA ที่มีฟาเคอรีตั้งชื่อ (red, blue, Black, และต่อไป) |
Encoding.encode | เข้ารหัสข้อความเป็น bytes โดยใช้ EncodingType |
EncodingType | ตัวระบุการเข้ารหัสข้อความ: WIN_ANSI, MAC_ROMAN, MAC_EXPERT, PDF_DOC, UNICODE |
FilterType | ตัวระบุตัวกรองการบีบอัดสตรีมที่ใช้โดยสตรีมเนื้อหาและภาพ |
XmpPacket | แพ็กเกจเมตาดาต้า XMP ในหน่วยความจำ, คืนค่าจาก Document.xmp_metadata |
XmpField | ค่าคุณสมบัติ XMP เดียว |
XmpArray | ค่าข้อมูลอาร์เรย์ XMP ที่จัดลำดับ |
XmpStruct | ค่า XMP ที่มีโครงสร้าง (rdf:parseType="Resource") |
XmpProperty | คุณสมบัติ XMP ที่มีคุณลักษณะของตนเอง |
XmpNamespaceProvider | แก้ไขคำนำหน้าชื่อเนมสเปซ XMP ไปยังและจาก URI |