Adat primitívek és XMP metaadatok

Adat primitívek és XMP metaadatok

Adat primitívek és XMP metaadatok

Aspose.PDF FOSS a Python számára a magasabb szintű API — Document, Page, valamint a jegyzet- és űrlályosztályok — egy kis primitív adat típuskészletre építve, amelyet a aspose_pdf.engine.data definiál. Ritkán fogod ezeket közvetlenül létrehozni, de állandóan megjelennek tulajdonságtípusokként és visszatérési értékekként: egy oldal erőforrás-szótárát PdfName értékek kulcsolják, a színek Color példányok, és a Document.xmp_metadata egy XmpPacket-t ad vissza. Ez az útmutató bemutatja az objektum-azonosítási primitíveket, a primitív értékburkolókat, Color, a szövegkódolási enumokat és az XMP metaadat-modellt.


Objektumazonosítás és az objektumregisztráció

PdfObjectID egy közvetett objektumot azonosít egy PDF-fájlban a object_number és a generation_number alapján. PdfObjectRegistry kiosztja és nyomon követi ezeket az azonosítókat, ahogy az objektumok sorosítva vannak, és PdfTrailerable a megosztott szerződés azok számára, amelyek képesek előállítani a PDF-tráilerbe írt szótárt.

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)

Primitív értékburkolók

PdfNumber és PdfName nyers PDF-értékeket csomagolnak típusos Python objektumokba. PdfNumber a numerikus value-ját natív Python int vagy float formájában tárolja; PdfName egy name karakterláncot tárol, és ez a típus használatos a szótárkulcsokhoz az alacsony szintű objektummodellben — például a Font és Resources kulcsok egy oldal erőforrás-szótárában. PdfNull a PDF null objektumot jelöli.

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")

Színértékek

Color egy RGBA színt reprezentál, amelynek r, g, b és a lebegőpontos tulajdonsága van. A két argumentumos plusz alfa konstruktor mellett teljes halmazát kínálja a névvel ellátott színgyáraknak – mind kisbetűs (aqua(), blue(), azure(), red(), green(), yellow(), black(), white(), gray()) és PascalCase aliasok (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()

Szövegkódolások és adatfolyam-szűrők

EncodingType (WIN_ANSI, MAC_ROMAN, MAC_EXPERT, PDF_DOC, UNICODE) egy szövegkódolást azonosít, és Encoding kiadja a megfelelő kódolási állandókat (UTF8, UTF16, LATIN1, WIN_ANSI) egy encode(text, encoding_type) metódus mellett, amely visszaadja a kódolt bytes. FilterType (NONE, FLATE_DECODE, LZW_DECODE, DCT_DECODE, JPX_DECODE, CCITT_FAX_DECODE, JBIG2_DECODE) az összenyomott PDF tartalomra alkalmazott adatfolyam-szűrőt azonosít.

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 metaadatok

XmpPacket a dokumentum XMP metaadatcsomagjának memóriabeli modellje — ez a típus, amelyet a Document.xmp_metadata ad vissza. Rendezett gyűjteményt tartalmaz a fields (mindegyik egy XmpField, XmpArray vagy XmpProperty) és névtér előtagokat old meg egy XmpNamespaceProvider segítségével. A típusos getterek és setterek (get_value-stílusú hozzáférők, például get_bool, get_int, get_real, get_date, get_localized_text, get_array, és azok set_* megfelelői) egyéni tulajdonságokat olvasnak és írnak névtér előtag vagy URI és tulajdonságnév alapján.

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 egy strukturált (rdf:parseType="Resource") értéket modellez saját get(name) keresővel, XmpArray egy rendezett tömböt modellez add(item) és remove(item) elemekkel, és XmpProperty egy olyan tulajdonság, amely saját add_qualifier/remove_qualifier minősítőkkel rendelkezik. Mind a négy ugyanazt a XmpField építőelemet használja az egyedi értékekhez.


Tippek és bevált gyakorlatok

  • Olvasd el a Document.xmp_metadata-t, hogy megkapd a dokumentum XmpPacket-ját, ahelyett, hogy a semmiből építenéd fel — már a betöltött fájlból fel van töltve.
  • Olvassa be a PdfNumber.value közvetlenül — már tartalmazza a natív Python int vagy float értéket, amelyet a konstruktorba adtál; nincs to_double() vagy to_int() konverziós metódus.
  • Részesítsd előnyben a névvel ellátott Color gyárakat (Color.red(), Color.Black() stb.) a kézzel készített r/g/b/a tuple-kkal szemben a gyakori színek esetén — a hívási helyeken világosabban olvashatók.
  • Igazítsd a EncodingType-t, amelyet a Encoding.encode()-nek adsz, a kódoláshoz, amelyet a cél (betűkészlet, adatfolyam vagy megjelenítő) valójában elvár; a PDF szöveges kódolás eltérései gyakori oka a torzított kimenetnek.
  • Tekintsd a PdfObjectRegistry és PdfObjectID típusokat alacsony szintű, motor felé irányuló típusoknak — a legtöbb alkalmazáskód a dokumentum tartalmát a Document és Page segítségével olvassa, ahelyett, hogy közvetlenül regisztrálná az objektumokat.

Gyakori problémák

ProblémaOkJavítás
PdfNumber összehasonlítások váratlanul viselkednekA wrapper összehasonlítása a numerikus értéke helyettOlvasd be a .value értékét, mielőtt összehasonlítanád vagy aritmetikai műveletet végeznél
Az XMP tulajdonságkeresés None értéket ad visszaHibás prefix vagy uri lett átadva a get_value-stílusú hozzáférőknekErősítse meg a névtér előtagját a XmpNamespaceProvider.get_uri() / get_prefix() segítségével, mielőtt olvasna
A kódolt szöveg torzultnak tűnik a Encoding.encode() utánA EncodingType nem egyezik a cél által elvártakkalHasználja a EncodingType értéket (WIN_ANSI, MAC_ROMAN, MAC_EXPERT, PDF_DOC, UNICODE), amely megfelel a célbetűtípusnak vagy megjelenítőnek
Az egyedi PdfObjectRegistry objektumok később nem oldódnak felget() egy PdfObjectID argumentummal lett meghívva, amelyet soha nem register()-ed az a regisztrációs példányonRegisztrálja minden objektumot ugyanazon a PdfObjectRegistry példányon, mielőtt feloldaná

FAQ

Szükséges-e saját magamnak létrehozni a PdfObjectID vagy PdfObjectRegistry objektumot?

Ritkán. Ezek támogatják a motor serializációs folyamatát; a legtöbb alkalmazáskód soha nem hozza létre őket közvetlenül, kivéve ha az alacsony szintű objektummodellel dolgozik.

Mi a különbség XmpField, XmpArray, XmpStruct és XmpProperty között?

XmpField egy egyszerű skaláris érték. XmpArray egy rendezett értéklista, XmpStruct egy strukturált (rdf:parseType="Resource") mezőcsoport, és XmpProperty egy olyan érték, amely saját minősítőkkel is rendelkezik.

Hogyan tudok egy dokumentum XMP metaadatait lekérni?

Olvasd el a betöltött Document xmp_metadata tulajdonságát — ez egy XmpPacket-t ad vissza, amelyet helyben lekérdezhetsz és frissíthetsz.

Az alsó- és a PascalCase Color factories különböző színeket jelentenek?

Nem — a Color.red() és a Color.Red() aliasok, amelyek ugyanazt a színt adják vissza; mindkét írásmód a kényelmet szolgálja.


API Reference Összefoglaló

Osztály / MetódusLeírás
PdfObjectIDAz indirekt PDF objektumot az objektum- és generációszám alapján azonosítja
PdfObjectRegistry.registerHozzárendel egy PdfObjectID egy sorosítandó objektumhoz
PdfObjectRegistry.getFelold egy objektumot egy korábban regisztrált PdfObjectID alapján
PdfTrailerable.get_dictionaryLétrehozza a PDF trailerbe írt szótárat
PdfNumber.valueA becsomagolt numerikus érték, már egy natív Python int vagy float
PdfNameBecsomagolja a PDF névértéket, amelyet az alacsony szintű objektummodell szótárkulcsként használ
PdfNullA PDF null objektumot képviseli
ColorRGBA színérték elnevezett gyárakkal (red, blue, Black, és így tovább)
Encoding.encodeSzöveget kódol bytes egy EncodingType használatával
EncodingTypeSzövegkódolás azonosító: WIN_ANSI, MAC_ROMAN, MAC_EXPERT, PDF_DOC, UNICODE
FilterTypeÁramlattömörítési szűrő azonosító, amelyet a tartalom- és képfolyamok használnak
XmpPacketMemóriában tárolt XMP metaadatcsomag, amelyet a Document.xmp_metadata ad vissza
XmpFieldEgyetlen XMP tulajdonságérték
XmpArrayEgy rendezett XMP tömbérték
XmpStructEgy strukturált (rdf:parseType="Resource") XMP érték
XmpPropertyEgy XMP tulajdonság, amely saját kvalifikátorokkal rendelkezik
XmpNamespaceProviderFeloldja az XMP névtér előtagjait URI-kké és URI-król.

Lásd még:

 Magyar