Πώς να εξάγετε ένα αρχείο OneNote σε PDF με Python

Πώς να εξάγετε ένα αρχείο OneNote σε PDF με Python

Το Aspose.Note FOSS για Python επιτρέπει την προγραμματιστική εξαγωγή PDF αρχείων ενότητας .one του Microsoft OneNote χωρίς την ανάγκη του Microsoft Office ή οποιουδήποτε μετατροπέα εγγράφων σε επίπεδο λειτουργικού συστήματος. Η εξαγωγή γίνεται από τη μέθοδο Document.Save(), η οποία υποστηρίζεται από τον προαιρετικό renderer PDF ReportLab.

Οφέλη

  1. Server-friendly: λειτουργεί σε οποιοδήποτε λειτουργικό σύστημα, συμπεριλαμβανομένων των headless Linux διακομιστών και των containers CI/CD
  2. Stream-capable: αποθηκεύει απευθείας σε έναν io.BytesIO buffer, χωρίς ανάγκη προσωρινού αρχείου
  3. Free and open-source: άδεια MIT

Προαπαιτούμενα

Η εξαγωγή PDF απαιτεί την προαιρετική εξάρτηση ReportLab. Εγκαταστήστε την μέσω του πρόσθετου [pdf]:

pip install "aspose-note[pdf]"

Αν έχετε ήδη εγκαταστήσει το aspose-note χωρίς το πρόσθετο:

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

Επαληθεύστε ότι το ReportLab είναι διαθέσιμο:

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

Οδηγός βήμα-βήμα

Βήμα 1: Εγκαταστήστε το aspose-note με υποστήριξη PDF

pip install "aspose-note[pdf]"

Επιβεβαιώστε την εγκατάσταση:

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

Βήμα 2: Φόρτωση του αρχείου OneNote

from aspose.note import Document

doc = Document("MyNotes.one")

Βήμα 3: Εξαγωγή ολόκληρου του εγγράφου σε PDF

Η πιο απλή εξαγωγή, καλύπτοντας όλες τις σελίδες με τις προεπιλεγμένες ρυθμίσεις:

from aspose.note import Document, SaveFormat

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

Βήμα 4: Χρησιμοποιήστε το PdfSaveOptions

PdfSaveOptions σας επιτρέπει να διαμορφώσετε τις ρυθμίσεις εξαγωγής PDF:

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

doc = Document("MyNotes.one")

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

Διαθέσιμες PdfSaveOptions

OptionTypeDefaultDescription
PageIndexint0Το πεδίο υπάρχει· δεν προωθείται στον εξαγωγέα PDF στην έκδοση v26.3.1: δεν έχει καμία επίδραση
PageCountint | NoneNoneΤο πεδίο υπάρχει· δεν προωθείται στον εξαγωγέα PDF στην έκδοση v26.3.1: δεν έχει καμία επίδραση

Βήμα 5: Εξαγωγή σε ροή μνήμης

Document.Save() δέχεται ένα δυαδικό ρεύμα άμεσα: δεν απαιτείται προσωρινό αρχείο:

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

Βήμα 6: Μαζική εξαγωγή πολλαπλών αρχείων

Επεξεργαστείτε όλα τα αρχεία .one σε έναν κατάλογο:

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

Κοινά Προβλήματα και Διορθώσεις

1. ImportError: Δεν βρέθηκε το module ‘reportlab’

Αιτία: Το πρόσθετο [pdf] δεν εγκαταστάθηκε.

Διόρθωση:

pip install "aspose-note[pdf]"

2. UnsupportedSaveFormatException

Αιτία: Χρησιμοποιήθηκε μορφή διαφορετική από SaveFormat.Pdf. Υλοποιείται μόνο SaveFormat.Pdf.

Διόρθωση: Χρησιμοποιήστε πάντα SaveFormat.Pdf για εξαγωγή. Άλλες μορφές δηλώνονται για συμβατότητα API αλλά προκαλούν UnsupportedSaveFormatException.

3. IncorrectPasswordException

Αιτία: Το αρχείο .one είναι κρυπτογραφημένο. Τα κρυπτογραφημένα έγγραφα δεν υποστηρίζονται.

Διόρθωση: Χρησιμοποιήστε ένα μη κρυπτογραφημένο .one αρχείο. Το εμπορικό προϊόν Aspose.Note υποστηρίζει κρυπτογράφηση.

4. FileNotFoundError

Αιτία: Η διαδρομή του αρχείου εισόδου .one είναι λανθασμένη.

Διόρθωση: Χρησιμοποιήστε pathlib.Path.exists() για να επικυρώσετε πριν από τη φόρτωση:

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 εξόδου είναι κενό ή άδειο

Αιτία: Το αρχείο .one περιέχει σελίδες αλλά δεν έχει περιεχόμενο κειμένου (μόνο εικόνες ή πίνακες χωρίς κείμενο). Ο PDF renderer δημιουργεί σελίδες βάσει του τι μπορεί να αποδώσει το ReportLab από το DOM.

Διόρθωση: Επαληθεύστε το περιεχόμενο της σελίδας πριν από την εξαγωγή:

from aspose.note import Document, RichText

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

Συχνές Ερωτήσεις

Ποιες μορφές αποθήκευσης υποστηρίζονται;

Μόνο το SaveFormat.Pdf είναι αυτή τη στιγμή υλοποιημένο. Το enum SaveFormat έχει ακριβώς ένα μέλος: SaveFormat.Pdf.

Μπορώ να εξάγω σε ροή αντί για αρχείο;

Ναι. Document.Save() δέχεται οποιαδήποτε εγγράψιμη δυαδική ροή ως το πρώτο της όρισμα:

import io
from aspose.note import Document, PdfSaveOptions, SaveFormat

doc = Document("MyNotes.one")
buf = io.BytesIO()
doc.Save(buf, PdfSaveOptions())
pdf_bytes = buf.getvalue()

Διατηρεί η εξαγωγή τη σειρά των σελίδων;

Ναι. Οι σελίδες εξάγονται με την ίδια σειρά με την οποία εμφανίζονται στο DOM (η σειρά που επιστρέφεται κατά την επανάληψη του Document).

Η εξαγωγή PDF είναι διαθέσιμη σε Linux;

Ναι. ReportLab και Aspose.Note FOSS for Python είναι και τα δύο ανεξάρτητα από το λειτουργικό σύστημα.

Μπορώ να εξάγω ένα υποσύνολο σελίδων;

Τα πεδία PdfSaveOptions.PageIndex και PageCount υπάρχουν, αλλά δεν προωθούνται στον εξαγωγέα PDF στην έκδοση v26.3.1 και δεν έχουν καμία επίδραση: ολόκληρο το έγγραφο εξάγεται πάντα.


Σχετικοί Πόροι:

 Ελληνικά