Sådan eksporterer du en OneNote-fil til PDF i Python

Sådan eksporterer du en OneNote-fil til PDF i Python

Aspose.Note FOSS for Python gør det muligt at programmere PDF-eksport af Microsoft OneNote .one sektion‑filer uden at kræve Microsoft Office eller nogen operativsystem‑niveau dokumentkonverter. Eksport håndteres af Document.Save()‑metoden, som er understøttet af den valgfrie ReportLab PDF‑renderer.

Fordele

  1. Servervenlig: kører på ethvert OS, inklusive headless Linux‑servere og CI/CD‑containere
  2. Strøm‑kompatibel: gem direkte til en io.BytesIO buffer, ingen midlertidig fil nødvendig
  3. Gratis og open-source: MIT‑licens

Forudsætninger

PDF-eksport kræver den valgfrie ReportLab-afhængighed. Installer den via [pdf] extra:

pip install "aspose-note[pdf]"

Hvis du allerede har aspose-note installeret uden ekstraen:

pip install --upgrade "aspose-note[pdf]"

Bekræft, at ReportLab er tilgængelig:

python -c "import reportlab; print(reportlab.Version)"

Trin-for-trin guide

Trin 1: Installer aspose-note med PDF-understøttelse

pip install "aspose-note[pdf]"

Bekræft installationen:

from aspose.note import Document, SaveFormat
print("Ready for PDF export.")

Trin 2: Indlæs OneNote-filen

from aspose.note import Document

doc = Document("MyNotes.one")

Trin 3: Eksporter hele dokumentet til PDF

Den enkleste eksport, der dækker alle sider med standardindstillinger:

from aspose.note import Document, SaveFormat

doc = Document("MyNotes.one")
doc.Save("output.pdf", SaveFormat.Pdf)
print("PDF saved to output.pdf")

Trin 4: Brug PdfSaveOptions

PdfSaveOptions lader dig konfigurere PDF-eksportindstillinger:

from aspose.note import Document
from aspose.note.saving import PdfSaveOptions

doc = Document("MyNotes.one")

opts = PdfSaveOptions()
doc.Save("output.pdf", opts)

Tilgængelige PdfSaveOptions

OptionTypeDefaultDescription
PageIndexint0Feltet findes; ikke videresendt til PDF-eksportøren i v26.3.1: har ingen effekt
PageCountint | NoneNoneFeltet findes; ikke videresendt til PDF-eksportøren i v26.3.1: har ingen effekt

Trin 5: Eksporter til en In-Memory Stream

Document.Save() accepterer en binær strøm direkte: ingen midlertidig fil nødvendig:

import io
from aspose.note import Document, SaveFormat
from aspose.note.saving import PdfSaveOptions

doc = Document("MyNotes.one")

buf = io.BytesIO()
doc.Save(buf, PdfSaveOptions())
pdf_bytes = buf.getvalue()
print(f"PDF size: {len(pdf_bytes)} bytes")

Trin 6: Batch‑eksport af flere filer

Behandl alle .one filer i en mappe:

from pathlib import Path
from aspose.note import Document, SaveFormat

input_dir = Path("./onenote_files")
output_dir = Path("./pdf_output")
output_dir.mkdir(exist_ok=True)

for one_file in input_dir.glob("*.one"):
    doc = Document(str(one_file))
    out_path = output_dir / one_file.with_suffix(".pdf").name
    doc.Save(str(out_path), SaveFormat.Pdf)
    print(f"Exported: {one_file.name} -> {out_path.name}")

Almindelige problemer og løsninger

1. ImportError: Ingen modul med navnet ‘reportlab’

Årsag: Ekstraen [pdf] var ikke installeret.

Rettelse:

pip install "aspose-note[pdf]"

2. UnsupportedSaveFormatException

Årsag: Et format andet end SaveFormat.Pdf blev brugt. Kun SaveFormat.Pdf er implementeret.

Fix: Brug altid SaveFormat.Pdf til eksport. Andre formater er erklæret for API‑kompatibilitet, men udløser UnsupportedSaveFormatException.

3. IncorrectPasswordException

Årsag: .one-filen er krypteret. Krypterede dokumenter understøttes ikke.

Fix: Brug en ukrypteret .one fil. Det kommercielle Aspose.Note-produkt understøtter kryptering.

4. FileNotFoundError

Årsag: Den indtastede .one filsti er forkert.

Rettelse: Brug pathlib.Path.exists() til at validere før indlæsning:

from pathlib import Path
from aspose.note import Document, SaveFormat

path = Path("MyNotes.one")
assert path.exists(), f"File not found: {path.resolve()}"
doc = Document(str(path))
doc.Save("output.pdf", SaveFormat.Pdf)

5. Output PDF er blank eller tom

Årsag: Filen .one indeholder sider, men ingen tekstindhold (kun billeder eller tabeller uden tekst). PDF-rendereren producerer sider baseret på, hvad ReportLab kan gengive fra DOM’en.

Fix: Verificer sideindholdet før eksport:

from aspose.note import Document, RichText

doc = Document("MyNotes.one")
text_count = len(doc.GetChildNodes(RichText))
print(f"RichText nodes found: {text_count}")

Ofte stillede spørgsmål

Hvilke gemmeformater understøttes?

Kun SaveFormat.Pdf er i øjeblikket implementeret. SaveFormat-enum’en har præcis ét medlem: SaveFormat.Pdf.

Kan jeg eksportere til en stream i stedet for en fil?

Ja. Document.Save() accepterer enhver skrivbar binær strøm som sit første argument:

import io
from aspose.note import Document, PdfSaveOptions, SaveFormat

doc = Document("MyNotes.one")
buf = io.BytesIO()
doc.Save(buf, PdfSaveOptions())
pdf_bytes = buf.getvalue()

Bevarer eksport sideordren?

Ja. Sider eksporteres i den samme rækkefølge, som de vises i DOM’en (den rækkefølge, der returneres ved at iterere Document).

Er PDF-eksport tilgængelig på Linux?

Ja. ReportLab og Aspose.Note FOSS for Python er begge OS‑uafhængige.

Kan jeg eksportere en delmængde af sider?

PdfSaveOptions.PageIndex og PageCount felter findes, men videresendes ikke til PDF-eksportøren i v26.3.1 og har ingen effekt: hele dokumentet eksporteres altid.


Relaterede ressourcer:

 Dansk