Jak wyeksportować plik OneNote do PDF w Pythonie

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

  1. Przyjazny dla serwera: działa na każdym systemie operacyjnym, w tym na bezgłowych serwerach Linux i kontenerach CI/CD
  2. Obsługa strumieni: zapisuj bezpośrednio do bufora io.BytesIO, nie potrzebny plik tymczasowy
  3. 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

OpcjaTypDomyślneOpis
PageIndexint0Pole istnieje; nie przekazywane do eksportera PDF w v26.3.1: nie ma wpływu
PageCountint | NoneNonePole 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:

 Polski