นำทางด้วยเคอร์เซอร์

ในขณะที่ทำงานกับเอกสารแม้ว่าจะเป็นหนึ่งสั้นหรือยาวคุณจะต้องนำทางผ่านเอกสารของคุ การนำทางด้วยเคอร์เซอร์เสมือนแสดงถึงความสามารถในการนำทางระหว่างโหนดที่แ.

Withinในเอกสารสั้นๆการเคลื่อนที่ไปมาในเอกสารนั้นง่ายเนื่องจากคุณสามารถย้ายจุดแทรกไ แต่เมื่อคุณมีเอกสารขนาดใหญ่ที่มีหลายหน้า,เทคนิคพื้นฐานเหล่านี้จะไม่เพียงพอ.

บทความนี้อธิบายวิธีการย้ายไปรอบๆในเอกสารและนำทางด้วยเคอร์เซอร์เสมือนไปยังส่วน.

การตรวจจับตำแหน่งเคอร์เซอร์ปัจจุบัน

ก่อนที่จะเริ่มกระบวนการของการนำทางผ่านเอกสารของคุณ,คุณจะต้องได้รับโหนดที่เลือก คุณสามารถดูตำแหน่งที่แน่นอนของเคอร์เซอร์ที่โหนดที่เลือกได้โดยใช้คุณสมบัติCurrentNode นอกจากนี้แทนที่จะได้รับโหนดปัจจุบันคุณจะได้รับย่อหน้าที่เลือกในปัจจุบันหรือส่วนที่เลือกในปัจจุบันโดยใช้คุณสมบัติCurrentParagraphและCurrentSection.

การแทรกการดำเนินการใดๆที่คุณดำเนินการโดยใช้DocumentBuilderจะถูกแทรกก่อนCurrentNode เมื่อย่อหน้าปัจจุบันว่างเปล่าหรือวางเคอร์เซอร์ก่อนสิ้นย่อหน้าการแสดงผลCurrentNodeเป็นโมฆะ.

การนำทางเมธอดในเอกสาร

เมื่อคุณกำลังแก้ไขข้อความมันเป็นสิ่งสำคัญที่จะรู้วิธีการนำทางเอกสารของคุณและที่ว่าจะ Aspose.Wordsช่วยให้คุณย้ายไปรอบๆในเอกสารและนำทางไปยังส่วนต่างๆและส่วนต่างๆซึ่งคล้ายกับฟังก์ชันการทำงานของบานหน้าต่างนำทางในMicrosoft Wordเพื่อไปยังหน้าเว็บหรือหัวเรื่องในเอกสารคำโดยไม่ต้องเลื่อน.

วิธีการหลักคือการสามารถย้ายตำแหน่งเคอร์เซอร์ไปยังโหนดเฉพาะในเอกสารของคุณ,คุณสามารถบรรลุนี้โดยใช้วิธีการMoveTo.

ตัวอย่างรหัสต่อไปนี้แสดงวิธีย้ายDocumentBuilderไปยังโหนดต่างๆในเอกสาร:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
// Start a bookmark and add content to it using a DocumentBuilder.
builder.startBookmark("MyBookmark");
builder.writeln("Bookmark contents.");
builder.endBookmark("MyBookmark");
// The node that the DocumentBuilder is currently at is past the boundaries of the bookmark.
Assert.assertEquals(doc.getRange().getBookmarks().get(0).getBookmarkEnd(), builder.getCurrentParagraph().getFirstChild());
// If we wish to revise the content of our bookmark with the DocumentBuilder, we can move back to it like this.
builder.moveToBookmark("MyBookmark");
// Now we're located between the bookmark's BookmarkStart and BookmarkEnd nodes, so any text the builder adds will be within it.
Assert.assertEquals(doc.getRange().getBookmarks().get(0).getBookmarkStart(), builder.getCurrentParagraph().getFirstChild());
// 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.moveTo(doc.getFirstSection().getBody().getFirstParagraph().getChildNodes(NodeType.ANY, false).get(0));
Assert.assertEquals(NodeType.BOOKMARK_START, builder.getCurrentNode().getNodeType());
Assert.assertTrue(builder.isAtStartOfParagraph());
// A shorter way of moving the very start/end of a document is with these methods.
builder.moveToDocumentEnd();
Assert.assertTrue(builder.isAtEndOfParagraph());
builder.moveToDocumentStart();
Assert.assertTrue(builder.isAtStartOfParagraph());

แต่นอกเหนือจากวิธีพื้นฐานMoveToยังมีวิธีที่เฉพาะเจาะจงมากขึ้น.

ไปที่จุดเริ่มต้นหรือจุดสิ้นสุดของเอกสาร

คุณสามารถไปที่จุดเริ่มต้นหรือจุดสิ้นสุดของเอกสารของคุณโดยใช้วิธีการMoveToDocumentStartและMoveToDocumentEnd.

ตัวอย่างรหัสต่อไปนี้แสดงวิธีการย้ายตำแหน่งเคอร์เซอร์ไปยังจุดเริ่มต้นหรือจุดสิ้นสุดของ:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
String dataDir = Utils.getDataDir(DocumentBuilderMoveToDocumentStartEnd.class);
Document doc = new Document(dataDir + "Document.docx");
DocumentBuilder builder = new DocumentBuilder(doc);
// Move the cursor position to the beginning of your document.
builder.moveToDocumentStart();
builder.writeln("This is the beginning of the document.");
// Move the cursor position to the end of your document.
builder.moveToDocumentEnd();
builder.writeln("This is the end of the document.");

นำทางด้วยบุ๊กมาร์ก

คุณสามารถทำเครื่องหมายสถานที่ที่คุณต้องการค้นหาและย้ายไปที่สถานที่นั้นอีกครั้งได้อย่า คุณสามารถแทรกบุ๊กมาร์กลงในเอกสารของคุณได้มากเท่าที่คุณต้องการและจากนั้นนำทาง คุณสามารถย้ายไปยังบุ๊กมาร์กได้โดยใช้วิธีการMoveToBookmark.

ตัวอย่างรหัสต่อไปนี้แสดงวิธีการย้ายตำแหน่งเคอร์เซอร์ไปยังบุ๊กมาร์ก:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
// Start a bookmark and add content to it using a DocumentBuilder.
builder.startBookmark("MyBookmark");
builder.writeln("Bookmark contents.");
builder.endBookmark("MyBookmark");
// If we wish to revise the content of our bookmark with the DocumentBuilder, we can move back to it like this.
builder.moveToBookmark("MyBookmark");
// Now we're located between the bookmark's BookmarkStart and BookmarkEnd nodes, so any text the builder adds will be within it.
Assert.assertEquals(doc.getRange().getBookmarks().get(0).getBookmarkStart(), builder.getCurrentParagraph().getFirstChild());
// 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.moveTo(doc.getFirstSection().getBody().getFirstParagraph().getChildNodes(NodeType.ANY, false).get(0));
Assert.assertEquals(NodeType.BOOKMARK_START, builder.getCurrentNode().getNodeType());

ไปที่เซลล์ตาราง

คุณสามารถย้ายไปยังเซลล์ตารางได้โดยใช้วิธีการMoveToCell วิธีนี้จะช่วยให้คุณสามารถนำทางเคอร์เซอร์ของคุณไปยังเซลล์ใดๆในตารางที่เฉพาะเจาะจ นอกจากนี้คุณสามารถระบุดัชนีเพื่อเลื่อนเคอร์เซอร์ไปยังตำแหน่งใดๆหรืออักขระที่ระบุในเซลล์ภายในวิธีการMoveToCell.

ตัวอย่างรหัสต่อไปนี้แสดงวิธีการย้ายตำแหน่งเคอร์เซอร์ไปยังเซลล์ตารางที่ระบุ:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
String dataDir = Utils.getDataDir(DocumentBuilderMoveToTableCell.class);
Document doc = new Document(dataDir + "Tables.docx");
DocumentBuilder builder = new DocumentBuilder(doc);
// Move the builder to row 3, cell 4 of the first table.
builder.moveToCell(0, 2, 3, 0);
builder.write("\nCell contents added by DocumentBuilder");
Table table = (Table)doc.getChild(NodeType.TABLE, 0, true);
Assert.assertEquals(table.getRows().get(2).getCells().get(3), builder.getCurrentNode().getParentNode().getParentNode());
Assert.assertEquals("Cell contents added by DocumentBuilderCell 3 contents\u0007", table.getRows().get(2).getCells().get(3).getText().trim());

นำทางไปยังฟิลด์

คุณสามารถย้ายไปยังฟิลด์เฉพาะในเอกสารของคุณได้โดยใช้วิธีการMoveToField นอกจากนี้คุณสามารถย้ายไปยังฟิลด์ผสานเฉพาะโดยใช้วิธีการMoveToMergeField.

ตัวอย่างรหัสต่อไปนี้แสดงวิธีการย้ายเคอร์เซอร์ตัวสร้างเอกสารไปยังเขตข้อมูลเฉพาะ:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
// Insert a field using the DocumentBuilder and add a run of text after it.
Field field = builder.insertField("MERGEFIELD field");
builder.write(" Text after the field.");
// The builder's cursor is currently at end of the document.
Assert.assertNull(builder.getCurrentNode());
// We can move the builder to a field like this, placing the cursor at immediately after the field.
builder.moveToField(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.MoveTo() method.
Assert.assertEquals(field.getEnd(), builder.getCurrentNode().getPreviousSibling());
builder.write(" Text immediately after the field.");

ไปที่ส่วนหัวหรือส่วนท้าย

คุณสามารถย้ายไปยังจุดเริ่มต้นของส่วนหัวหรือท้ายกระดาษได้โดยใช้วิธีการMoveToHeaderFooter

ตัวอย่างรหัสต่อไปนี้แสดงวิธีการย้ายเคอร์เซอร์ตัวสร้างเอกสารไปยังส่วนหัวของเอกสา:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
String dataDir = Utils.getDataDir(DocumentBuilderHeadersAndFooters.class);
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
// Specify that we want headers and footers different for first, even and odd pages.
builder.getPageSetup().setDifferentFirstPageHeaderFooter(true);
builder.getPageSetup().setOddAndEvenPagesHeaderFooter(true);
// Create the headers.
builder.moveToHeaderFooter(HeaderFooterType.HEADER_FIRST);
builder.write("Header for the first page");
builder.moveToHeaderFooter(HeaderFooterType.HEADER_EVEN);
builder.write("Header for even pages");
builder.moveToHeaderFooter(HeaderFooterType.HEADER_PRIMARY);
builder.write("Header for all other pages");
// Create two pages in the document.
builder.moveToSection(0);
builder.writeln("Page1");
builder.insertBreak(BreakType.PAGE_BREAK);
builder.writeln("Page2");
doc.save(dataDir + "DocumentBuilder.HeadersAndFooters.docx");

ไปยังส่วนหรือย่อหน้า

คุณสามารถย้ายไปยังส่วนหรือย่อหน้าโดยใช้วิธีการMoveToParagraphหรือMoveToSection นอกจากนี้คุณสามารถระบุดัชนีเพื่อเลื่อนเคอร์เซอร์ไปยังตำแหน่งใดๆหรืออักขระที่ระบุในย่อหน้าภายในวิธีการMoveToParagraph.

ตัวอย่างรหัสต่อไปนี้แสดงวิธีการย้ายไปยังส่วนที่เฉพาะเจาะจงและย่อหน้าเฉพาะในเอก:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
String dataDir = Utils.getDataDir(DocumentBuilderMoveToSectionParagraph.class);
// Create a blank document and append a section to it, giving it two sections.
Document doc = new Document();
doc.appendChild(new Section(doc));
// Move a DocumentBuilder to the second section and add text.
DocumentBuilder builder = new DocumentBuilder(doc);
builder.moveToSection(1);
builder.writeln("Text added to the 2nd section.");
// Create document with paragraphs.
doc = new Document(dataDir + "Paragraphs.docx");
ParagraphCollection paragraphs = doc.getFirstSection().getBody().getParagraphs();
Assert.assertEquals(22, paragraphs.getCount());
// 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 = new DocumentBuilder(doc);
Assert.assertEquals(0, paragraphs.indexOf(builder.getCurrentParagraph()));
// You can move the cursor to any position in a paragraph.
builder.moveToParagraph(0, 14);
Assert.assertEquals(2, paragraphs.indexOf(builder.getCurrentParagraph()));
builder.writeln("This is a new third paragraph. ");
Assert.assertEquals(3, paragraphs.indexOf(builder.getCurrentParagraph()));