Introducere
Aspose.PDF FOSS pentru Python se concentrează pe clasa Document, care expune pages, form, outlines, tagged_content și attachments ca puncte de intrare pentru editarea structurală și la nivel de document. Dincolo de adăugarea conținutului paginii, biblioteca acoperă operațiunile care transformă un PDF într-un artefact complet și distribuibil: câmpuri de formular interactive care colectează și expun date structurate, atașamente de fișiere la nivel de document, descoperirea și încorporarea fonturilor pentru redactarea textului și un arbore de semne de carte pentru navigare. Fiecare dintre aceste domenii generează erori printr-o ierarhie unică de excepții cu rădăcina în AsposePdfException, astfel încât apelanții pot captura eșecurile specifice pachetului fără a ghici tipurile de excepții modul cu modul.
Acest ghid arată cum să lucraţi cu acea suprafaţă de gestionare a documentelor: capturarea și distingerea subclaselor AsposePdfException, crearea și citirea câmpurilor AcroForm cu Form și Field, încorporarea și recuperarea atașamentelor prin FileSpecification, rezolvarea fonturilor cu FontRepository și FontRegistry, și construirea unui arbore de semne de carte cu OutlineCollection și OutlineItem. Fiecare secţiune foloseşte doar clasele și metodele prezente în pachetul curent.
Aspose.PDF FOSS pentru Python este un pachet de Python, aspose-pdf-foss-for-python, lansat sub licența MIT, care necesită PyThon 3.11 sau mai târziu. numele său de modul de nivel superior este aspose_pdf. pachetul principal depinde numai de cryptography și asn1crypto; extra opționale adaugă decodificarea imaginii bazată pe Pillow, suportul fontului WOFF2 bazat pe Brotli și layout complex text bazate pe HarfBuzz .
Caracteristici cheie
Excepţie de manipulare cu AsposePdfException
Fiecare eroare specifică pachetului în Aspose.PDF FOSS pentru Python rezultă din AsposePdfException. Cele mai multe eșecuri de procesare a documentelor cad sub subclasele sale PdfException, care la rândul său este baza pentru PdfParseException (input defectuos), PdfSecurityException [incryptie și eşecurile de parolă, inclusiv InvalidPasswordException) și PdfValidationException {Eșe structurale sau de conformitate).
from aspose_pdf import Document
from aspose_pdf.exceptions import (
AsposePdfException,
InvalidPasswordException,
PdfParseException,
)
def open_document(path, password=None):
try:
document = Document()
document.load_from(path, password=password)
return document
except InvalidPasswordException:
print(f"{path}: a correct password is required")
except PdfParseException as error:
print(f"{path}: not a valid PDF ({error})")
except AsposePdfException as error:
# Catches every other aspose_pdf-specific error not handled above.
print(f"{path}: PDF operation failed ({error})")
return None
Interactivă formă câmpuri
Document.form returnează o facadă Form peste câmpurile AcroForm din document. Form.add_text_field(), add_checkbox() și add_radio_group() creează noi câmpi terminale legate de o pagină și un rectanglu widget, fiecare întoarce un Field.Field expune name , value si field_type astfel că câmpul existent poate fi inspectat și actualizat prin nume, iar Field.remove() șterge complet un câmpus.
from aspose_pdf import Document
with Document() as document:
page = document.pages.add()
document.form.add_text_field("customer_name", page, (72, 700, 300, 720))
document.form.add_checkbox("subscribe", page, (72, 670, 90, 688), on_value="Yes")
document.form.add_radio_group(
"plan",
page,
{"Basic": (72, 630, 90, 648), "Pro": (72, 600, 90, 618)},
value="Basic",
)
for field in document.form.fields:
print(field.name, field.field_type, field.value)
for field in document.form.fields:
if field.name == "customer_name":
field.value = "Jane Doe"
document.form.generate_appearances()
document.save("form.pdf")
Fișierele și atașamentele integrate
Document.add_attachment încorporează octeți ca un atașament de fișier la nivel de document, scris în arborele de nume /Names /EmbeddedFiles al PDF-ului la salvare, împreună cu un tip MIME opțional, descriere și date de creare/modificare. Document.embedded_files citește fiecare atașament înapoi ca un FileSpecification tipizat (name, contents, mime_type, description, size), și Document.get_embedded_file caută unul după nume. FileSpecification.save() scrie octeții recuperați pe disc.
from aspose_pdf import Document
with Document() as document:
document.pages.add()
document.add_attachment(
"notes.txt",
b"Reviewed and approved.",
mime="text/plain",
description="Reviewer notes",
)
document.save("with-attachment.pdf")
with Document() as document:
document.load_from("with-attachment.pdf")
for spec in document.embedded_files:
print(spec.name, spec.mime_type, spec.size)
notes = document.get_embedded_file("notes.txt")
if notes is not None:
notes.save("notes-recovered.txt")
Descoperă și încorporează
FontRepository agregă sursele de fonturi și rezolvă fonturile după nume în întregul document. FontRepository.add_source() înregistrează un FontSource cum ar fi FolderFontSource (scanează un director, opțional recursiv); FontRepository.find_font() și search() apoi rezolvă un font după familie, complet sau PostScript nume, revenind la registrul de fonturi standard. Fiecare potrivire este un FontDescriptor, care poate fi transmis direct la Page.add_text pentru a încorpora și subgrupa fontul. FontRegistry mapează nume comune non-standard (Arial, Times New Roman și altele) la echivalentul lor cel mai apropiat Standard-14 prin search_font_by_name().
from aspose_pdf import Document, FolderFontSource, FontRepository
from aspose_pdf.font_registry import FontRegistry
FontRepository.add_source(FolderFontSource("./fonts", scan_subdirectories=True))
descriptor = FontRepository.find_font("Open Sans")
if descriptor is None:
# Fall back to the closest Standard-14 match for a common font name.
descriptor = FontRegistry().search_font_by_name("Arial")
with Document() as document:
page = document.pages.add()
page.add_text(
"Rendered with a resolved font",
x=72,
y=700,
font_size=14,
font=descriptor,
)
document.save("font-sample.pdf")
Documentele şi Bookmarks
Document.outlines returnează un OutlineCollection, containerul de nivel superior pentru arborele de semne de carte al unui PDF. OutlineCollection.add adaugă un OutlineItem de nivel superior; OutlineItem.add() inserează un semn de carte copil sub unul existent. Fiecare OutlineItem conține un title, un page_index țintă, și is_bold / is_italic steaguri de afișare, și expune propria listă children.
from aspose_pdf import Document
from aspose_pdf.outlines import OutlineItem
with Document() as document:
document.pages.add()
document.pages.add()
chapter = OutlineItem("Chapter 1: Overview", page_index=0)
document.outlines.add(chapter)
chapter.add(OutlineItem("Section 1.1", page_index=0, is_italic=True))
document.outlines.add(OutlineItem("Chapter 2: Details", page_index=1, is_bold=True))
document.save("bookmarked.pdf")
Începe rapid
Instalați pachetul, apoi creați un document care combină o notă de carte, metadata documentului și un atașament într-un singur 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
from aspose_pdf.outlines import OutlineItem
with Document() as document:
page = document.pages.add()
page.add_text("Quarterly Report", x=72, y=740, font_size=20)
document.outlines.add(OutlineItem("Quarterly Report", page_index=0))
document.info = {"Title": "Quarterly Report"}
document.add_attachment(
"source-data.csv", b"quarter,total\nQ1,1000\n", mime="text/csv"
)
document.save("report.pdf")
with Document() as reopened:
reopened.load_from("report.pdf")
print(reopened.page_count, "page(s),", reopened.info.get("Title"))
print([spec.name for spec in reopened.embedded_files])
Formate susținute
| Formatul | extindere | Citește | Scriu |
|---|---|---|---|
| Da | Da | ||
| TIFF | TIFF | - | Da |
Page.render, Page.save_as_image și Document.save_page_as_image produc de asemenea o producție PNG raster alături de TIFF.
Acestea sunt surse de rasterizare a paginilor, mai degrabă decât formate de încărcare a documentelor.
Sursă deschisă & Licențiere
Aspose.PDF FOSS pentru Python este eliberat sub licența MIT: nu există restricții de utilizare, nu sunt taxe de funcționare și nu au cerințe de înregistrare pentru uz comercial sau personal. codul sursă este găzduit la github.com/aspose-pdf-foss/Aspose-PDF-FOSS - pentru-Ptone, iar pachetul este publicat pe PyPI ca aspose-pdf-foss-for-python.