Jak wyeksportować plik OneNote do PDF w Pythonie
Aspose.Note FOSS for Python umożliwia programowy eksport PDF plików sekcji Microsoft OneNote .one bez wymogu posiadania Microsoft Office ani żadnego konwertera dokumentów na poziomie systemu operacyjnego. Eksport jest obsługiwany przez metodę Document.Save() wspieraną przez opcjonalny renderer PDF ReportLab.
Korzyści
- Przyjazny dla serwera: działa na każdym systemie operacyjnym, w tym na bezgłowych serwerach Linux i kontenerach CI/CD
- Obsługa strumieni: zapisuj bezpośrednio do bufora
io.BytesIO, nie potrzebny plik tymczasowy - Darmowy i otwartoźródłowy: licencja MIT
Wymagania wstępne
Eksport PDF wymaga opcjonalnej zależności ReportLab. Zainstaluj ją za pomocą dodatkowego pakietu [pdf]:
pip install "aspose-note[pdf]"Jeśli już masz aspose-note zainstalowany bez dodatku:
pip install --upgrade "aspose-note[pdf]"Sprawdź, czy ReportLab jest dostępny:
python -c "import reportlab; print(reportlab.Version)"Przewodnik krok po kroku
Krok 1: Zainstaluj aspose-note z obsługą PDF
pip install "aspose-note[pdf]"Potwierdź instalację:
from aspose.note import Document, SaveFormat
print("Ready for PDF export.")Krok 2: Załaduj plik OneNote
from aspose.note import Document
doc = Document("MyNotes.one")Krok 3: Eksportuj cały dokument do PDF
Najprostszy eksport, obejmujący wszystkie strony z ustawieniami domyślnymi:
from aspose.note import Document, SaveFormat
doc = Document("MyNotes.one")
doc.Save("output.pdf", SaveFormat.Pdf)
print("PDF saved to output.pdf")Krok 4: Użyj PdfSaveOptions
PdfSaveOptions umożliwia skonfigurowanie ustawień eksportu PDF:
from aspose.note import Document
from aspose.note.saving import PdfSaveOptions
doc = Document("MyNotes.one")
opts = PdfSaveOptions()
doc.Save("output.pdf", opts)Dostępne PdfSaveOptions
| Opcja | Typ | Domyślne | Opis |
|---|---|---|---|
PageIndex | int | 0 | Pole istnieje; nie przekazywane do eksportera PDF w v26.3.1: nie ma wpływu |
PageCount | int | None | None | Pole istnieje; nie przekazywane do eksportera PDF w v26.3.1: nie ma wpływu |
Krok 5: Eksport do strumienia w pamięci
Document.Save() akceptuje strumień binarny bezpośrednio: nie jest potrzebny plik tymczasowy:
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")Krok 6: Masowa Eksportacja Wielu Plików
Przetwórz wszystkie pliki .one w katalogu:
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}")Typowe problemy i rozwiązania
1. ImportError: No module named ‘reportlab’
Przyczyna: Dodatek [pdf] nie został zainstalowany.
Naprawa:
pip install "aspose-note[pdf]"2. UnsupportedSaveFormatException
Przyczyna: Użyto formatu innego niż SaveFormat.Pdf. Zaimplementowano tylko SaveFormat.Pdf.
Fix: Zawsze używaj SaveFormat.Pdf do eksportu. Inne formaty są zadeklarowane dla zgodności API, ale wywołują UnsupportedSaveFormatException.
3. IncorrectPasswordException
Przyczyna: Plik .one jest zaszyfrowany. Zaszyfrowane dokumenty nie są obsługiwane.
Fix: Użyj niezaszyfrowanego pliku .one. Komercyjny produkt Aspose.Note obsługuje szyfrowanie.
4. FileNotFoundError
Przyczyna: Ścieżka pliku wejściowego .one jest nieprawidłowa.
Poprawka: Użyj pathlib.Path.exists(), aby zweryfikować przed załadowaniem:
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 wyjściowy jest pusty lub nie zawiera treści
Przyczyna: Plik .one zawiera strony, ale nie ma treści tekstowej (tylko obrazy lub tabele bez tekstu). Renderujący PDF generuje strony na podstawie tego, co ReportLab może wyrenderować z DOM.
Fix: Zweryfikuj zawartość strony przed eksportem:
from aspose.note import Document, RichText
doc = Document("MyNotes.one")
text_count = len(doc.GetChildNodes(RichText))
print(f"RichText nodes found: {text_count}")Najczęściej zadawane pytania
Jakie formaty zapisu są obsługiwane?
Tylko SaveFormat.Pdf jest obecnie zaimplementowany. Enum SaveFormat ma dokładnie jednego członka: SaveFormat.Pdf.
Czy mogę wyeksportować do strumienia zamiast do pliku?
Tak. Document.Save() akceptuje dowolny zapisywalny strumień binarny jako swój pierwszy 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()Czy eksport zachowuje kolejność stron?
Tak. Strony są eksportowane w takiej samej kolejności, w jakiej pojawiają się w DOM (kolejność zwracana podczas iteracji Document).
Czy eksport PDF jest dostępny w systemie Linux?
Tak. ReportLab i Aspose.Note FOSS for Python są oba niezależne od systemu operacyjnego.
Czy mogę wyeksportować podzbiór stron?
PdfSaveOptions.PageIndex i PageCount istnieją, ale nie są przekazywane do eksportera PDF w wersji v26.3.1 i nie mają wpływu: cały dokument jest zawsze eksportowany.
Powiązane zasoby: