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_DECODEXMP 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 dokumentumXmpPacket-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.valueközvetlenül — már tartalmazza a natív Pythonintvagyfloatértéket, amelyet a konstruktorba adtál; nincsto_double()vagyto_int()konverziós metódus. - Részesítsd előnyben a névvel ellátott
Colorgyárakat (Color.red(),Color.Black()stb.) a kézzel készítettr/g/b/atuple-kkal szemben a gyakori színek esetén — a hívási helyeken világosabban olvashatók. - Igazítsd a
EncodingType-t, amelyet aEncoding.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ésPdfObjectIDtípusokat alacsony szintű, motor felé irányuló típusoknak — a legtöbb alkalmazáskód a dokumentum tartalmát aDocumentésPagesegítségével olvassa, ahelyett, hogy közvetlenül regisztrálná az objektumokat.
Gyakori problémák
| Probléma | Ok | Javítás |
|---|---|---|
PdfNumber összehasonlítások váratlanul viselkednek | A wrapper összehasonlítása a numerikus értéke helyett | Olvasd 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 vissza | Hibás prefix vagy uri lett átadva a get_value-stílusú hozzáférőknek | Erő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án | A EncodingType nem egyezik a cél által elvártakkal | Haszná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 fel | get() egy PdfObjectID argumentummal lett meghívva, amelyet soha nem register()-ed az a regisztrációs példányon | Regisztrá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ódus | Leírás |
|---|---|
PdfObjectID | Az indirekt PDF objektumot az objektum- és generációszám alapján azonosítja |
PdfObjectRegistry.register | Hozzárendel egy PdfObjectID egy sorosítandó objektumhoz |
PdfObjectRegistry.get | Felold egy objektumot egy korábban regisztrált PdfObjectID alapján |
PdfTrailerable.get_dictionary | Létrehozza a PDF trailerbe írt szótárat |
PdfNumber.value | A becsomagolt numerikus érték, már egy natív Python int vagy float |
PdfName | Becsomagolja a PDF névértéket, amelyet az alacsony szintű objektummodell szótárkulcsként használ |
PdfNull | A PDF null objektumot képviseli |
Color | RGBA színérték elnevezett gyárakkal (red, blue, Black, és így tovább) |
Encoding.encode | Szöveget kódol bytes egy EncodingType használatával |
EncodingType | Szö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 |
XmpPacket | Memóriában tárolt XMP metaadatcsomag, amelyet a Document.xmp_metadata ad vissza |
XmpField | Egyetlen XMP tulajdonságérték |
XmpArray | Egy rendezett XMP tömbérték |
XmpStruct | Egy strukturált (rdf:parseType="Resource") XMP érték |
XmpProperty | Egy XMP tulajdonság, amely saját kvalifikátorokkal rendelkezik |
XmpNamespaceProvider | Feloldja az XMP névtér előtagjait URI-kké és URI-król. |