Εισαγωγή
document.py, το module που ορίζει το Aspose.PDF FOSS για την κλάση Document του Python, το περιγράφει ως μια κλάση που «τυλίγει τη φυσική μηχανή PDF». Συγκεκριμένα, αυτή η μηχανή είναι aspose_pdf.engine.simple_pdf.SimplePdf: το Document.load_from δημιουργεί μια εμφάνιση SimplePdf, και κάθε λειτουργία επιπέδου εγγράφου — αποθήκευση, βελτιστοποίηση, επισκευή, κρυπτογράφηση — την αναθέτει σε αυτήν. Το ίδιο ισχύει για την απόδοση: τα Page.render και Document.render_page καλούν και τα δύο το aspose_pdf.engine.rasterizer.
Ο περισσότερος κώδικας εφαρμογών δεν χρειάζεται ποτέ να κοιτάξει πέρα από το Document και το Page. Ωστόσο, το aspose_pdf.engine είναι ένα τυπικό, εισαγώγιμο πακέτο Python, και πολλά από τα κομμάτια κάτω από τη διεπαφή είναι χρήσιμα από μόνα τους: ο rasterizer που μετατρέπει μια σελίδα σε pixel, οι κωδικοποιητές stream-filter που συμπιέζουν και αποσυμπιέζουν ροές περιεχομένου PDF, και τα εργαλεία κρυπτογράφησης που υλοποιούν τους αλγόριθμους AES-CBC και RC4 στους οποίους βασίζονται οι διαχειριστές ασφαλείας PDF. Αντίθετα με το κύριο πακέτο, τα υπο-modules του aspose_pdf.engine δεν εξάγονται ξανά από το κορυφαίο aspose_pdf — η μόνη εξαίρεση είναι το RasterizedPage, συνδεδεμένο μέσω του aspose_pdf.visualization — έτσι όλα τα παρακάτω εισάγονται με το πλήρες διαστικτό μονοπάτι τους, για παράδειγμα το from aspose_pdf.engine.filters import StreamDecoder.
Aspose.PDF FOSS για το Python είναι ένα πακέτο Python, aspose-pdf-foss-for-python, κυκλοφορεί υπό την άδεια MIT, απαιτώντας Python 3.11 ή νεότερη έκδοση. Το όνομα του κορυφαίου module είναι aspose_pdf. Το βασικό πακέτο εξαρτάται μόνο από τα cryptography και asn1crypto; τα προαιρετικά extras προσθέτουν αποκωδικοποίηση εικόνων με βάση το Pillow, υποστήριξη γραμματοσειρών WOFF2 με βάση το Brotli, και διαρρύθμιση σύνθετου κειμένου με βάση το HarfBuzz.
Βασικά χαρακτηριστικά
Απόδοση σελίδων με τη μηχανή Rasterization
Document.render_page(page_index, dpi=..., scale=..., background=..., antialias=...) και το αντίστοιχο Page.render του επιστρέφουν και τα δύο ένα RasterizedPage — ένα συσκευασμένο raster RGB που παράγεται από τον rasterizer της μηχανής. Το RasterizedPage εκθέτει τα width, height, και τα ακατέργαστα bytes pixels, καθώς και το get_pixel() για αναζήτηση ενός pixel, το to_png() / to_tiff() για κωδικοποιημένα bytes στη μνήμη, και το save() για άμεση εγγραφή ενός αρχείου .png ή .tif/.tiff. Η εργασία με το αντικείμενο στη μνήμη — αντί μόνο αποθήκευσης στο δίσκο — είναι χρήσιμη όταν ο καλών θέλει να επιθεωρήσει ή να μετασχηματίσει τα pixel πριν αποφασίσει αν θα τα κρατήσει.
from aspose_pdf import Document
with Document() as document:
page = document.pages.add()
page.add_text("Rendered by the engine", x=72, y=700, font_size=18)
raster = document.render_page(0, dpi=150)
print(raster.width, raster.height)
corner = raster.get_pixel(0, 0)
print("top-left pixel:", corner)
with open("page-0.png", "wb") as handle:
handle.write(raster.to_png())
raster.save("page-0.tiff")
Η Μηχανή Φίλτρων Ροής
Το περιεχόμενο PDF και οι ροές αντικειμένων συμπιέζονται με ονομαστικά φίλτρα όπως FlateDecode και LZWDecode. Τα aspose_pdf.engine.filters.StreamEncoder.encode(data, filters, decode_parms=None) και StreamDecoder.decode(data, filters, decode_parms, *, limits=None, max_output_bytes=None) υλοποιούν τις πλευρές κωδικοποίησης και αποκωδικοποίησης της αλυσίδας φίλτρων — οι ίδιοι κωδικοποιητές που χρησιμοποιεί η μηχανή εσωτερικά όταν γράφει και διαβάζει τις ροές ενός εγγράφου. Και τα δύο δέχονται ένα μοναδικό όνομα φίλτρου ή μια λίστα για αλυσίδωση φίλτρων, και το StreamDecoder.decode() ρίχνει PdfValidationException σε μη αναγνωρισμένο όνομα φίλτρου αντί να επιστρέφει σιωπηρά λανθασμένα bytes.
from aspose_pdf.engine.filters import StreamDecoder, StreamEncoder
raw = b"Sample content-stream payload.\n" * 40
compressed = StreamEncoder.encode(raw, "FlateDecode")
restored = StreamDecoder.decode(compressed, "FlateDecode", None)
assert restored == raw
print(f"{len(raw)} bytes -> {len(compressed)} bytes with FlateDecode")
Η Μηχανή Κρυπτογράφησης
aspose_pdf.engine.encryption.EncryptionUtils είναι η βοηθητική κλάση στατικών μεθόδων που καλεί το SimplePdf για κάθε λειτουργία σχετική με κρυπτογράφηση: τα Document.encrypt, decrypt() και change_passwords() όλα καταλήγουν σε κλήσεις EncryptionUtils εσωτερικά. Οι μέθοδοι της υλοποιούν AES-CBC και κρυπτογράφηση RC4 άμεσα (encrypt_aes_cbc, decrypt_aes_cbc, encrypt_rc4, decrypt_rc4), παραγωγή κλειδιού για τις εκδόσεις του διαχειριστή ασφαλείας του πρότυπου PDF (compute_owner_key_v4, compute_user_key_v4, compute_user_owner_keys_v6), και generate_file_id() για το τυχαίο 16-byte ID που χρειάζονται τα νέα έγγραφα.
from aspose_pdf.engine.encryption import EncryptionUtils
key = b"0123456789ABCDEF" # 16 bytes -> AES-128
ciphertext = EncryptionUtils.encrypt_aes_cbc(key, b"Reviewer notes: approved")
plaintext = EncryptionUtils.decrypt_aes_cbc(key, ciphertext)
assert plaintext == b"Reviewer notes: approved"
file_id = EncryptionUtils.generate_file_id()
print(file_id.hex())
Γρήγορη Εκκίνηση
Εγκαταστήστε το πακέτο, έπειτα αποδώστε μια σελίδα απευθείας από το επίπεδο της μηχανής σε ένα ενιαίο script.
git clone https://github.com/aspose-pdf-foss/Aspose-PDF-FOSS-for-Python.git
cd Aspose-PDF-FOSS-for-Python
pip install -e .from aspose_pdf import Document
with Document() as document:
page = document.pages.add()
page.add_text("Engine-rendered page", x=72, y=740, font_size=20)
raster = document.render_page(0, dpi=150)
raster.save("engine-render.png")
document.save("engine-quickstart.pdf")
print("Saved engine-quickstart.pdf and engine-render.png")
Υποστηριζόμενες Μορφές
| Μορφή | Επέκταση | Ανάγνωση | Εγγραφή |
|---|---|---|---|
| Ναι | Ναι | ||
| TIFF | tiff | - | Παρακαλώ στε |
Η ανάγνωση και εγγραφή PDF είναι Aspose.PDF FOSS για τη βασική λειτουργία του Python — το ζεύγος μηχανών Document/SimplePdf φορτώνει και γράφει έγγραφα PDF σε κάθε διαδρομή κώδικα σε αυτήν τη δημοσίευση. Document.render_page, Page.render και RasterizedPage.to_png() / to_tiff() παράγουν επίσης έξοδο raster PNG και TIFF· αυτά είναι έξοδοι raster σελίδας αντί για μορφές φόρτωσης εγγράφων.
Ανοιχτός Κώδικας & Άδειες
Aspose.PDF FOSS για το Python κυκλοφορεί υπό την άδεια MIT: χωρίς περιορισμούς χρήσης, χωρίς χρεώσεις χρόνου εκτέλεσης και χωρίς απαιτήσεις εγγραφής για εμπορική ή προσωπική χρήση. Ο κώδικας πηγής φιλοξενείται στο github.com/aspose-pdf-foss/Aspose-PDF-FOSS-for-Python, και το πακέτο δημοσιεύεται στο PyPI ως aspose-pdf-foss-for-python.