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-noteAby 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.FileFormatzapewnia 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.LoadHistoryflaga 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ępniaDisplayName,CreationTime,FileFormatPage: bezpośredni potomekDocument; udostępniaTitle,Author,CreationTime,LastModifiedTime,LevelTitle:udostępniaTitleText,TitleDate,TitleTime(wszystkieRichTextwęzły)Outline: pojemnik pozycyjny zHorizontalOffset,VerticalOffset,MaxWidth,MaxHeight,MinWidth,ReservedWidth,IndentPositionOutlineElement: pojemnik liścia; udostępniaNumberList
Metody nawigacji na CompositeNode:
| Metoda / Właściwość | Opis |
|---|---|
FirstChild, LastChild | Bezpoś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 node | Iteruj 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 tekstuTextRuns: list[TextRun]: lista sformatowanych segmentówTags: list[NoteTag]: tagi OneNote dołączone do tego blokuAppend(text, style=None): dodaj fragment tekstu w pamięciReplace(old_value, new_value): zamiana ciągu znaków w pamięci
Każdy TextRun zawiera:
| Właściwość | Typ | Opis |
|---|---|---|
Text | str | Tekst segmentu |
Style | TextStyle | Metadane formatowania |
TextStyle właściwości:
| Właściwość | Typ |
|---|---|
IsBold, IsItalic, IsUnderline, IsStrikethrough | bool |
IsSuperscript, IsSubscript | bool |
FontName | `str |
FontSize | `float |
FontColor, Highlight | `int |
Language | `int |
IsHyperlink | bool |
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ść | Typ | Opis |
|---|---|---|
FileName | `str | None` |
Bytes | bytes | Surowe dane obrazu |
Width, Height | `float | None` |
AlternativeTextTitle | `str | None` |
AlternativeTextDescription | `str | None` |
HyperlinkUrl | `str | None` |
Tags | list[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ść | Typ | Opis |
|---|---|---|
FileName | `str | None` |
Bytes | bytes | Surowe dane pliku |
Tags | list[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:
| Klasa | Kluczowe właściwości |
|---|---|
Table | Columns: list[TableColumn] (każdy TableColumn ma .Width i .LockedWidth), IsBordersVisible: bool, Tags: list[NoteTag] |
TableRow | Iteruj komórki przez GetChildNodes(TableCell) |
TableCell | Zawiera 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ść | Typ | Opis |
|---|---|---|
Icon | `int | None` |
Label | `str | None` |
FontColor | `int | None` |
Highlight | `int | None` |
CreationTime | `datetime | None` |
CompletedTime | `datetime | None` |
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ść | Typ | Opis |
|---|---|---|
Format | `str | None` |
Restart | `int | None` |
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
| Opcja | Typ | Opis |
|---|---|---|
PageIndex | int | Pole istnieje; nie jest przekazywane do eksportera PDF w wersji 26.3.1 (nie ma wpływu) |
PageCount | `int | None` |
ImageCompression | `Any | None` |
JpegQuality | `int | None` |
PageSettings | `Any | None` |
PageSplittingAlgorithm | `Any | None` |
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.Pdf | Zaimplementowano (wymaga ReportLab) |
FileFormat
Document.FileFormat zapewnia przybliżone wskazanie wersji formatu pliku OneNote. Enum deklaruje trzy wartości:
| Wartość | Opis |
|---|---|
FileFormat.OneNote2010 | format OneNote 2010 |
FileFormat.OneNoteOnline | format OneNote Online |
FileFormat.OneNote2007 | format 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
| Ograniczenie | Szczegóły |
|---|---|
| Tylko do odczytu | Zapisz z powrotem do .one format nie jest zaimplementowany |
| Brak szyfrowania | Zaszyfrowane dokumenty wywołują IncorrectPasswordException |
| PDF tylko do eksportu | Inne SaveFormat wartości wywołują UnsupportedSaveFormatException |
| ReportLab wymagany do PDF | Zainstaluj pip install "aspose-note[pdf]" oddzielnie |
GetPageHistory zwraca listę jednego elementu | Peł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 Nonelubif xprzed 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 nodegdy potrzebujesz tylko bezpośrednich potomków. - Obsłuż kodowanie w systemie Windows: W systemie Windows,
sys.stdoutmoże używać starszej strony kodowej. Dodajsys.stdout.reconfigure(encoding="utf-8", errors="replace")przy uruchamianiu podczas drukowania tekstu Unicode. - Zainstaluj
[pdf]dodatkowe: Nie importujSaveFormat.Pdffunkcjonalności bez wcześniejszej instalacjipip install "aspose-note[pdf]". Bez ReportLab, zapisywanie do PDF spowoduje błąd importu w czasie wykonywania.