Cara Membuat Dokumen dengan Modul Kompatibilitas yang Dihasilkan di Python
Aspose.PDF FOSS untuk Python menyediakan subpaket kompatibilitas generated (aspose_pdf.generated) yang mencerminkan subset stabil dari permukaan utama API — sebuah kelas Document dengan operasi siklus hidup inti, plus UnsignedContent/UnsignedContentAbsorber dan PdfAValidateOptions/PdfAValidationResult. Subpaket ini ada untuk pemanggil yang menginginkan permukaan yang lebih sempit ini secara eksplisit daripada kelas tingkat atas yang memiliki semua fitur, dan kelas-kelasnya tidak diimpor secara otomatis oleh import aspose_pdf — Anda mengimpornya langsung dari aspose_pdf.generated.*. Paket ini murni Python dan diinstal dengan perintah di bawah ini.
Panduan Langkah demi Langkah
Langkah 1: Instal Paket
Instal paket FOSS Aspose.PDF:
git clone https://github.com/aspose-pdf-foss/Aspose-PDF-FOSS-for-Python.git
cd Aspose-PDF-FOSS-for-Python
pip install -e .Verifikasi instalasi dengan mengimpor Document yang dihasilkan dan mencetak pesan konfirmasi:
import aspose_pdf
from aspose_pdf.generated.document import Document
print("aspose-pdf-foss-for-python is ready.")Langkah 2: Impor Kelas yang Diperlukan
Kelas kompatibilitas generated berada di aspose_pdf.generated.document, aspose_pdf.generated.forms, dan aspose_pdf.generated.pdfa — impor mereka secara eksplisit melalui submodul:
import aspose_pdf
from aspose_pdf.generated.document import Document
from aspose_pdf.generated.forms import UnsignedContent, UnsignedContentAbsorber
from aspose_pdf.generated.pdfa import PdfAValidateOptions, PdfAValidationResultLangkah 3: Buat dan Muat Dokumen
Document(source) dimuat segera ketika sumber diberikan; memanggil Document() tanpa argumen membuat instansi kosong yang dapat Anda muat nanti dengan load_from. Keduanya menerima jalur file, bytes, atau aliran biner:
from aspose_pdf.generated.document import Document
document = Document("report.pdf")
print(f"Loaded {len(document.pages)} page(s)")
empty_doc = Document()
empty_doc.load_from("report.pdf")Langkah 7: Ekstrak Konten Formulir yang Tidak Ditandatangani
UnsignedContentAbsorber mengekstrak halaman, bidang formulir, dan anotasi yang tidak termasuk dalam tanda tangan digital. Panggil extract() untuk menjalankan ekstraksi, has_extracted() untuk memeriksa apakah sudah dijalankan, dan get_extracted() untuk mengambil hasilnya kembali tanpa mengekstrak ulang:
from aspose_pdf.generated.forms import UnsignedContentAbsorber
absorber = UnsignedContentAbsorber()
unsigned = absorber.extract()
print(f"Unsigned pages: {len(unsigned.pages)}")
print(f"Unsigned form fields: {len(unsigned.form_fields)}")
if absorber.has_extracted():
same_result = absorber.get_extracted()Langkah 8: Bangun Kontainer UnsignedContent Secara Manual
UnsignedContent juga merupakan kontainer biasa yang dapat Anda isi sendiri dengan add_page, add_form_field, dan add_annotation — masing-masing memiliki metode remove_* yang cocok, dan reset() menghapus ketiga koleksi sekaligus:
from aspose_pdf.generated.forms import UnsignedContent
content = UnsignedContent()
content.add_page("page-1")
content.add_annotation("signature-placeholder")
print(content) # UnsignedContent(pages=1, form_fields=0, annotations=1)
content.remove_annotation("signature-placeholder")
content.reset()Langkah 9: Konfigurasikan dan Jalankan Validasi PDF/A
PdfAValidateOptions mengumpulkan input dan pengaturan untuk menjalankan validasi. add_input(source) mendaftarkan sebuah input, set_option(key, value) menyimpan opsi bernama, dan get_options() mengembalikan salinan opsi yang disimpan. PdfAValidationResult menahan hasil — add_error(message) menandai hasil tidak valid dan menambahkan ke errors, dan to_dict() merender is_valid dan errors sebagai kamus biasa:
from aspose_pdf.generated.pdfa import PdfAValidateOptions, PdfAValidationResult
options = PdfAValidateOptions()
options.add_input("report.pdf")
options.set_option("pdfa_version", "1b")
print(options.get_options())
result = PdfAValidationResult()
result.add_error("Font 'Arial' is not embedded")
print(result.is_valid) # False
print(result.to_dict())Masalah Umum dan Solusinya
ImportError or AttributeError saat mengakses aspose_pdf.generated
Subpaket generated tidak diekspor ulang oleh import aspose_pdf — impor setiap kelas dari submodul spesifiknya, misalnya from aspose_pdf.generated.document import Document, alih-alih mengharapkan aspose_pdf.generated.Document berfungsi setelah import aspose_pdf sederhana.
Membingungkan yang dihasilkan Document dengan yang utama aspose_pdf.Document
aspose_pdf.Document (kelas tingkat atas yang diekspor ulang oleh import aspose_pdf) memiliki antarmuka yang lebih luas — ia menambahkan metode seperti validate_pdfa, iter_pages, dan redact_text yang tidak diimplementasikan oleh aspose_pdf.generated.document.Document. Jika sebuah metode tidak ada pada Document yang dihasilkan, periksa apakah metode tersebut sebenarnya milik kelas Document tingkat atas.
save() raises AsposePdfException: Cannot save a disposed document
close()/dispose() melepaskan status internal dokumen secara permanen — Document yang dibuang tidak dapat disimpan, dioptimalkan, atau diperbaiki setelahnya. Lakukan semua operasi yang tersisa sebelum memanggil close(), atau muat ulang dari sumber dengan panggilan Document(...) yang baru.
change_passwords raises PdfSecurityException: Document is not encrypted
change_passwords hanya memutar ulang kata sandi pada dokumen yang sudah dienkripsi. Panggil encrypt(password) terlebih dahulu, atau periksa document.is_encrypted sebelum mencoba mengubah kata sandi.
PdfAValidationResult.add_error raises TypeError
add_error memerlukan argumen str. Ubah objek pengecualian atau detail error lainnya menjadi string (str(error)) sebelum meneruskannya ke add_error.
Pertanyaan yang Sering Diajukan
Mengapa aspose_pdf.generated ada di samping aspose_pdf.Document utama?
Ini mencerminkan subset yang lebih sempit dan stabil dari Aspose.PDF API untuk kode yang ditulis terhadap permukaan yang diperkecil tersebut. Kode baru yang tidak secara khusus membutuhkan subset kompatibilitas ini sebaiknya biasanya menggunakan aspose_pdf.Document tingkat atas, yang mendukung lebih banyak operasi (PDF/A konversi, iterasi halaman, penyensoran teks, dan lain-lain).
Apakah UnsignedContentAbsorber.extract() menerima Document untuk dipindai?
extract() menerima argumen posisi dan kata kunci yang digunakan untuk mengisi koleksi pages, form_fields, dan annotations pada UnsignedContent yang dikembalikan — berikan koleksi yang Anda inginkan sebagai argumen kata kunci (pages=, form_fields=, annotations=).
Apa yang terjadi jika saya memanggil reset() pada UnsignedContentAbsorber sebelum mengekstrak apa pun?
Ini menghapus semua hasil yang sebelumnya telah diekstrak. get_extracted() kemudian mengembalikan None dan has_extracted() mengembalikan False sampai extract() dipanggil lagi.
Apakah PdfAValidateOptions.add_input dapat dipanggil lebih dari sekali?
Ya — setiap pemanggilan menambahkan entri lain ke daftar inputs, dan mengembalikan self, sehingga pemanggilan dapat dirangkai: options.add_input("a.pdf").add_input("b.pdf").
Apakah close() berbeda dari dispose() pada Document yang dihasilkan?
Tidak — close() adalah alias langsung yang memanggil dispose() dengan argumen yang sama; kedua nama melepaskan sumber daya dokumen.