Primitive de date și metadate XMP
Primitive de date și metadate XMP
Aspose.PDF FOSS pentru Python își construiește nivelul superior API — Document, Page, și clasele de adnotare și formular — pe baza unui set mic de tipuri de date primitive definite în aspose_pdf.engine.data. Vei construi rar majoritatea acestor elemente direct, dar ele apar constant ca tipuri de proprietăți și valori de returnare: dicționarul de resurse al unei pagini este indexat de valori PdfName, culorile sunt instanțe Color, iar Document.xmp_metadata returnează un XmpPacket. Acest ghid introduce primitivele de identitate a obiectelor, wrapper-ele de valori primitive, Color, enum-urile de codare a textului și modelul de metadate XMP.
Identitatea obiectului și registrul de obiecte
PdfObjectID identifică un obiect indirect într-un fișier PDF prin object_number și generation_number. PdfObjectRegistry atribuie și urmărește acești identificatori pe măsură ce obiectele sunt serializate, iar PdfTrailerable este contractul comun pentru obiectele care pot produce dicționarul scris în trailer-ul 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)Wrapper-e de valori primitive
PdfNumber și PdfName împachetează valorile PDF brute în obiecte Python tipizate. PdfNumber păstrează value numeric ca un Python nativ int sau float; PdfName conține un șir name și este tipul folosit pentru cheile dicționarului în întregul model de obiecte de nivel scăzut — de exemplu, cheile Font și Resources din dicționarul de resurse al unei pagini. PdfNull reprezintă obiectul 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")Valori de culoare
Color reprezintă o culoare RGBA cu proprietăți float r, g, b și a. În afară de constructorul cu două argumente plus alfa, expune un set complet de fabrici de culori numite — atât în minuscule (aqua(), blue(), azure(), red(), green(), yellow(), black(), white(), gray()) și PascalCase aliasuri (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()Codificări de text și filtre de flux
EncodingType (WIN_ANSI, MAC_ROMAN, MAC_EXPERT, PDF_DOC, UNICODE) identifică o codificare de text, iar Encoding expune constantele de codificare corespunzătoare (UTF8, UTF16, LATIN1, WIN_ANSI) alături de o metodă encode(text, encoding_type) care returnează bytes codificat. FilterType (NONE, FLATE_DECODE, LZW_DECODE, DCT_DECODE, JPX_DECODE, CCITT_FAX_DECODE, JBIG2_DECODE) identifică filtrul de flux aplicat conținutului PDF comprimat.
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_DECODEMetadate XMP
XmpPacket este modelul în memorie pentru pachetul de metadate XMP al unui document — este tipul returnat de Document.xmp_metadata. Conține o colecție ordonată de fields (fiecare fiind un XmpField, XmpArray sau XmpProperty) și rezolvă prefixele de spațiu de nume printr-un XmpNamespaceProvider. Gettere și settere tipizate (get_value-style accesori precum get_bool, get_int, get_real, get_date, get_localized_text, get_array, și omologii lor set_*) citesc și scriu proprietăți individuale după prefixul de spațiu de nume sau URI și numele proprietății.
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 modelează o valoare structurată (rdf:parseType="Resource") cu propriul său tabel de căutare get(name), XmpArray modelează un tablou ordonat cu add(item) și remove(item), iar XmpProperty este o proprietate care poartă proprii săi calificatori add_qualifier/remove_qualifier. Toate cele patru împărtășesc același bloc de construcție XmpField pentru valori individuale.
Sfaturi și bune practici
- Citește
Document.xmp_metadatapentru a obțineXmpPacketdocumentului în loc să construiești unul de la zero — este deja populat din fișierul încărcat. - Citește
PdfNumber.valuedirect — conține deja Pythonintsaufloatnativ pe care l-ai transmis constructorului; nu există nicio metodă de conversieto_double()sauto_int(). - Preferă fabricile
Colordenumite (Color.red(),Color.Black()etc.) în locul tuplurilorr/g/b/acreate manual pentru culorile comune — sunt mai ușor de înțeles la punctele de apel. - Potrivește
EncodingTypepe care îl transmiți laEncoding.encode()cu codificarea pe care destinația (font, flux sau vizualizator) o așteaptă în mod real; nepotrivirile de codificare a textului PDF sunt o sursă comună de output distorsionat. - Tratează
PdfObjectRegistryșiPdfObjectIDca tipuri de nivel scăzut, orientate către motor — majoritatea codului aplicației citește conținutul documentului prinDocumentșiPageîn loc să înregistreze obiecte direct.
Probleme comune
| Problemă | Cauză | Remediere |
|---|---|---|
Comparările PdfNumber se comportă neașteptat | Compararea învelișului în loc de valoarea sa numerică | Citește .value înainte de a compara sau de a efectua operații aritmetice |
Căutarea proprietății XMP returnează None | prefix sau uri incorecte transmise către accesori de tip get_value | Confirmați prefixul spațiului de nume prin XmpNamespaceProvider.get_uri() / get_prefix() înainte de a citi |
Textul codificat apare distorsionat după Encoding.encode() | EncodingType nu se potrivește cu ceea ce așteaptă destinația | Utilizați valoarea EncodingType (WIN_ANSI, MAC_ROMAN, MAC_EXPERT, PDF_DOC, UNICODE) care se potrivește cu fontul sau vizualizatorul țintă |
Obiectele personalizate PdfObjectRegistry nu se rezolvă ulterior | get() apelat cu un PdfObjectID care nu a fost niciodată register()-ed pe acea instanță de registru | Înregistrați fiecare obiect pe aceeași instanță PdfObjectRegistry înainte de a-l rezolva |
FAQ
Trebuie să construiesc eu PdfObjectID sau PdfObjectRegistry?
Rareori. Ele susțin procesul de serializare al motorului; majoritatea codului aplicației nu le instanțiază niciodată direct, cu excepția cazului în care lucrează cu modelul de obiecte de nivel scăzut.
Care este diferența dintre XmpField, XmpArray, XmpStruct și XmpProperty?
XmpField este o valoare scalară singulară. XmpArray este o listă ordonată de valori, XmpStruct este o grupare structurată (rdf:parseType="Resource") de câmpuri, și XmpProperty este o valoare care poartă, de asemenea, propriile calificative.
Cum pot obține metadatele XMP ale unui document?
Citește proprietatea xmp_metadata pe un Document încărcat — aceasta returnează un XmpPacket pe care îl poți interoga și actualiza la fața locului.
Fabricile de culoare cu litere mici și PascalCase sunt culori diferite?
Nu — Color.red() și Color.Red() sunt aliasuri care returnează aceeași culoare; ambele ortografii sunt oferite pentru comoditate.
API Reference Rezumat
| Clasă / Metodă | Descriere: |
|---|---|
PdfObjectID | Identifică un obiect PDF indirect prin numărul de obiect și de generație |
PdfObjectRegistry.register | Atribuie un PdfObjectID unui obiect care este serializat |
PdfObjectRegistry.get | Rezolvă un obiect dintr-un PdfObjectID înregistrat anterior |
PdfTrailerable.get_dictionary | Produce dicționarul scris în trailer-ul PDF |
PdfNumber.value | Valoarea numerică învelită, deja un Python nativ int sau float |
PdfName | Împachetează o valoare de tip nume PDF, utilizată ca chei de dicționar în modelul de obiecte de nivel scăzut |
PdfNull | Reprezintă obiectul null PDF |
Color | Valoare de culoare RGBA cu fabrici numite (red, blue, Black, și așa mai departe) |
Encoding.encode | Codifică textul în bytes utilizând un EncodingType |
EncodingType | Identificator de codificare a textului: WIN_ANSI, MAC_ROMAN, MAC_EXPERT, PDF_DOC, UNICODE |
FilterType | Identificator de filtru de compresie a fluxului utilizat de fluxurile de conținut și imagine |
XmpPacket | Pachet de metadate XMP în memorie, returnat de Document.xmp_metadata |
XmpField | O singură valoare de proprietate XMP |
XmpArray | O valoare de tip array XMP ordonată |
XmpStruct | O valoare XMP structurată (rdf:parseType="Resource") |
XmpProperty | O proprietate XMP care poartă propriile sale calificatori |
XmpNamespaceProvider | Rezolvă prefixele de spațiu de nume XMP către și de la URI-uri |