Hur man exporterar en OneNote-fil till PDF i Python

Hur man exporterar en OneNote-fil till PDF i Python

Aspose.Note FOSS för Python möjliggör programmatisk PDF‑export av Microsoft OneNote .one sektionfiler utan att kräva Microsoft Office eller någon dokumentkonverterare på operativsystemsnivå. Export hanteras av Document.Save()‑metoden som stöds av den valfria ReportLab PDF‑renderaren.

Fördelar

  1. Servervänlig: kör på alla OS, inklusive huvudlösa Linux-servrar och CI/CD-containrar
  2. Strömkapabel: spara direkt till en io.BytesIO‑buffer, ingen temporär fil behövs
  3. Fri och öppen källkod: MIT-licens

Förutsättningar

PDF‑export kräver det valfria ReportLab‑beroendet. Installera det via [pdf] extra:

pip install "aspose-note[pdf]"

Om du redan har aspose-note installerad utan extra:

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

Verifiera att ReportLab är tillgängligt:

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

Steg-för-steg-guide

Steg 1: Installera aspose-note med PDF‑stöd

pip install "aspose-note[pdf]"

Bekräfta installationen:

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

Steg 2: Ladda OneNote-filen

from aspose.note import Document

doc = Document("MyNotes.one")

Steg 3: Exportera hela dokumentet till PDF

Den enklaste exporten, som täcker alla sidor med standardinställningar:

from aspose.note import Document, SaveFormat

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

Steg 4: Använd PdfSaveOptions

PdfSaveOptions låter dig konfigurera PDF-exportinställningar:

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

doc = Document("MyNotes.one")

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

Tillgängliga PdfSaveOptions

AlternativTypStandardBeskrivning
PageIndexint0Fältet finns; inte vidarebefordras till PDF-exportören i v26.3.1: har ingen effekt
PageCountint | NoneNoneFältet finns; inte vidarebefordras till PDF-exportören i v26.3.1: har ingen effekt

Steg 5: Exportera till en minnesström

Document.Save() accepterar en binär ström direkt: ingen temporär fil behövs:

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

Steg 6: Batchexport av flera filer

Bearbeta alla .one-filer i en katalog:

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

Vanliga problem och lösningar

1. ImportError: Ingen modul med namn ‘reportlab’

Orsak: Tillägget [pdf] var inte installerat.

Fix:

pip install "aspose-note[pdf]"

2. UnsupportedSaveFormatException

Cause: Ett format annat än SaveFormat.Pdf användes. Endast SaveFormat.Pdf är implementerat.

Fix: Använd alltid SaveFormat.Pdf för export. Andra format deklareras för API‑kompatibilitet men utlöser UnsupportedSaveFormatException.

3. IncorrectPasswordException

Orsak: Filen .one är krypterad. Krypterade dokument stöds inte.

Fix: Använd en okrypterad .one-fil. Den kommersiella Aspose.Note-produkten stöder kryptering.

4. FileNotFoundError

Orsak: Inmatningsfilens .one sökväg är felaktig.

Fix: Använd pathlib.Path.exists() för att validera innan laddning:

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. Utdata‑PDF är tom eller tom

Orsak: Filen .one innehåller sidor men ingen textinnehåll (endast bilder eller tabeller utan text). PDF-renderaren skapar sidor baserat på vad ReportLab kan rendera från DOM.

Fix: Verifiera sidinnehåll innan export:

from aspose.note import Document, RichText

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

Vanliga frågor

Vilka sparformat stöds?

Endast SaveFormat.Pdf är för närvarande implementerad. Enumen SaveFormat har exakt en medlem: SaveFormat.Pdf.

Kan jag exportera till en ström istället för en fil?

Ja. Document.Save() accepterar vilken skrivbar binärström som helst som sitt första 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()

Behåller export sidordningen?

Ja. Sidor exporteras i samma ordning som de visas i DOM (ordningen som returneras genom att iterera Document).

Finns PDF‑export tillgänglig på Linux?

Ja. ReportLab och Aspose.Note FOSS för Python är båda OS-oberoende.

Kan jag exportera en delmängd av sidor?

PdfSaveOptions.PageIndex och PageCount-fält finns men vidarebefordras inte till PDF-exportören i v26.3.1 och har ingen effekt: hela dokumentet exporteras alltid.


Relaterade resurser:

 Svenska