Làm việc với tài liệu ghi chú

Hướng dẫn này giải thích cách tải, đi qua và xuất Microsoft OneNote .one Tải về Python bằng cách sử dụng Document lớp từ Aspose.Note FOSS.The Document lớp là gốc của mô hình đối tượng tài liệu (DOM), và mỗi hoạt động đọc, xuyên qua hoặc xuất bắt đầu với một Document Một trường hợp đại diện cho một đơn vị .one Phần file.


tải một tài liệu

Tải từ đường dẫn tệp

Đi qua con đường đến A .one file trực tiếp đến Document Nhà xây dựng:

from aspose.note import Document

doc = Document("MyNotes.one")

Tải từ luồng nhị phân

Sử dụng một đối tượng giống như tệp khi dữ liệu đến từ phản ứng mạng, đám mây lưu trữ blob hoặc trong bộ nhớ buffer:

from pathlib import Path
from aspose.note import Document

with Path("MyNotes.one").open("rb") as f:
    doc = Document(f)

Tạo một tài liệu trống rỗng

Xây dựng a Document không có lý do để xây dựng một tài liệu OneNote mới theo chương trình:

from aspose.note import Document, Page

doc = Document()
doc.AppendChildLast(Page())

tải với các tùy chọn

Sử dụng LoadOptions để thiết lập các thông số tùy chọn như lịch sử tải tại thời gian xây dựng:

from aspose.note import Document, LoadOptions

opts = LoadOptions()
opts.LoadHistory = True   # include page revision history in the DOM
doc = Document("MyNotes.one", opts)
LoadOptions Tài sảnTypeDefaultDescription
LoadHistoryboolFalseWhen True, các đánh giá lịch sử trang được bao gồm trong DOM và có thể truy cập qua Document.GetPageHistory
DocumentPassword`strNone`None

Document Format Phát hiện

Các FileFormat thuộc tính xác định loại hình OneNote nào mà tệp sử dụng:

from aspose.note import Document, FileFormat

doc = Document("MyNotes.one")

if doc.FileFormat == FileFormat.OneNote2010:
    print("OneNote 2010 format")
elif doc.FileFormat == FileFormat.OneNoteOnline:
    print("OneNote Online format")
elif doc.FileFormat == FileFormat.OneNote2007:
    print("OneNote 2007 format")
else:
    print("Format:", doc.FileFormat)
FileFormat Giá trịDescription
OneNote2010Standard .one Tệp được viết bởi OneNote 2010 và sau đó
OneNoteOnline.one Tệp được viết bởi OneNote Online / Microsoft 365
OneNote2007Legacy .one Bản mẫu OneNote 2007
UnknownFormat không thể xác định được

Lặp qua Các Trang

Các trang là những đứa trẻ trực tiếp của Document.Sử dụng a for Lời bài hát: Simple Iteration:

doc = Document(“MyNotes.one”)

for page in doc: title_text = ( page.Title.TitleText.Text if page.Title and page.Title.TitleText else “(untitled)” ) author = page.Author or “(unknown)” level = page.Level or 1 indent = " " * (level - 1) print(f"{indent}{title_text} [by {author}]")


Sử dụng `GetChildNodes(Page)` Để có được một danh sách viết của tất cả các trang cùng một lúc:

doc = Document("MyNotes.one")
pages = doc.GetChildNodes(Page)
print(f"Total pages: {len(pages)}")

Trang Metadata

PropertyTypeDescription
Title`TitleNone`
Author`strNone`
CreationTime`datetimeNone`
LastModifiedTime`datetimeNone`
Level`intNone`
IsConflictPageboolTrue Nếu trang là một bản sao xung đột đồng bộ

Đi qua cây tài liệu

Document thừa kế từ CompositeNode, cho nó đầy đủ cây qua phương pháp:

from aspose.note import Document, RichText

doc = Document("MyNotes.one")

# Extract all plain text from the entire document
all_text = [rt.Text for rt in doc.GetChildNodes(RichText) if rt.Text]
print("\n".join(all_text))

Hiến pháp DOM:

Document
  └── Page (0..n)
        ├── Title
        │     ├── TitleText (RichText)
        │     ├── TitleDate (RichText)
        │     └── TitleTime (RichText)
        └── Outline (0..n)
              └── OutlineElement (0..n)
                    ├── RichText
                    ├── Image
                    ├── Table
                    │     └── TableRow → TableCell → RichText / Image
                    └── AttachedFile

Các phương pháp giao thông chính được thừa hưởng từ CompositeNode:

MethodDescription
GetChildNodes(NodeType)Trả lại danh sách được viết của tất cả các con người phù hợp với loại cụ thể
AppendChildLast(node)Thêm nút trẻ em ở cuối danh sách trẻ Em
AppendChildFirst(node)Thêm một nút trẻ em vào đầu
InsertChild(index, node)Nhập một đứa trẻ vào một chỉ số cụ thể
RemoveChild(node)Xóa một nút trẻ em
GetEnumerator()Tự động trẻ em Iterate

Lịch sử Page

Khi tải với LoadHistory=True, Document.GetPageHistory Gửi lại tất cả các bản sửa đổi được tiết kiệm Từ trang cũ nhất đến mới nhất:

from aspose.note import Document, LoadOptions

opts = LoadOptions()
opts.LoadHistory = True
doc = Document("MyNotes.one")

for page in doc.GetChildNodes(None.__class__.__mro__[0]):  # iterate pages
    pass

# Get revisions for a specific page
import aspose.note as an

doc2 = Document("MyNotes.one", opts)
pages = doc2.GetChildNodes(an.Page)
if pages:
    history = doc2.GetPageHistory(pages[0])
    print(f"Revision count: {history.Count}")
    for rev in history:
        print(f"  Modified: {rev.LastModifiedTime}")

Note: GetPageHistory Lại trở lại một cái trống PageHistory đối tượng khi LoadHistoryFalse (được đặt) Luôn luôn thiết lập opts.LoadHistory = True Trước khi tải nếu cần thiết dữ liệu sửa đổi.


tiết kiệm và xuất khẩu

Sử dụng Document.Save PDF là định dạng xuất khẩu duy nhất được hỗ trợ.

Lưu vào một file

Call Document.Save() Với một file path và SaveFormat.Pdf để viết xuất trực tiếp vào đĩa:

from aspose.note import Document, SaveFormat

doc = Document("MyNotes.one")
doc.Save("output.pdf", SaveFormat.Pdf)

Lưu vào một dòng in-memory

Gửi một viết io.BytesIO buffer thay vì một con đường để chụp các byte PDF trong bộ nhớ:

import io
from aspose.note import Document, SaveFormat

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

Tiết kiệm với các tùy chọn

Sử dụng PdfSaveOptions Từ aspose.note.saving để kiểm tra các trang nào được bao gồm trong xuất PDF xuất khẩu:

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

doc = Document("MyNotes.one")

# Export pages 2 and 3 only (zero-based index)
opts = PdfSaveOptions(PageIndex=1, PageCount=2)
buf = io.BytesIO()
doc.Save(buf, opts)
pdf_bytes = buf.getvalue()

Important: PDF xuất cần tùy chọn ReportLab phụ thuộc. Cài đặt với pip install "aspose-note[pdf]".


Chẩn đoán thay đổi layout

Call DetectLayoutChanges sau khi sửa đổi tài liệu để tính toán lại các phương pháp bố trí Trước khi tiết kiệm:

doc = Document() page = Page() doc.AppendChildLast(page)

… add content to page …

doc.DetectLayoutChanges() doc.Save(“output.pdf”)


---

## Mẹo và Thực hành Tốt nhất

- **Lấy một lần, hỏi nhiều lần**: `Document` tải toàn bộ `.one` file vào memory on Đặt 1 - Hold One `Document` trường hợp và gọi điện thoại `GetChildNodes` Thường xuyên hơn là nhiều lần tải lại tệp cho mỗi truy vấn.
- **Check `IsConflictPage`**: OneNote đồng bộ có thể tạo các trang xung đột. `[p for p in doc if not p.IsConflictPage]` trước khi xử lý nội dung.
- **Sử dụng `LoadHistory=False` (được mặc định) cho tốc độ**: Lịch sử trang thêm bộ nhớ đáng kể và Đặt hàng: Chỉ đặt `LoadHistory=True` khi bạn cần dữ liệu sửa đổi.
- **Stream cho các tập tin lớn**: Đi qua một đối tượng tệp mở thay vì đường dây khi đọc lớn `.one` file để tránh giữ tệp mở sau khi parse hoàn thành.
- **Call `DetectLayoutChanges` trước đây `Save`**:Khi xây dựng một tài liệu lập trình và mở các nút, gọi `DetectLayoutChanges()` Để đảm bảo các coordinates layout là liên tục trước khi xuất sang PDF.

---

## Các vấn đề thường gặp

| Issue                                      | Cause                                                                  | Fix Đặt                                                                               |
| ------------------------------------------ | ---------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
| `IncorrectPasswordException` trên tải      | File được mã hóa; tài liệu mã hoá không được hỗ trợ                    | Nhận một bản sao không mã hóa của tệp                                                 |
| `FileCorruptedException` trên tải          | Tệp bị truncate hoặc có định dạng nội bộ không được hỗ trợ             | Kiểm tra file là hợp lệ `.one` Phần (không phải A) `.onetoc2` Bảng nội dung (Content) |
| `UnsupportedSaveFormatException` trên Save | Cố gắng lưu vào định dạng khác ngoài PDF                               | Chỉ có định dạng PDF được hỗ trợ cho xuất khẩu                                        |
| Empty `GetPageHistory` Kết quả             | `LoadOptions.LoadHistory` Không được thiết lập để `True` Trước khi tải | tải lại tài liệu với `opts.LoadHistory = True`                                        |
| `ModuleNotFoundError: reportlab`           | PDF xuất khẩu cố gắng mà không có thêm PDF                             | chạy `pip install "aspose-note[pdf]"`                                                 |

---

## FAQ

#### Các định dạng OneNote có thể đọc Aspose.Notes?

Tất cả ba định dạng phần OneNote: `OneNote2007`, `OneNote2010`, và `OneNoteOnline`. Sử dụng `doc.FileFormat` để xác định biến thể nào đã được tải lên.

#### Có thể viết lại cho A `.one` file sau khi đọc nó?

Aspose.Note for Python is a read-and-export library. Use `Document.Save` để viết PDF output. OneNote định dạng nhị phân được đọc chỉ trong phiên bản FOSS này.

#### Làm thế nào để đọc một trang cụ thể theo tiêu đề?

Tích hợp các trang với một biểu thức máy phát và so sánh tài sản văn bản tiêu đề với dòng mục tiêu của bạn:

doc = Document("MyNotes.one")
target = next(
    (p for p in doc
     if p.Title and p.Title.TitleText and p.Title.TitleText.Text == "My Page"),
    None,
)

Làm thế nào để tôi tính toán các trang phụ riêng biệt từ các Trang cấp cao?

Sử dụng page.Level: cấp 1 là cấp cao, cấp 2 là một trang phụ, và như vậy.

doc = Document(“MyNotes.one”) top_level = [p for p in doc if (p.Level or 1) == 1] sub_pages = [p for p in doc if (p.Level or 1) > 1] print(f"Top-level: {len(top_level)}, Sub-pages: {len(sub_pages)}")


#### Hỗ trợ Aspose.Note `.onetoc2` Tệp bảng của các nội dung?

Không chỉ `.one` Phần file được hỗ trợ. `.onetoc2` Notebook sẽ tăng lên `FileCorruptedException`.

---

## Tóm tắt Tham chiếu API

| Class / Phương pháp                        | Description                                                                            |
| ------------------------------------------ | -------------------------------------------------------------------------------------- |
| `Document(path_or_stream, options?)`       | tải a `.one` file hoặc tạo một tài liệu trống                                          |
| `Document.FileFormat`                      | Tính năng khác nhau (`FileFormat` ĐIỀU)                                                |
| `Document.GetChildNodes(NodeType)`         | Tự hủy tất cả các nút kế thừa của một loại cụ thể                                      |
| `Document.GetPageHistory(page)`            | Nhận lịch sử sửa đổi cho một trang (cần) `LoadHistory=True`)                           |
| `Document.Save(target, format_or_options)` | Xuất sang PDF theo đường file hoặc dòng                                                |
| `Document.DetectLayoutChanges()`           | Tái tính toán các định dạng sau khi chỉnh sửa lập trình                                |
| `Document.Accept(visitor)`                 | Đi bộ DOM bằng cách sử dụng A `DocumentVisitor` Subclass                               |
| `LoadOptions.LoadHistory`                  | Set cho `True` Để bao gồm các sửa đổi trang trong DOM                                  |
| `LoadOptions.DocumentPassword`             | Bảo hành; file mã hóa upload `IncorrectPasswordException`                              |
| `FileFormat`                               | Enum : `OneNote2010`, `OneNoteOnline`, `OneNote2007`, `Unknown`                        |
| `SaveFormat.Pdf`                           | Định dạng xuất khẩu duy nhất được hỗ trợ; tăng `ValueError` Đối với các định dạng khác |
| `PageHistory.Count`                        | Số lượng trang xem xét có sẵn                                                          |
| `Page.Level`                               | Dung tích trang dưới (1 = cấp cao)                                                     |
| `Page.IsConflictPage`                      | `True` cho các bản sao xung đột sync                                                   |

---

## See Also

- [Text Extraction Tác giả](text-extraction/): lấy ra văn bản thẳng và định dạng runs
- [PDF xuất khẩu](pdf-export/): tùy chọn xuất khẩu, lựa chọn trang và dòng sản lượng
- [Hình ảnh và phụ kiện](images-and-attachments/): lấy ra hình ảnh tích hợp và tệp gắn kết
- [Tables](tables/): cấu trúc bảng parsing và nội dung tế bào
- [API Reference: Tài liệu](https://reference.aspose.org/note/python/document/)
- [Aspose.Note — Enterprise Documentation](https://docs.aspose.com/note/)
 Tiếng Việt