Kako izvesti OneNote datoteku u PDF u Pythonu

Kako izvesti OneNote datoteku u PDF u Pythonu

Aspose.Note FOSS for Python omogućuje programatski PDF izvoz Microsoft OneNote .one sekcijskih datoteka bez potrebe za Microsoft Officeom ili bilo kojim pretvaračem dokumenata na razini operativnog sustava. Izvoz se obrađuje metodom Document.Save() koja se oslanja na opcionalni ReportLab PDF renderer.

Prednosti

  1. Server-friendly: radi na bilo kojem OS-u, uključujući headless Linux poslužitelje i CI/CD kontejnere
  2. Stream-capable: spremi izravno u io.BytesIO međuspremnik, nije potrebna privremena datoteka
  3. Free and open-source: MIT licenca

Preduvjeti

PDF izvoz zahtijeva opcionalnu ReportLab ovisnost. Instalirajte ga putem dodatka [pdf]:

pip install "aspose-note[pdf]"

Ako već imate aspose-note instaliran bez dodatka:

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

Provjerite je li ReportLab dostupan:

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

Vodič korak po korak

Korak 1: Instalirajte aspose-note s PDF podrškom

pip install "aspose-note[pdf]"

Potvrdite instalaciju:

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

Korak 2: Učitaj OneNote datoteku

from aspose.note import Document

doc = Document("MyNotes.one")

Korak 3: Izvezi cijeli dokument u PDF

Najjednostavniji izvoz, koji pokriva sve stranice s zadanim postavkama:

from aspose.note import Document, SaveFormat

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

Korak 4: Upotrijebite PdfSaveOptions

PdfSaveOptions omogućuje konfiguriranje postavki izvoza PDF-a:

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

doc = Document("MyNotes.one")

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

Dostupne PdfSaveOptions

OptionTypeDefaultDescription
PageIndexint0Polje postoji; nije proslijeđeno PDF izvoznika u v26.3.1: nema učinka
PageCountint | NoneNonePolje postoji; nije proslijeđeno PDF izvoznika u v26.3.1: nema učinka

Korak 5: Izvoz u memorijski tok

Document.Save() prihvaća binarni tok izravno: nije potrebna privremena datoteka:

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

Korak 6: Serijski izvoz više datoteka

Obradite sve .one datoteke u direktoriju:

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

Uobičajeni problemi i rješenja

1. ImportError: Nema modula pod nazivom ‘reportlab’

Uzrok: Dodatak [pdf] nije instaliran.

Ispravak:

pip install "aspose-note[pdf]"

2. UnsupportedSaveFormatException

Uzrok: Korišten je format koji nije SaveFormat.Pdf. Implementiran je samo SaveFormat.Pdf.

Ispravak: Uvijek koristite SaveFormat.Pdf za izvoz. Ostali formati su deklarirani radi API kompatibilnosti, ali izazivaju UnsupportedSaveFormatException.

3. IncorrectPasswordException

Uzrok: Datoteka .one je šifrirana. Šifrirani dokumenti nisu podržani.

Fix: Koristite nešifriranu .one datoteku. Komercijalni proizvod Aspose.Note podržava šifriranje.

4. FileNotFoundError

Uzrok: Putanja ulazne datoteke .one je netočna.

Ispravak: Koristite pathlib.Path.exists() za provjeru prije učitavanja:

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. PDF izlaz je prazan ili bez sadržaja

Uzrok: Datoteka .one sadrži stranice, ali nema tekstualnog sadržaja (samo slike ili tablice bez teksta). PDF renderer generira stranice na temelju onoga što ReportLab može prikazati iz DOM-a.

Ispravak: Provjerite sadržaj stranice prije izvoza:

from aspose.note import Document, RichText

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

Često postavljana pitanja

Koji formati spremanja su podržani?

Samo SaveFormat.Pdf je trenutno implementiran. Enum SaveFormat ima točno jednog člana: SaveFormat.Pdf.

Mogu li izvesti u tok umjesto u datoteku?

Da. Document.Save() prihvaća bilo koji zapisivi binarni tok kao svoj prvi 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()

Čuva li izvoz redoslijed stranica?

Da. Stranice se izvoze istim redoslijedom kojim se pojavljuju u DOM-u (redoslijed koji se dobije iteriranjem Document).

Je li izvoz u PDF dostupan na Linuxu?

Da. ReportLab i Aspose.Note FOSS za Python su oba OS‑neovisni.

Mogu li izvesti podskup stranica?

PdfSaveOptions.PageIndex i PageCount polja postoje, ali se ne prosljeđuju PDF izvozniku u v26.3.1 i nemaju učinka: cijeli dokument se uvijek izvozi.


Povezani resursi:

 Hrvatski