Kako izvesti OneNote fajl u PDF u Pythonu

Kako izvesti OneNote fajl u PDF u Pythonu

Aspose.Note FOSS for Python omogućava programatski PDF izvoz Microsoft OneNote .one sekcijskih fajlova bez potrebe za Microsoft Office‑om ili bilo kojim konvertorom dokumenata na nivou operativnog sistema. Izvoz se obavlja metodom Document.Save() podržanom opcionalnim ReportLab PDF renderer.

Prednosti

  1. Server-friendly: radi na bilo kojem OS-u, uključujući headless Linux servere i CI/CD kontejnere
  2. Stream-capable: sačuvajte direktno u io.BytesIO bafer, nije potreban privremeni fajl
  3. Free and open-source: MIT licenca

Preduvjeti

PDF izvoz zahteva opcionalnu ReportLab zavisnost. Instalirajte je putem dodatka [pdf]:

pip install "aspose-note[pdf]"

Ako već imate aspose-note instaliran bez dodatka:

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

Proverite da je ReportLab dostupan:

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

Водич корак по корак

Korak 1: Instalirajte aspose-note sa 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 ceo dokument u PDF

Najjednostavniji izvoz, koji obuhvata sve stranice sa podrazumevanim podešavanjima:

from aspose.note import Document, SaveFormat

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

Korak 4: Koristite PdfSaveOptions

PdfSaveOptions vam omogućava da konfigurišete postavke 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

OpcijaTipPodrazumevanoOpis
PageIndexint0Polje postoji; nije prosleđeno PDF izvoznika u v26.3.1: nema efekta
PageCountint | NoneNonePolje postoji; nije prosleđeno PDF izvoznika u v26.3.1: nema efekta

Korak 5: Izvoz u memorijski tok

Document.Save() prihvata binarni tok direktno: nije potreban privremeni fajl:

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: Grupni izvoz više fajlova

Obradite sve .one fajlove u direktorijumu:

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 rešenja

1. ImportError: Nema modula pod imenom ‘reportlab’

Uzrok: Dodatak [pdf] nije instaliran.

Ispravka:

pip install "aspose-note[pdf]"

2. UnsupportedSaveFormatException

Uzrok: Korišćen je format drugačiji od SaveFormat.Pdf. Implementiran je samo SaveFormat.Pdf.

Ispravka: Uvek koristite SaveFormat.Pdf za izvoz. Ostali formati su deklarisani za API kompatibilnost, ali izazivaju UnsupportedSaveFormatException.

3. IncorrectPasswordException

Uzrok: Datoteka .one je šifrovana. Šifrovani dokumenti nisu podržani.

Fix: Koristite nešifrovani .one fajl. Komercijalni proizvod Aspose.Note podržava šifrovanje.

4. FileNotFoundError

Uzrok: Putanja ulaznog .one fajla je netačna.

Ispravka: Koristite pathlib.Path.exists() da biste validirali pre 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 tabele bez teksta). PDF renderer generiše stranice na osnovu onoga što ReportLab može da prikaže iz DOM‑a.

Fix: Proverite sadržaj stranice pre 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 za čuvanje su podržani?

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

Mogu li izvesti u tok umesto u fajl?

Da. Document.Save() prihvata bilo koji upisivi 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()

Da li izvoz čuva redosled stranica?

Da. Stranice se izvezu u istom redosledu u kojem se pojavljuju u DOM-u (redosled koji se dobija iteracijom Document).

Da li je izvoz u PDF dostupan na Linuxu?

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

Могу ли да извезем подскуп страница?

PdfSaveOptions.PageIndex i PageCount polja postoje, ali se ne prosleđuju PDF izvozniku u v26.3.1 i nemaju efekta: ceo dokument se uvek izveze.


Povezani resursi:

 Српски