Πρωτότυπα Δεδομένων και Μεταδεδομένα XMP

Πρωτότυπα Δεδομένων και Μεταδεδομένα XMP

Δεδομένα Πρωτότυπα και Μεταδεδομένα XMP

Aspose.PDF FOSS για Python δημιουργεί τα ανώτερα API — Document, Page, και τις κλάσεις σχολίων και φορμών — πάνω από ένα μικρό σύνολο πρωτογενών τύπων δεδομένων που ορίζονται στο aspose_pdf.engine.data. Σπάνια θα κατασκευάσετε τα περισσότερα από αυτά άμεσα, αλλά εμφανίζονται συνεχώς ως τύποι ιδιοτήτων και τιμές επιστροφής: το λεξικό πόρων μιας σελίδας κλειδώνεται με τιμές PdfName, τα χρώματα είναι στιγμιότυπα Color, και το Document.xmp_metadata επιστρέφει ένα XmpPacket. Αυτός ο οδηγός παρουσιάζει τα πρωτότυπα ταυτοποίησης αντικειμένων, τους περιτυλίκτες τιμών πρωτοτύπων, Color, τις απαριθμήσεις κωδικοποίησης κειμένου, και το μοντέλο μεταδεδομένων XMP.


Ταυτότητα αντικειμένου και μητρώο αντικειμένων

PdfObjectID αναγνωρίζει ένα έμμεσο αντικείμενο σε ένα αρχείο PDF με το object_number και το generation_number. Το PdfObjectRegistry εκχωρεί και παρακολουθεί αυτά τα αναγνωριστικά καθώς τα αντικείμενα σειριοποιούνται, και το PdfTrailerable είναι η κοινή σύμβαση για αντικείμενα που μπορούν να παράγουν το λεξικό που γράφεται σε ένα PDF trailer.

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)

Περιτυλίκτες τιμών πρωτοτύπων

PdfNumber και PdfName περιτυλίγουν ακατέργαστες τιμές PDF σε τυποποιημένα αντικείμενα Python. Το PdfNumber διατηρεί το αριθμητικό value του ως εγγενές Python int ή float; το PdfName διατηρεί μια name συμβολοσειρά και είναι ο τύπος που χρησιμοποιείται για κλειδιά λεξικού σε όλο το χαμηλού επιπέδου μοντέλο αντικειμένων — για παράδειγμα, τα κλειδιά Font και Resources στο λεξικό πόρων μιας σελίδας. Το PdfNull αντιπροσωπεύει το αντικείμενο PDF null.

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 με ιδιότητες κινητής υποδιαστολής 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. Τυποποιημένοι getters και setters (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 σε αυτήν την παρουσία του registryΚαταχωρίστε κάθε αντικείμενο στην ίδια παρουσία PdfObjectRegistry πριν το επιλύσετε

FAQ

Χρειάζεται να κατασκευάσω εγώ το PdfObjectID ή το PdfObjectRegistry;

Σπάνια. Υποστηρίζουν τη διαδικασία σειριοποίησης της μηχανής· ο περισσότερο κώδικας εφαρμογής δεν τα δημιουργεί ποτέ άμεσα, εκτός εάν εργάζεται με το χαμηλού επιπέδου μοντέλο αντικειμένων.

Ποια είναι η διαφορά μεταξύ XmpField, XmpArray, XmpStruct και XmpProperty;

XmpField είναι μια απλή τιμή. XmpArray είναι μια ταξινομημένη λίστα τιμών, XmpStruct είναι μια δομημένη (rdf:parseType="Resource") ομαδοποίηση πεδίων, και XmpProperty είναι μια τιμή που φέρει επίσης τα δικά της προσδιοριστικά.

Πώς μπορώ να λάβω τα μεταδεδομένα XMP ενός εγγράφου;

Διαβάστε την ιδιότητα xmp_metadata σε ένα φορτωμένο Document — επιστρέφει ένα XmpPacket που μπορείτε να ερωτήσετε και να ενημερώσετε επί τόπου.

Οι μικρές και PascalCase εργοστάσια χρώματος είναι διαφορετικά χρώματα;

Όχι — Color.red() και Color.Red() είναι ψευδώνυμα που επιστρέφουν το ίδιο χρώμα· και οι δύο ορθογραφίες παρέχονται για ευκολία.


API Reference Περίληψη

Κλάση / ΜέθοδοςΠεριγραφή
PdfObjectIDΑναγνωρίζει ένα έμμεσο αντικείμενο PDF με αριθμό αντικειμένου και αριθμό γενιάς
PdfObjectRegistry.registerΑντιστοιχίζει ένα PdfObjectID σε ένα αντικείμενο που σειριοποιείται
PdfObjectRegistry.getΕπιλύει ένα αντικείμενο από ένα προηγουμένως καταχωρημένο PdfObjectID
PdfTrailerable.get_dictionaryΠαράγει το λεξικό που γράφεται στο trailer ενός 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Μια δομημένη (rdf:parseType="Resource") τιμή XMP
XmpPropertyΜια ιδιότητα XMP που φέρει τους δικούς της προσδιοριστές
XmpNamespaceProviderΕπιλύει προθέματα ονοματοχώρου XMP σε και από URI

Δείτε επίσης

 Ελληνικά