Cum să exportați un fișier OneNote în PDF în Python

Cum să exportați un fișier OneNote în PDF în Python

Aspose.Note FOSS pentru Python permite exportul programatic în PDF al fișierelor de secțiune Microsoft OneNote .one fără a necesita Microsoft Office sau vreun convertor de documente la nivel de sistem de operare. Exportul este gestionat de metoda Document.Save() susținută de rendererul PDF opțional ReportLab.

Beneficii

  1. Prietenos cu serverul: rulează pe orice sistem de operare, inclusiv pe servere Linux fără interfață grafică și containere CI/CD
  2. Capabil de streaming: salvează direct într-un buffer io.BytesIO, fără a necesita fișier temporar
  3. Gratuit și open‑source: licență MIT

Precondiții

Exportul PDF necesită dependența opțională ReportLab. Instalați‑o prin extra [pdf]:

pip install "aspose-note[pdf]"

Dacă aveți deja aspose-note instalat fără extra:

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

Verificați dacă ReportLab este disponibil:

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

Ghid pas cu pas

Pasul 1: Instalați aspose-note cu suport PDF

pip install "aspose-note[pdf]"

Confirmă instalarea:

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

Pasul 2: Încarcă fișierul OneNote

from aspose.note import Document

doc = Document("MyNotes.one")

Pasul 3: Exportă întregul document în PDF

Cel mai simplu export, acoperind toate paginile cu setările implicite:

from aspose.note import Document, SaveFormat

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

Pasul 4: Utilizați PdfSaveOptions

PdfSaveOptions vă permite să configuraţi setările de export PDF:

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

doc = Document("MyNotes.one")

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

Disponibil PdfSaveOptions

OptionTypeDefaultDescription
PageIndexint0Câmpul există; nu este transmis exportatorului PDF în v26.3.1: nu are efect
PageCountint | NoneNoneCâmpul există; nu este transmis exportatorului PDF în v26.3.1: nu are efect

Pasul 5: Exportă într-un flux în memorie

Document.Save() acceptă un flux binar direct: nu este necesar niciun fișier temporar:

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

Pasul 6: Export în lot a mai multor fișiere

Procesează toate fișierele .one dintr-un director:

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

Probleme comune și soluții

1. ImportError: Nu există niciun modul numit ‘reportlab’

Cauză: Suplimentul [pdf] nu a fost instalat.

Remediere:

pip install "aspose-note[pdf]"

2. UnsupportedSaveFormatException

Cauză: A fost utilizat un format diferit de SaveFormat.Pdf. Doar SaveFormat.Pdf este implementat.

Remediere: Utilizați întotdeauna SaveFormat.Pdf pentru export. Alte formate sunt declarate pentru compatibilitatea API, dar declanșează UnsupportedSaveFormatException.

3. IncorrectPasswordException

Cauză: Fișierul .one este criptat. Documentele criptate nu sunt acceptate.

Fix: Utilizați un fișier necriptat .one. Produsul comercial Aspose.Note suportă criptarea.

4. FileNotFoundError

Cauză: Calea fișierului de intrare .one este incorectă.

Remediere: Utilizați pathlib.Path.exists() pentru a valida înainte de încărcare:

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-ul de ieșire este gol sau vid

Cauză: Fișierul .one conține pagini, dar nu are conținut text (doar imagini sau tabele fără text). Motorul PDF generează pagini pe baza a ceea ce ReportLab poate reda din DOM.

Fix: Verificați conținutul paginii înainte de exportare:

from aspose.note import Document, RichText

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

Întrebări frecvente

Ce formate de salvare sunt acceptate?

Doar SaveFormat.Pdf este implementat în prezent. Enumul SaveFormat are exact un membru: SaveFormat.Pdf.

Pot exporta într-un flux în loc de un fișier?

Da. Document.Save() acceptă orice flux binar scriibil ca primul său 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()

Exportul păstrează ordinea paginilor?

Da. Paginile sunt exportate în aceeași ordine în care apar în DOM (ordinea returnată prin iterarea Document).

Exportul PDF este disponibil pe Linux?

Da. ReportLab și Aspose.Note FOSS pentru Python sunt ambele independente de sistemul de operare.

Pot exporta un subset de pagini?

Câmpurile PdfSaveOptions.PageIndex și PageCount există, dar nu sunt transmise exportatorului PDF în v26.3.1 și nu au niciun efect: întregul document este întotdeauna exportat.


Resurse conexe:

 Română