العمل مع وثيقة الملاحظات

وَالْمُتَّقِينَ 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 الممتلكاتنوعالافتراضيةوصف
LoadHistoryboolFalseعندما True,يتم تضمين مراجعات تاريخ الصفحة في DOM ويمكن الوصول إليها من خلال Document.GetPageHistory
DocumentPassword`strNone`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`TitleNone`
Author`strNone`
CreationTime`datetimeNone`
LastModifiedTime`datetimeNone`
Level`intNone`
IsConflictPageboolTrue إذا كانت الصفحة نسخة من النزاع المزامن

عبر شجرة الوثيقة

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: reportlabPDF 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.IsConflictPageTrue نسخ النزاع المزودة

انظر أيضا

 العربية