Navigare cu Cursor
În timp ce lucrați cu un document, chiar dacă este unul scurt sau lung, va trebui să navigați prin documentul dvs. Navigarea cu un cursor virtual reprezintă capacitatea de a naviga între diferite noduri dintr-un document.
Într-un document scurt, deplasarea într-un document este simplă, deoarece puteți muta punctul de inserare chiar și folosind tastele săgeată ale tastaturii sau făcând clic pe mouse pentru a localiza punctul de inserare oriunde doriți. Dar odată ce aveți un document mare care are multe pagini, aceste tehnici de bază vor fi insuficiente.
Acest articol explică cum să vă deplasați într-un document și să navigați cu un cursor virtual în diferite părți ale acestuia.
Detectarea Poziției Curente A Cursorului
Înainte de a începe procesul de navigare prin documentul dvs., va trebui să obțineți nodul selectat în prezent. Puteți obține poziția exactă a cursorului la un nod selectat utilizând proprietatea current_node. În plus, în loc să obțineți nodul curent, puteți obține paragraful selectat în prezent sau secțiunea selectată în prezent utilizând proprietățile current_paragraph și current_section.
Orice operații de inserare pe care le efectuați folosind DocumentBuilder vor fi inserate înainte de current_node. Când paragraful curent este gol sau cursorul este poziționat chiar înainte de sfârșitul paragrafului, current_node nu returnează niciunul.
Metode de navigare într-un Document
Când editați text, este important să știți cum să navigați în documentul dvs. și unde să vă deplasați exact în el. Aspose.Words vă permite să vă deplasați într – un document și să navigați la diferitele sale secțiuni și părți-acest lucru este similar cu funcționalitatea panoului de navigare din Microsoft Word pentru a accesa o pagină sau un titlu dintr-un document Word fără a derula.
Metoda principală este să puteți muta poziția cursorului într-un anumit nod din documentul dvs., puteți realiza acest lucru utilizând metoda move_to.
Următorul exemplu de cod arată cum să mutați DocumentBuilder la diferite noduri dintr-un document:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document() | |
builder = aw.DocumentBuilder(doc) | |
# Start a bookmark and add content to it using a DocumentBuilder. | |
builder.start_bookmark("MyBookmark") | |
builder.writeln("Bookmark contents.") | |
builder.end_bookmark("MyBookmark") | |
# The node that the DocumentBuilder is currently at is past the boundaries of the bookmark. | |
self.assertEqual(doc.range.bookmarks[0].bookmark_end, builder.current_paragraph.first_child) | |
# If we wish to revise the content of our bookmark with the DocumentBuilder, we can move back to it like this. | |
builder.move_to_bookmark("MyBookmark") | |
# Now we're located between the bookmark's BookmarkStart and BookmarkEnd nodes, so any text the builder adds will be within it. | |
self.assertEqual(doc.range.bookmarks[0].bookmark_start, builder.current_paragraph.first_child) | |
# We can move the builder to an individual node, | |
# which in this case will be the first node of the first paragraph, like this. | |
builder.move_to(doc.first_section.body.first_paragraph.get_child_nodes(aw.NodeType.ANY, False)[0]) | |
self.assertEqual(aw.NodeType.BOOKMARK_START, builder.current_node.node_type) | |
self.assertTrue(builder.is_at_start_of_paragraph) | |
# A shorter way of moving the very start/end of a document is with these methods. | |
builder.move_to_document_end() | |
self.assertTrue(builder.is_at_end_of_paragraph) | |
builder.move_to_document_start() | |
self.assertTrue(builder.is_at_start_of_paragraph) |
Dar, pe lângă metoda de bază move_to, există și altele mai specifice.
Navigați la începutul sau la sfârșitul unui Document
Puteți merge la începutul sau la sfârșitul documentului utilizând metodele move_to_document_start și move_to_document_end.
Următorul exemplu de cod arată cum să mutați poziția cursorului la începutul sau la sfârșitul unui document:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document() | |
builder = aw.DocumentBuilder(doc) | |
# Move the cursor position to the beginning of your document. | |
builder.move_to_document_start() | |
print("\nThis is the beginning of the document.") | |
# Move the cursor position to the end of your document. | |
builder.move_to_document_end() | |
print("\nThis is the end of the document.") |
Navigați Cu Marcaje
Puteți marca un loc pe care doriți să îl găsiți și să îl mutați din nou cu ușurință. Puteți introduce câte marcaje doriți în document, apoi navigați prin ele identificând marcajele cu nume unice. Puteți trece la un marcaj utilizând metoda move_to_bookmark.
Următoarele exemple de cod arată cum să mutați o poziție a cursorului într-un marcaj:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document() | |
builder = aw.DocumentBuilder(doc) | |
# Start a bookmark and add content to it using a DocumentBuilder. | |
builder.start_bookmark("MyBookmark") | |
builder.writeln("Bookmark contents.") | |
builder.end_bookmark("MyBookmark") | |
# The node that the DocumentBuilder is currently at is past the boundaries of the bookmark. | |
self.assertEqual(doc.range.bookmarks[0].bookmark_end, builder.current_paragraph.first_child) | |
# If we wish to revise the content of our bookmark with the DocumentBuilder, we can move back to it like this. | |
builder.move_to_bookmark("MyBookmark") | |
# Now we're located between the bookmark's BookmarkStart and BookmarkEnd nodes, so any text the builder adds will be within it. | |
self.assertEqual(doc.range.bookmarks[0].bookmark_start, builder.current_paragraph.first_child) | |
# We can move the builder to an individual node, | |
# which in this case will be the first node of the first paragraph, like this. | |
builder.move_to(doc.first_section.body.first_paragraph.get_child_nodes(aw.NodeType.ANY, False)[0]) |
Navigați la celulele tabelului
Puteți trece la o celulă de tabel utilizând metoda move_to_cell. Această metodă vă va permite să navigați cursorul în orice celulă dintr-un anumit tabel. În plus, puteți specifica un index pentru a muta cursorul în orice poziție sau caracter specificat într-o celulă din metoda move_to_cell.
Următorul exemplu de cod arată cum să mutați o poziție a cursorului într-o celulă de tabel specificată:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document(docs_base.my_dir + "Tables.docx") | |
builder = aw.DocumentBuilder(doc) | |
# Move the builder to row 3, cell 4 of the first table. | |
builder.move_to_cell(0, 2, 3, 0) | |
builder.write("\nCell contents added by DocumentBuilder") | |
table = doc.get_child(aw.NodeType.TABLE, 0, True).as_table() | |
self.assertEqual(table.rows[2].cells[3], builder.current_node.parent_node.parent_node) | |
self.assertEqual("Cell contents added by DocumentBuilderCell 3 contents\a", table.rows[2].cells[3].get_text().strip()) |
Navigați la un câmp
Puteți trece la un anumit câmp din documentul dvs. utilizând metoda move_to_field. În plus, puteți trece la un câmp de îmbinare specific utilizând metoda move_to_merge_field.
Următorul exemplu de cod arată cum să mutați cursorul document builder într - un anumit câmp:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document() | |
builder = aw.DocumentBuilder(doc) | |
# Insert a field using the DocumentBuilder and add a run of text after it. | |
field = builder.insert_field("MERGEFIELD field") | |
builder.write(" Text after the field.") | |
# The builder's cursor is currently at end of the document. | |
self.assertIsNone(builder.current_node) | |
# We can move the builder to a field like this, placing the cursor at immediately after the field. | |
builder.move_to_field(field, True) | |
# Note that the cursor is at a place past the FieldEnd node of the field, meaning that we are not actually inside the field. | |
# If we wish to move the DocumentBuilder to inside a field, | |
# we will need to move it to a field's FieldStart or FieldSeparator node using the DocumentBuilder.move_to() method. | |
self.assertEqual(field.end, builder.current_node.previous_sibling) | |
builder.write(" Text immediately after the field.") |
Navigați la un antet sau subsol
Puteți trece la începutul unui antet sau subsol utilizând metoda move_to_header_footer.
Următorul exemplu de cod arată cum să mutați cursorul document builder într-un antet sau subsol de document:
Navigați la o secțiune sau un paragraf
Puteți trece la o anumită secțiune sau paragraf utilizând metodele move_to_paragraph sau move_to_section. În plus, puteți specifica un index pentru a muta cursorul în orice poziție sau un caracter specificat într-un paragraf din metoda move_to_paragraph.
Următorul exemplu de cod arată cum să treceți la o anumită secțiune și la un anumit paragraf dintr-un document:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document() | |
doc.append_child(aw.Section(doc)) | |
# Move a DocumentBuilder to the second section and add text. | |
builder = aw.DocumentBuilder(doc) | |
builder.move_to_section(1) | |
builder.writeln("Text added to the 2nd section.") | |
# Create document with paragraphs. | |
doc = aw.Document(docs_base.my_dir + "Paragraphs.docx") | |
paragraphs = doc.first_section.body.paragraphs | |
self.assertEqual(22, paragraphs.count) | |
# When we create a DocumentBuilder for a document, its cursor is at the very beginning of the document by default, | |
# and any content added by the DocumentBuilder will just be prepended to the document. | |
builder = aw.DocumentBuilder(doc) | |
self.assertEqual(0, paragraphs.index_of(builder.current_paragraph)) | |
# You can move the cursor to any position in a paragraph. | |
builder.move_to_paragraph(2, 10) | |
self.assertEqual(2, paragraphs.index_of(builder.current_paragraph)) | |
builder.writeln("This is a new third paragraph. ") | |
self.assertEqual(3, paragraphs.index_of(builder.current_paragraph)) |