Cách xuất tệp OneNote sang PDF bằng Python
Aspose.Note FOSS for Python cho phép xuất PDF lập trình của các tệp tin Microsoft OneNote .one mà không cần Microsoft Office hay bất kỳ bộ chuyển đổi tài liệu ở mức hệ điều hành nào. Việc xuất được xử lý bởi phương thức Document.Save() được hỗ trợ bởi bộ render PDF tùy chọn ReportLab.
Lợi ích
- Thân thiện với máy chủ: chạy trên bất kỳ hệ điều hành nào, bao gồm cả các máy chủ Linux không giao diện và các container CI/CD
- Có khả năng stream: lưu trực tiếp vào một bộ đệm
io.BytesIO, không cần tệp tạm thời - Miễn phí và mã nguồn mở: giấy phép MIT
Điều kiện tiên quyết
Xuất PDF yêu cầu phụ thuộc tùy chọn ReportLab. Cài đặt nó qua phần mở rộng [pdf]:
pip install "aspose-note[pdf]"Nếu bạn đã cài đặt aspose-note mà không có phần mở rộng:
pip install --upgrade "aspose-note[pdf]"Xác minh rằng ReportLab có sẵn:
python -c "import reportlab; print(reportlab.Version)"Hướng Dẫn Từng Bước
Bước 1: Cài đặt aspose-note với hỗ trợ PDF
pip install "aspose-note[pdf]"Xác nhận cài đặt:
from aspose.note import Document, SaveFormat
print("Ready for PDF export.")Bước 2: Tải tệp OneNote
from aspose.note import Document
doc = Document("MyNotes.one")Bước 3: Xuất toàn bộ tài liệu sang PDF
Xuất đơn giản nhất, bao phủ tất cả các trang với cài đặt mặc định:
from aspose.note import Document, SaveFormat
doc = Document("MyNotes.one")
doc.Save("output.pdf", SaveFormat.Pdf)
print("PDF saved to output.pdf")Bước 4: Sử dụng PdfSaveOptions
PdfSaveOptions cho phép bạn cấu hình các cài đặt xuất PDF:
from aspose.note import Document
from aspose.note.saving import PdfSaveOptions
doc = Document("MyNotes.one")
opts = PdfSaveOptions()
doc.Save("output.pdf", opts)Các tùy chọn PdfSaveOptions khả dụng
| Option | Type | Default | Description |
|---|---|---|---|
PageIndex | int | 0 | Trường tồn tại; không được chuyển tiếp tới bộ xuất PDF trong v26.3.1: không có hiệu lực |
PageCount | int | None | None | Trường tồn tại; không được chuyển tiếp tới bộ xuất PDF trong v26.3.1: không có hiệu lực |
Bước 5: Xuất ra một luồng trong bộ nhớ
Document.Save() chấp nhận luồng nhị phân trực tiếp: không cần tệp tạm thời:
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")Bước 6: Xuất hàng loạt nhiều tệp
Xử lý tất cả các tệp .one trong một thư mục:
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}")Các vấn đề thường gặp và cách khắc phục
1. ImportError: Không có mô-đun nào có tên ‘reportlab’
Nguyên nhân: Phần mở rộng [pdf] chưa được cài đặt.
Sửa:
pip install "aspose-note[pdf]"2. UnsupportedSaveFormatException
Nguyên nhân: Đã sử dụng một định dạng khác ngoài SaveFormat.Pdf. Chỉ có SaveFormat.Pdf được triển khai.
Sửa: Luôn sử dụng SaveFormat.Pdf để xuất. Các định dạng khác được khai báo để tương thích API nhưng gây ra UnsupportedSaveFormatException.
3. IncorrectPasswordException
Nguyên nhân: Tệp .one được mã hoá. Các tài liệu được mã hoá không được hỗ trợ.
Fix: Sử dụng tệp không được mã hoá .one. Sản phẩm thương mại Aspose.Note hỗ trợ mã hoá.
4. FileNotFoundError
Nguyên nhân: Đường dẫn tệp .one đầu vào không đúng.
Sửa lỗi: Sử dụng pathlib.Path.exists() để xác thực trước khi tải:
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 đầu ra là trống hoặc không có nội dung
Nguyên nhân: Tệp .one chứa các trang nhưng không có nội dung văn bản (chỉ có hình ảnh hoặc bảng không có văn bản). Trình render PDF tạo các trang dựa trên những gì ReportLab có thể render từ DOM.
Sửa: Xác minh nội dung trang trước khi xuất:
from aspose.note import Document, RichText
doc = Document("MyNotes.one")
text_count = len(doc.GetChildNodes(RichText))
print(f"RichText nodes found: {text_count}")Câu hỏi thường gặp
Các định dạng lưu nào được hỗ trợ?
Chỉ SaveFormat.Pdf hiện đang được triển khai. Enum SaveFormat có đúng một thành viên: SaveFormat.Pdf.
Tôi có thể xuất ra một luồng thay vì một tệp không?
Có. Document.Save() chấp nhận bất kỳ luồng nhị phân có thể ghi nào làm đối số đầu tiên của nó:
import io
from aspose.note import Document, PdfSaveOptions, SaveFormat
doc = Document("MyNotes.one")
buf = io.BytesIO()
doc.Save(buf, PdfSaveOptions())
pdf_bytes = buf.getvalue()Việc xuất có giữ nguyên thứ tự trang không?
Có. Các trang được xuất theo cùng thứ tự chúng xuất hiện trong DOM (thứ tự được trả về khi lặp qua Document).
Xuất PDF có sẵn trên Linux không?
Vâng. ReportLab và Aspose.Note FOSS for Python đều độc lập với hệ điều hành.
Tôi có thể xuất một tập con các trang không?
Các trường PdfSaveOptions.PageIndex và PageCount tồn tại nhưng không được chuyển tới bộ xuất PDF trong v26.3.1 và không có tác dụng: toàn bộ tài liệu luôn được xuất.
Tài nguyên liên quan: