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
- Server-friendly: radi na bilo kojem OS-u, uključujući headless Linux servere i CI/CD kontejnere
- Stream-capable: sačuvajte direktno u
io.BytesIObafer, nije potreban privremeni fajl - 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
| Opcija | Tip | Podrazumevano | Opis |
|---|---|---|---|
PageIndex | int | 0 | Polje postoji; nije prosleđeno PDF izvoznika u v26.3.1: nema efekta |
PageCount | int | None | None | Polje 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: