Przegląd funkcji — Aspose.Note FOSS dla Python

Aspose.Note FOSS for Python (package aspose-note, wersja 26.3.1) zapewnia Python API do odczytywania Microsoft OneNote .one pliki sekcji i eksportowanie ich do PDF. Wszystkie wymienione poniżej funkcje zostały zweryfikowane względem kodu źródłowego repozytorium, README oraz przykładowych skryptów.

Instalacja i konfiguracja

Zainstaluj z PyPI:

pip install aspose-note

Aby uzyskać wsparcie eksportu do PDF (wymaga ReportLab):

pip install "aspose-note[pdf]"

Wymagania: Python 3.10 lub nowszy. Nie wymaga instalacji Microsoft Office.


Funkcje i możliwości

.Ładowanie plików .one

Wczytaj pliki sekcji Microsoft OneNote z ścieżki pliku lub dowolnego strumienia binarnego (uchwyt pliku, io.BytesIO, ciało odpowiedzi HTTP, strumień przechowywania w chmurze).

  • Document.FileFormat zapewnia przybliżoną informację o wersji formatu pliku OneNote (OneNote2010, OneNoteOnline lub OneNote2007)
  • Ładowanie oparte na strumieniu eliminuje operacje I/O na dysku w przepływach pracy w pamięci lub sieciowych
  • LoadOptions.LoadHistory flaga kontroluje, czy historia stron jest uwzględniona w DOM
from aspose.note import Document

##From a file path
doc = Document("notebook.one")

##From a binary stream
with open("notebook.one", "rb") as f:
    doc = Document(f)

Przeglądanie DOM dokumentu

Pełny dokument OneNote jest udostępniany jako drzewo typowanych obiektów Python. Każdy węzeł dziedziczy po Node lub CompositeNode:

  • Document: root; udostępnia DisplayName, CreationTime, FileFormat
  • Page: bezpośredni potomek Document; udostępnia Title, Author, CreationTime, LastModifiedTime, Level
  • Title:udostępnia TitleText, TitleDate, TitleTime (wszystkie RichText węzły)
  • Outline: pojemnik pozycyjny z HorizontalOffset, VerticalOffset, MaxWidth, MaxHeight, MinWidth, ReservedWidth, IndentPosition
  • OutlineElement: pojemnik liścia; udostępnia NumberList

Metody nawigacji na CompositeNode:

Metoda / WłaściwośćOpis
FirstChild, LastChildBezpośredni dostęp do potomka
GetChildNodes(Type)Rekurencyjne, filtrowane typowo wyszukiwanie
AppendChildLast(node)Dodaj dziecko na końcu
AppendChildFirst(node)Dodaj element podrzędny na początku
InsertChild(index, node)Wstaw na pozycję
RemoveChild(node)Usuń element podrzędny
for child in nodeIteruj bezpośrednie elementy podrzędne
from aspose.note import Document, Page, Outline, OutlineElement, RichText

doc = Document("notebook.one")
for page in doc.GetChildNodes(Page):
    title_text = page.Title.TitleText.Text if page.Title and page.Title.TitleText else ""
    print(f"Page: {title_text}")
    for outline in page.GetChildNodes(Outline):
        for oe in outline.GetChildNodes(OutlineElement):
            for rt in oe.GetChildNodes(RichText):
                print(f"  {rt.Text}")

Ekstrakcja treści sformatowanego tekstu

RichText węzły udostępniają:

  • Text: str: pełny ciąg znaków w formie zwykłego tekstu
  • TextRuns: list[TextRun]: lista sformatowanych segmentów
  • Tags: list[NoteTag]: tagi OneNote dołączone do tego bloku
  • Append(text, style=None): dodaj fragment tekstu w pamięci
  • Replace(old_value, new_value): zamiana ciągu znaków w pamięci

Każdy TextRun zawiera:

WłaściwośćTypOpis
TextstrTekst segmentu
StyleTextStyleMetadane formatowania

TextStyle właściwości:

WłaściwośćTyp
IsBold, IsItalic, IsUnderline, IsStrikethroughbool
IsSuperscript, IsSubscriptbool
FontName`str
FontSize`float
FontColor, Highlight`int
Language`int
IsHyperlinkbool
HyperlinkAddress`str
from aspose.note import Document, RichText

doc = Document("notebook.one")
for rt in doc.GetChildNodes(RichText):
    for run in rt.TextRuns:
        if run.Style.IsHyperlink:
            print(f"Hyperlink: {run.Text} -> {run.Style.HyperlinkAddress}")
        if run.Style.IsBold:
            print(f"Bold text: {run.Text}")

Ekstrakcja obrazów

Image węzły udostępniają surowe bajty i metadane dla każdego osadzonego obrazu:

WłaściwośćTypOpis
FileName`strNone`
BytesbytesSurowe dane obrazu
Width, Height`floatNone`
AlternativeTextTitle`strNone`
AlternativeTextDescription`strNone`
HyperlinkUrl`strNone`
Tagslist[NoteTag]Dołączone tagi OneNote
from aspose.note import Document, Image

doc = Document("notebook.one")
for i, img in enumerate(doc.GetChildNodes(Image), start=1):
    filename = img.FileName or f"image_{i}.bin"
    with open(filename, "wb") as f:
        f.write(img.Bytes)
    print(f"Saved: {filename}  ({img.Width} x {img.Height} pts)")

Ekstrakcja załączonych plików

AttachedFile węzły udostępniają osadzone załączniki plików:

WłaściwośćTypOpis
FileName`strNone`
BytesbytesSurowe dane pliku
Tagslist[NoteTag]Dołączone tagi OneNote
from aspose.note import Document, AttachedFile

doc = Document("notebook.one")
for i, af in enumerate(doc.GetChildNodes(AttachedFile), start=1):
    filename = af.FileName or f"attachment_{i}.bin"
    with open(filename, "wb") as f:
        f.write(af.Bytes)

Parsowanie tabel

Table, TableRow, oraz TableCell ujawnij pełną strukturę tabeli:

KlasaKluczowe właściwości
TableColumns: list[TableColumn] (każdy TableColumn ma .Width i .LockedWidth), IsBordersVisible: bool, Tags: list[NoteTag]
TableRowIteruj komórki przez GetChildNodes(TableCell)
TableCellZawiera RichText, Image, oraz inne węzły treści
from aspose.note import Document, Table, TableRow, TableCell, RichText

doc = Document("notebook.one")
for table in doc.GetChildNodes(Table):
    print("Column widths:", [col.Width for col in table.Columns])
    for r, row in enumerate(table.GetChildNodes(TableRow), start=1):
        cells = row.GetChildNodes(TableCell)
        values = [
            " ".join(rt.Text for rt in cell.GetChildNodes(RichText)).strip()
            for cell in cells
        ]
        print(f"Row {r}:", values)

Inspekcja tagów OneNote

NoteTag pojawia się na RichText, Image, AttachedFile, oraz Table węzły przez ich .Tags właściwość. OutlineElement nie posiada .Tags właściwość. NoteTag właściwości:

WłaściwośćTypOpis
Icon`intNone`
Label`strNone`
FontColor`intNone`
Highlight`intNone`
CreationTime`datetimeNone`
CompletedTime`datetimeNone`

Metoda fabryczna: NoteTag.CreateYellowStar() tworzy standardowy węzeł tagu żółtej gwiazdy.

from aspose.note import Document, RichText

doc = Document("notebook.one")
for rt in doc.GetChildNodes(RichText):
    for tag in rt.Tags:
        print(f"Tag: {tag.Label} (icon={tag.Icon}, completed={tag.CompletedTime})")

Obsługa list numerowanych

OutlineElement.NumberList udostępnia:

WłaściwośćTypOpis
Format`strNone`
Restart`intNone`
from aspose.note import Document, OutlineElement

doc = Document("notebook.one")
for oe in doc.GetChildNodes(OutlineElement):
    nl = oe.NumberList
    if nl:
        print(f"format={nl.Format!r}")

Przeglądanie DocumentVisitor

DocumentVisitor udostępnia wzorzec odwiedzającego do strukturalnego przeglądania całego dokumentu. Nadpisz dowolny VisitXxxStart / VisitXxxEnd metodę, aby przechwycić określone typy węzłów:

  • VisitDocumentStart(doc) / VisitDocumentEnd(doc)
  • VisitPageStart(page) / VisitPageEnd(page)
  • VisitTitleStart(title) / VisitTitleEnd(title)
  • VisitOutlineStart(outline) / VisitOutlineEnd(outline)
  • VisitOutlineElementStart(oe) / VisitOutlineElementEnd(oe)
  • VisitRichTextStart(rt) / VisitRichTextEnd(rt)
  • VisitImageStart(img) / VisitImageEnd(img)
from aspose.note import Document, DocumentVisitor, Page, RichText, Image

class MySummaryVisitor(DocumentVisitor):
    def __init__(self):
        self.pages, self.texts, self.images = 0, 0, 0

    def VisitPageStart(self, page: Page) -> None:
        self.pages += 1

    def VisitRichTextStart(self, rt: RichText) -> None:
        self.texts += 1

    def VisitImageStart(self, img: Image) -> None:
        self.images += 1

doc = Document("notebook.one")
v = MySummaryVisitor()
doc.Accept(v)
print(f"Pages={v.pages}  RichText={v.texts}  Images={v.images}")

Eksport PDF

Zapisz wczytany dokument jako PDF przy użyciu Document.Save(). Obsługiwane za pośrednictwem opcjonalnego backendu ReportLab.

from aspose.note import Document, SaveFormat

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

PdfSaveOptions

OpcjaTypOpis
PageIndexintPole istnieje; nie jest przekazywane do eksportera PDF w wersji 26.3.1 (nie ma wpływu)
PageCount`intNone`
ImageCompression`AnyNone`
JpegQuality`intNone`
PageSettings`AnyNone`
PageSplittingAlgorithm`AnyNone`
import io
from aspose.note import Document, SaveFormat
from aspose.note.saving import PdfSaveOptions

doc = Document("notebook.one")

##Save to file
doc.Save("output.pdf", SaveFormat.Pdf)

##Save to in-memory stream
buf = io.BytesIO()
doc.Save(buf, PdfSaveOptions())
pdf_bytes = buf.getvalue()

Referencja formatów i wyliczeń

SaveFormat

WartośćStatus
SaveFormat.PdfZaimplementowano (wymaga ReportLab)

FileFormat

Document.FileFormat zapewnia przybliżone wskazanie wersji formatu pliku OneNote. Enum deklaruje trzy wartości:

WartośćOpis
FileFormat.OneNote2010format OneNote 2010
FileFormat.OneNoteOnlineformat OneNote Online
FileFormat.OneNote2007format OneNote 2007

NodeType

NodeType.Document, NodeType.Page, NodeType.Outline, NodeType.OutlineElement, NodeType.RichText, NodeType.Image, NodeType.Table, NodeType.AttachedFile

HorizontalAlignment

HorizontalAlignment.Left, HorizontalAlignment.Center, HorizontalAlignment.Right


Obecne ograniczenia

OgraniczenieSzczegóły
Tylko do odczytuZapisz z powrotem do .one format nie jest zaimplementowany
Brak szyfrowaniaZaszyfrowane dokumenty wywołują IncorrectPasswordException
PDF tylko do eksportuInne SaveFormat wartości wywołują UnsupportedSaveFormatException
ReportLab wymagany do PDFZainstaluj pip install "aspose-note[pdf]" oddzielnie
GetPageHistory zwraca listę jednego elementuPełne przeglądanie historii strony jest szkieletem; zwraca [page]
DetectLayoutChanges()Szkielet kompatybilności; brak operacji

Wskazówki i najlepsze praktyki

  • Sprawdź, czy jest None: Page.Title, Title.TitleText, OutlineElement.NumberList, a większość pól metadanych może być None. Zawsze zabezpieczaj za pomocą if x is not None lub if x przed dostępem do właściwości.
  • Użyj GetChildNodes(Type) do rekurencyjnego wyszukiwania zamiast ręcznego iterowania drzewa. Przeszukuje cały poddrzewo.
  • Iteruj bezpośrednie elementy potomne z for child in node gdy potrzebujesz tylko bezpośrednich potomków.
  • Obsłuż kodowanie w systemie Windows: W systemie Windows, sys.stdout może używać starszej strony kodowej. Dodaj sys.stdout.reconfigure(encoding="utf-8", errors="replace") przy uruchamianiu podczas drukowania tekstu Unicode.
  • Zainstaluj [pdf] dodatkowe: Nie importuj SaveFormat.Pdf funkcjonalności bez wcześniejszej instalacji pip install "aspose-note[pdf]". Bez ReportLab, zapisywanie do PDF spowoduje błąd importu w czasie wykonywania.
 Polski