Navigazione con il cursore
Mentre lavori con un documento, anche se è breve o lungo, dovrai navigare all’interno del documento. La navigazione con un cursore virtuale rappresenta la possibilità di navigare tra diversi nodi in un documento.
All’interno di un documento breve, spostarsi all’interno di un documento è semplice poiché puoi spostare il punto di inserimento anche utilizzando i tasti freccia della tastiera o facendo clic con il mouse per posizionare il punto di inserimento dove preferisci. Ma una volta che hai un documento di grandi dimensioni con molte pagine, queste tecniche di base saranno insufficienti.
Questo articolo spiega come spostarsi all’interno di un documento e navigare con un cursore virtuale nelle diverse parti di esso.
Rilevamento della posizione corrente del cursore
Prima di iniziare il processo di navigazione nel documento, dovrai ottenere il nodo attualmente selezionato. Puoi ottenere la posizione esatta del cursore su un nodo selezionato utilizzando la proprietà current_node. Inoltre, invece di ottenere il nodo corrente, puoi ottenere il paragrafo o la sezione attualmente selezionati utilizzando le proprietà current_paragraph e current_section.
Qualsiasi operazione di inserimento eseguita utilizzando DocumentBuilder verrà inserita prima di current_node. Quando il paragrafo corrente è vuoto o il cursore è posizionato appena prima della fine del paragrafo, il current_node restituisce None.
Metodi di navigazione in un documento
Quando modifichi il testo, è importante sapere come navigare nel documento e dove spostarti esattamente al suo interno. Aspose.Words ti consente di spostarti in un documento e navigare nelle sue diverse sezioni e parti: è simile alla funzionalità del riquadro di spostamento in Microsoft Word per andare a una pagina o un’intestazione in un documento Word senza scorrere.
Il metodo principale è poter spostare la posizione del cursore su un nodo specifico nel documento, puoi ottenerlo utilizzando il metodo move_to.
Il seguente esempio di codice mostra come spostare il DocumentBuilder su diversi nodi in un documento:
# 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) |
Ma oltre al metodo move_to di base, ce ne sono altri più specifici.
Passare all’inizio o alla fine di un documento
Puoi andare all’inizio o alla fine del tuo documento utilizzando i metodi move_to_document_start e move_to_document_end.
L’esempio di codice seguente mostra come spostare la posizione del cursore all’inizio o alla fine di un documento:
# 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 con i segnalibri
Puoi contrassegnare un luogo che desideri trovare e spostarti di nuovo facilmente. Puoi inserire tutti i segnalibri che desideri nel tuo documento, quindi spostarti al loro interno identificando i segnalibri con nomi univoci. È possibile spostarsi su un segnalibro utilizzando il metodo move_to_bookmark.
I seguenti esempi di codice mostrano come spostare la posizione del cursore su un segnalibro:
# 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]) |
Passare a Celle della tabella
Puoi spostarti in una cella della tabella utilizzando il metodo move_to_cell. Questo metodo ti consentirà di spostare il cursore in qualsiasi cella di una tabella specifica. Inoltre, puoi specificare un indice per spostare il cursore in qualsiasi posizione o carattere specificato in una cella all’interno del metodo move_to_cell.
L’esempio di codice seguente mostra come spostare la posizione del cursore su una cella di tabella specificata:
# 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()) |
Passare a un campo
Puoi spostarti in un campo specifico nel tuo documento utilizzando il metodo move_to_field. Inoltre, puoi spostarti in un campo unione specifico utilizzando il metodo move_to_merge_field.
Il seguente esempio di codice mostra come spostare il cursore del generatore di documenti su un campo specifico:
# 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.") |
Passare a un’intestazione o a un piè di pagina
Puoi spostarti all’inizio di un’intestazione o di un piè di pagina utilizzando il metodo move_to_header_footer
Il seguente esempio di codice mostra come spostare il cursore del generatore di documenti sull’intestazione o sul piè di pagina del documento:
Passare a una sezione o un paragrafo
Puoi spostarti a una sezione o paragrafo specifico utilizzando i metodi move_to_paragraph o move_to_section. Inoltre, puoi specificare un indice per spostare il cursore in qualsiasi posizione o carattere specificato in un paragrafo all’interno del metodo move_to_paragraph.
L’esempio di codice seguente mostra come spostarsi a una sezione specifica e a un paragrafo specifico in un documento:
# 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)) |