Πρωτότυπα Δεδομένων και Μεταδεδομένα 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απευθείας — περιέχει ήδη το εγγενές Pythonintή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 |