Πώς να εξάγετε ένα αρχείο OneNote σε PDF με Python
Το Aspose.Note FOSS για Python επιτρέπει την προγραμματιστική εξαγωγή PDF αρχείων ενότητας .one του Microsoft OneNote χωρίς την ανάγκη του Microsoft Office ή οποιουδήποτε μετατροπέα εγγράφων σε επίπεδο λειτουργικού συστήματος. Η εξαγωγή γίνεται από τη μέθοδο Document.Save(), η οποία υποστηρίζεται από τον προαιρετικό renderer PDF ReportLab.
Οφέλη
- Server-friendly: λειτουργεί σε οποιοδήποτε λειτουργικό σύστημα, συμπεριλαμβανομένων των headless Linux διακομιστών και των containers CI/CD
- Stream-capable: αποθηκεύει απευθείας σε έναν
io.BytesIObuffer, χωρίς ανάγκη προσωρινού αρχείου - 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
| Option | Type | Default | Description |
|---|---|---|---|
PageIndex | int | 0 | Το πεδίο υπάρχει· δεν προωθείται στον εξαγωγέα PDF στην έκδοση v26.3.1: δεν έχει καμία επίδραση |
PageCount | int | None | None | Το πεδίο υπάρχει· δεν προωθείται στον εξαγωγέα 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 και δεν έχουν καμία επίδραση: ολόκληρο το έγγραφο εξάγεται πάντα.
Σχετικοί Πόροι: