Introduktion

Aspose.PDF FOSS för Python fokuserar på klassen Document, som exponerar pages, form, outlines, tagged_content och attachments som ingångspunkter för strukturell, dokumentnivåredigering. Utöver att lägga till sidinnehåll täcker biblioteket de operationer som gör en PDF till ett komplett, distribuerbart artefakt: interaktiva formulärfält som samlar in och exponerar strukturerad data, filbilagor på dokumentnivå, upptäckt och inbäddning av typsnitt för textförfattande samt ett bokmärkesträd för navigering. Var och en av dessa områden kastar fel genom en enda undantagshierarki med rot i AsposePdfException, så att anroparna kan fånga paket-specifika fel utan att gissa på undantagstyper modul för modul.

Denna guide visar hur man arbetar med den dokumenthanteringsytan: fånga och särskilja AsposePdfException-subklasser, skapa och läsa AcroForm-fält med Form och Field, bädda in och återvinna bilagor via FileSpecification, lösa upp typsnitt med FontRepository och FontRegistry, samt bygga ett bokmärkesträd med OutlineCollection och OutlineItem. Varje avsnitt använder endast de klasser och metoder som finns i det aktuella paketet.

Aspose.PDF FOSS för Python är ett Python-paket, aspose-pdf-foss-for-python, släppt under MIT-licensen, och kräver Python 3.11 eller senare. Dess top-nivåmodulnamn är aspose_pdf. Kärnpaketet beror endast på cryptography och asn1crypto; valfria tillägg lägger till Pillow-baserad bildavkodning, Brotli-baserat WOFF2-typsnittsstöd och HarfBuzz-baserad komplex textlayout.


Viktiga funktioner

Undantagshantering med AsposePdfException

Varje paket-specifikt fel i Aspose.PDF FOSS för Python härstammar från AsposePdfException. De flesta dokumentbehandlingsfel faller under dess PdfException-subklass, som i sin tur är bas för PdfParseException (felaktig inmatning), PdfSecurityException (krypterings- och lösenordsfel, inklusive InvalidPasswordException), och PdfValidationException (strukturella eller efterlevnadsfel). Att fånga AsposePdfException sist, efter mer specifika subklasser, gör att en anropar kan reagera annorlunda på ett fel lösenord än på en korrupt fil samtidigt som den har en enda återfalla för allt annat som paketet kan kasta.

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

Interaktiva formulärfält

Document.form returnerar en Form fasad över dokumentets AcroForm fält. Form.add_text_field(), add_checkbox() och add_radio_group() skapar nya terminalfält kopplade till en sida och en widget-rektangel, var och en returnerar en Field. Field exponerar name, value och field_type så att befintliga fält kan inspekteras och uppdateras efter namn, och Field.remove() tar bort ett fält helt.

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")

Inbäddade filer och bilagor

Document.add_attachment bäddar in bytes som en filbilaga på dokumentnivå, skriven till PDF:ens /Names /EmbeddedFiles namntree vid sparande, tillsammans med en valfri MIME-typ, beskrivning och skapande-/ändringsdatum. Document.embedded_files läser tillbaka varje bilaga som en typad FileSpecification (name, contents, mime_type, description, size), och Document.get_embedded_file söker upp en efter namn. FileSpecification.save() skriver de återvunna bytes till disk.

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")

Typsnittsupptäckt och inbäddning

FontRepository samlar typsnittskällor och löser upp typsnitt efter namn i hela dokumentet. FontRepository.add_source() registrerar en FontSource såsom FolderFontSource (skannar en katalog, eventuellt rekursivt); FontRepository.find_font() och search() löser sedan upp ett typsnitt efter familj, fullständigt eller PostScript namn, med fallback till standard-typsnittregistret. Varje matchning är en FontDescriptor, som kan skickas direkt till Page.add_text för att bädda in och delmängda typsnittet. FontRegistry mappar vanliga icke-standardnamn (Arial, Times New Roman och liknande) till deras närmaste Standard-14 motsvarighet via 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")

Dokumentöversikter och bokmärken

Document.outlines returnerar en OutlineCollection, den översta behållaren för en PDFs bokmärkesträd. OutlineCollection.add lägger till ett toppnivå-OutlineItem; OutlineItem.add() nästar ett underbokmärke under ett befintligt. Varje OutlineItem bär en title, ett mål-page_index, och is_bold/is_italic visningsflaggor, och exponerar sin egen children-lista.

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")

Snabbstart

Installera paketet och bygg sedan ett dokument som kombinerar ett bokmärke, dokumentmetadata och en bilaga i ett enda skript.

asposefoss/pdf is not yet published — build from source until it ships. See the project README for build instructions.
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])

Stödda format

FormatFiländelseLäsSkriv
PDFpdfJaJa
TIFFtiff-Ja

Page.render, Page.save_as_image och Document.save_page_as_image producerar också PNG rasterutmatning tillsammans med TIFF.

Detta är sidrasteriseringsutdata snarare än dokumentläsningsformat.


Öppen källkod & licensiering

Aspose.PDF FOSS för Python släpps under MIT-licensen: inga användningsrestriktioner, inga körningsavgifter och inga registreringskrav för kommersiell eller personlig användning. Källkoden är hostad på github.com/aspose-pdf-foss/Aspose-PDF-FOSS-for-Python, och paketet publiceras på PyPI som aspose-pdf-foss-for-python.


Kom igång

Relaterade resurser