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
- Servervänlig: kör på alla OS, inklusive huvudlösa Linux-servrar och CI/CD-containrar
- Strömkapabel: spara direkt till en
io.BytesIO‑buffer, ingen temporär fil behövs - 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
| Alternativ | Typ | Standard | Beskrivning |
|---|---|---|---|
PageIndex | int | 0 | Fältet finns; inte vidarebefordras till PDF-exportören i v26.3.1: har ingen effekt |
PageCount | int | None | None | Fä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: