العمل مع وثيقة الملاحظات
وَالْمُتَّقِينَ Document فئة هي جذور Aspose.Note for Python Document Object Model (DOM). كل عملية القراءة أو التجول أو التصدير تبدأ بـ Document الحالة التي تمثل واحد واحد .one قسم الملفات .
تحميل وثيقة
تحميل من مسار الملفات
من خلال طريق إلى A .one الملفات مباشرة إلى Document البناء :
from aspose.note import Document
doc = Document("MyNotes.one")تحميل من سلك ثنائي
استخدم كائنًا يشبه الملف عندما تأتي البيانات من استجابة الشبكة أو بلوف التخزين في السحابة أو بوفير الذاكرة:
from pathlib import Path
from aspose.note import Document
with Path("MyNotes.one").open("rb") as f:
doc = Document(f)إنشاء وثيقة فارغة
بناء أ Document مع عدم وجود أي حجة لإنشاء وثيقة OneNote الجديدة برمجيات:
from aspose.note import Document, Page
doc = Document()
doc.AppendChildLast(Page())تحميل مع الخيارات
استخدام LoadOptions لتحديد المعلمات الاختيارية في وقت الشحن:
from aspose.note import Document, LoadOptions
opts = LoadOptions()
opts.LoadHistory = True # include page revision history in the DOM
doc = Document("MyNotes.one", opts)LoadOptions الممتلكات | نوع | الافتراضية | وصف |
|---|---|---|---|
LoadHistory | bool | False | عندما True,يتم تضمين مراجعات تاريخ الصفحة في DOM ويمكن الوصول إليها من خلال Document.GetPageHistory |
DocumentPassword | `str | None` | None |
الوثيقة المكتشفة
وَالْمُتَّقِينَ FileFormat الممتلكات تحدد أي شكل OneNote يختلف المستخدم في الملف:
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 القيمة | وصف |
|---|---|
OneNote2010 | المعيار .one الملفات التي كتبها OneNote 2010 وما بعده |
OneNoteOnline | .one الملفات التي كتبها OneNote Online / Microsoft 365 |
OneNote2007 | الأثر .one إصدار OneNote 2007 |
Unknown | لا يمكن تحديد النموذج |
صفحة إيتراين
الابن هو الطفل المباشر للطفل Document.استخدام أ for لعبة التداول بسيطة:
from aspose.note import Document
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}]")استخدام GetChildNodes(Page) للحصول على قائمة مكتوبة من جميع الصفحات في وقت واحد:
from aspose.note import Document, Page
doc = Document("MyNotes.one")
pages = doc.GetChildNodes(Page)
print(f"Total pages: {len(pages)}")الصفحة الميتات
| الممتلكات | نوع | وصف |
|---|---|---|
Title | `Title | None` |
Author | `str | None` |
CreationTime | `datetime | None` |
LastModifiedTime | `datetime | None` |
Level | `int | None` |
IsConflictPage | bool | True إذا كانت الصفحة نسخة من النزاع المزامن |
عبر شجرة الوثيقة
Document وراثة من CompositeNode,، وإعطائه طرق الشجرة الكاملة:
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))الهرم الديني :
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أساليب التداول المهمة التي تراثت من CompositeNode:
| طريقة | وصف |
|---|---|
GetChildNodes(NodeType) | إرجاع قائمة مكتوبة بجميع الأصليين المتوافقين مع النوع المحدد |
AppendChildLast(node) | إضافة عقدة للأطفال في نهاية قائمة الأطفال |
AppendChildFirst(node) | إضافة عقدة طفل في البداية |
InsertChild(index, node) | إدراج الطفل في مؤشر محدد |
RemoveChild(node) | إزالة عقدة طفل |
GetEnumerator() | إرسال رسالة خاصة إلى الأطفال المباشرين |
صفحة التاريخ
عندما يتم تحميلها مع LoadHistory=True, Document.GetPageHistory إرجاع جميع المراجعات المحفوظة من صفحة، أُرسلت من الأقدم إلى الأخير:
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}")ملاحظة:
GetPageHistoryعودة الفراغPageHistoryالموضوع عندماLoadHistoryهوFalse(الإضافة إلى المحدد) دائماopts.LoadHistory = Trueقبل تحميل إذا كنت بحاجة إلى بيانات مراجعة .
التوفير والتصدير
استخدام Document.Save PDF هو النموذج الوحيد الذي يتم دعمها للتصدير.
حفظ في ملف
from aspose.note import Document, SaveFormat
doc = Document("MyNotes.one")
doc.Save("output.pdf", SaveFormat.Pdf)حفظ في تدفق الذاكرة
import io
from aspose.note import Document, SaveFormat
doc = Document("MyNotes.one")
buf = io.BytesIO()
doc.Save(buf, SaveFormat.Pdf)
pdf_bytes = buf.getvalue()حفظ الخيارات
استخدام PdfSaveOptions (من aspose.note.saving( ) للتحكم في اختيار الصفحة :
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()أهمية: يتطلب تصدير PDF إدمان ReportLab الاختياري. تثبيته مع
pip install "aspose-note[pdf]".
اكتشاف التغييرات في التصميم
مكالمة DetectLayoutChanges بعد تعديل المستند لإعادة حساب قياسات التصميم قبل الادخار :
from aspose.note import Document, Page
doc = Document()
page = Page()
doc.AppendChildLast(page)
# ... add content to page ...
doc.DetectLayoutChanges()
doc.Save("output.pdf")نصائح وأفضل الممارسات
- تحميل مرة واحدة، استفسار عدة مرات:
Documentتحميل كامل.oneالملفات في ذاكرة على البناء - الحفاظ على واحدDocumentالحالة والاتصالGetChildNodesمرارا وتكرارا بدلا من إعادة تحميل الملف لكل استعلام. - التحقق
IsConflictPage: يمكن لـ OneNote sync إنتاج صفحات نزاع.[p for p in doc if not p.IsConflictPage]قبل إعادة تدوير المحتوى. - استخدام
LoadHistory=False(المتطلبات) لسرعة: تاريخ الصفحة يضيف ذاكرة كبيرة و أضف تعليق حول: فقط وضعLoadHistory=Trueعندما تحتاج بشكل صريح إلى بيانات التعديل. - تسرب الملفات الكبيرة: اجتياز موضوع ملف مفتوح بدلاً من شريط مسار عند القراءة الكبير
.oneالملفات لتجنب الاحتفاظ بالملف مفتوح بعد الانتهاء من المربع. - مكالمة
DetectLayoutChangesقبلSave:• عند إنشاء وثيقة برمجة وفتح العقدة، اتصلDetectLayoutChanges()لضمان أن تنسيقات التصميم هي متسقة قبل تصديرها إلى PDF.
القضايا المشتركة
| مسألة | سبب | تصحيح |
|---|---|---|
IncorrectPasswordException على تحميل | الملفات مشفرة؛ لا يتم دعم المستندات المشفرتها. | احصل على نسخة غير مشفرة من الملف |
FileCorruptedException على تحميل | الملفات التي يتم تشويهها أو لديها تنسيق داخلي غير مدعوم | تأكد من أن الملف صالحة .one القسم (لا أ .onetoc2 جدول المحتوى (Content) |
UnsupportedSaveFormatException على حفظ | محاولة حفظها في تنسيق آخر غير PDF | فقط SaveFormat.Pdf يتم دعمها للتصدير |
الفراغ GetPageHistory النتيجة | LoadOptions.LoadHistory لم يُعد مخصصاً ل True قبل تحميل | إعادة تحميل الوثيقة مع opts.LoadHistory = True |
ModuleNotFoundError: reportlab | PDF Export محاولة دون PDF إضافية | الركض pip install "aspose-note[pdf]" |
FAQ
ما هي تنسيقات OneNote التي يمكن قراءة Aspose.Notes؟?
جميع ثلاثة تنسيقات قسم OneNote: OneNote2007, OneNote2010,و ، و OneNoteOnline. استخدام doc.FileFormat لتحديد أي نوع من النوع تم تحميلها.
يمكنني أن أكتب مرة أخرى إلى .one هل تكتب بعد قراءتها؟?
لا، إعادة الكتابة إلى .one لا يتم تنفيذها.إخراج إلى PDF مع Document.Save هو من فقط دعم عمليات الإنتاج.
كيف أقرأ صفحة محددة حسب العنوان؟?
إدراج الصفحات ومقارنتها page.Title.TitleText.Text إلى الهدف الخاص بك:
from aspose.note import Document
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,
)كيف أعد الصفحات الفرعية منفصلة عن الصفات العليا؟?
استخدام page.Level:المستوى 1 هو المستويات العليا، المستوي 2 هو صفحة فرعية، وهلم جرا.
from aspose.note import Document
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)}")هل تدعم Aspose.Note .onetoc2 ملفات جدول المحتوى؟?
لا فقط .one يتم دعم ملفات القسم. .onetoc2 الكتب المكتوبة ترتفع FileCorruptedException.
إشارة API
| الفئة / الطريقة | وصف |
|---|---|
Document(path_or_stream, options?) | تحميل A .one إرسال أو إنشاء وثيقة فارغة |
Document.FileFormat | تداول الخيارات الثنائية (FileFormat إينوم ) |
Document.GetChildNodes(NodeType) | إعادة تثبيت جميع العقد التابعة لنوع معين |
Document.GetPageHistory(page) | احصل على تاريخ مراجعة لصفحة (متطلبات) LoadHistory=True) |
Document.Save(target, format_or_options) | تصدير إلى PDF حسب مسار الملف أو البث |
Document.DetectLayoutChanges() | إعادة حساب ميثاق التخطيط بعد التحرير البرمجي |
Document.Accept(visitor) | المشي في DOM باستخدام A DocumentVisitor الفئة الفرعية |
LoadOptions.LoadHistory | تثبيت إلى True إدراج مراجعات الصفحة في DOM |
LoadOptions.DocumentPassword | الملفات المحفوظة؛ تصفية ملفات مشفرة IncorrectPasswordException |
FileFormat | إينوم : OneNote2010, OneNoteOnline, OneNote2007, Unknown |
SaveFormat.Pdf | النموذج الوحيد الذي يتم دعمها للتصدير |
PageHistory.Count | عدد الصفحات المتاحة |
Page.Level | عمق الصفحة الفرعية (1 = المستوى العلوي) |
Page.IsConflictPage | True نسخ النزاع المزودة |
انظر أيضا
- نص استخراج: استخراج النص المسطح والعملات المصممة
- PDF تصدير: خيارات التصدير ، اختيار الصفحة ، ونتائج البث
- صور وملفات: استخراج الصور المدمجة والملفات المرفقة
- طاولات: تركيب لوحة البارسين ومحتوى الخلية
- إشارة API: الوثيقة