ข้อมูลพื้นฐานและเมตาดาต้า XMP

ข้อมูลพื้นฐานและเมตาดาต้า 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 โดยตรง — มันมี Python int หรือ 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

ดูเพิ่มเติม

 ภาษาไทย