การทำงานกับสารบัญ
บ่อยครั้งที่คุณจะทำงานกับเอกสารที่มีสารบัญ(TOC) โดยใช้Aspose.Wordsคุณสามารถแทรกตารางเนื้อหาของคุณเองหรือสร้างตารางเนื้อหาที่มีอยู่ในเอกสารโดยใช้เพียงไม่กี่บรรทัดของรหัส.
บทความนี้แสดงวิธีการทำงานกับตารางของฟิลด์เนื้อหาและสาธิต:
- วิธีการแทรกแบรนด์ใหม่TOC.
- อัปเดตใหม่หรือที่มีอยู่TOCsในเอกสาร.
- ระบุสวิตช์เพื่อควบคุมการจัดรูปแบบและโครงสร้างโดยรวมของTOC.
- วิธีการปรับเปลี่ยนรูปแบบและลักษณะของสารบัญ.
- วิธีการลบฟิลด์
TOC
ทั้งหมดพร้อมกับรายการทั้งหมดจากเอกสาร.
แทรกสารบัญทางโปรแกรม
คุณสามารถแทรกฟิลด์TOC
(สารบัญ)ลงในเอกสารที่ตำแหน่งปัจจุบันโดยการเรียกวิธีการInsertTableOfContents.
ตารางของเนื้อหาในเอกสารคำสามารถสร้างขึ้นในหลายวิธีและจัดรูปแบบโดยใช้ตัวเลือ สลับฟิลด์ที่คุณส่งผ่านไปยังวิธีการควบคุมวิธีการสร้างตารางและแสดงในเอกสารของคุณ.
สวิตช์ดีฟอลต์ที่ใช้ในTOC
แทรกในMicrosoft Wordคือ**"\o “1-3 \h \z \u”** คำอธิบายของสวิทช์เหล่านี้เช่นเดียวกับรายการของสวิทช์ที่สนับสนุนสามารถพบได้ในภายห คุณสามารถใช้คู่มือนั้นเพื่อขอรับสวิตช์ที่ถูกต้องหรือถ้าคุณมีเอกสารที่มีTOC
คล้ายกันที่คุณต้องการคุณสามารถแสดงรหัสฟิลด์(*ALT+F9*)และคัดลอกสวิตช์โดยตรงจากฟิลด์.
ตัวอย่างรหัสต่อไปนี้แสดงวิธีการแทรกตารางของสารบัญฟิลด์ลงในเอกสาร:
// 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 table of contents at the beginning of the document. | |
builder.insertTableOfContents("\\o \"1-3\" \\h \\z \\u"); | |
// The newly inserted table of contents will be initially empty. | |
// It needs to be populated by updating the fields in the document. | |
doc.updateFields(); | |
doc.save(dataDir + "InsertATableOfContentsField_out.docx"); |
ตัวอย่างรหัสต่อไปนี้สาธิตวิธีการแทรกสารบัญ(TOC)ลงในเอกสารโดยใช้ลักษณะหัวเรื่องเป็นรา:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
Document doc = new Document(); | |
// Create a document builder to insert content with into document. | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
// Insert a table of contents at the beginning of the document. | |
builder.insertTableOfContents("\\o \"1-3\" \\h \\z \\u"); | |
// Start the actual document content on the second page. | |
builder.insertBreak(BreakType.PAGE_BREAK); | |
// Build a document with complex structure by applying different heading styles thus creating TOC entries. | |
builder.getParagraphFormat().setStyleIdentifier(StyleIdentifier.HEADING_1); | |
builder.writeln("Heading 1"); | |
builder.getParagraphFormat().setStyleIdentifier(StyleIdentifier.HEADING_2); | |
builder.writeln("Heading 1.1"); | |
builder.writeln("Heading 1.2"); | |
builder.getParagraphFormat().setStyleIdentifier(StyleIdentifier.HEADING_1); | |
builder.writeln("Heading 2"); | |
builder.writeln("Heading 3"); | |
builder.getParagraphFormat().setStyleIdentifier(StyleIdentifier.HEADING_2); | |
builder.writeln("Heading 3.1"); | |
builder.getParagraphFormat().setStyleIdentifier(StyleIdentifier.HEADING_3); | |
builder.writeln("Heading 3.1.1"); | |
builder.writeln("Heading 3.1.2"); | |
builder.writeln("Heading 3.1.3"); | |
builder.getParagraphFormat().setStyleIdentifier(StyleIdentifier.HEADING_2); | |
builder.writeln("Heading 3.2"); | |
builder.writeln("Heading 3.3"); | |
// Call the method below to update the TOC. | |
doc.updateFields(); | |
doc.save(dataDir + "InsertATableOfContentsUsingHeadingStyles_out.docx"); |
รหัสแสดงให้เห็นถึงตารางใหม่ของเนื้อหาจะถูกแทรกลงในเอกสารที่ว่างเปล่า จากนั้นคลาสDocumentBuilderจะถูกใช้เพื่อแทรกการจัดรูปแบบเนื้อหาตัวอย่างที่มีลักษณะหัวเรื่องที่เหมาะสมซึ่งใช้เพื่อทำเครื่องหมายเนื้อหาที่จะรวมอยู่ในTOC บรรทัดถัดไปแล้วเติมTOC
โดยการอัปเดตฟิลด์และเค้าโครงหน้าของเอกสาร.
TOC
แต่ไม่มีเนื้อหาที่มองเห็นได้ นี้เป็นเพราะฟิลด์TOC
ถูกแทรกแต่ยังไม่มีประชากรจนกว่าจะมีการอัปเดตในเอกสาร ข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้จะกล่าวถึงในส่วนถัดไป.
ปรับปรุงสารบัญ
Aspose.Wordsช่วยให้คุณสามารถปรับปรุงอย่างสมบูรณ์TOC
ที่มีเพียงไม่กี่บรรทัดของรหัส นี้สามารถทำได้เพื่อเติมใหม่แทรกTOC
หรืออัปเดตที่มีอยู่TOC
หลังจากการเปลี่ยนแปลงเอกสารได้.
ต้องใช้สองวิธีต่อไปนี้เพื่ออัพเดตฟิลด์TOC
ในเอกสาร:
โปรดทราบว่าทั้งสองวิธีการปรับปรุงจะต้องถูกเรียกในลำดับที่ ถ้าย้อนกลับตารางของเนื้อหาจะถูกป้อนข้อมูลแต่จะไม่มีหมายเลขหน้าจะปรากฏ สามารถอัปเดตจำนวนของTOCsที่แตกต่างกัน วิธีการเหล่านี้จะอัปเดตTOCsทั้งหมดที่พบในเอกสารโดยอัตโนมัติ.
ตัวอย่างรหัสต่อไปนี้แสดงวิธีการสร้างเขตข้อมูลTOC
ในเอกสารโดยเรียกใช้การปรับปรุงฟิลด์:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
doc.updateFields(); |
การโทรครั้งแรกที่Document.updateFields()จะสร้างTOC
,รายการข้อความทั้งหมดมีประชากรและTOC
จะปรากฏเกือบเสร็จ สิ่งเดียวที่ขาดหายไปคือหมายเลขหน้าซึ่งตอนนี้จะแสดงด้วย"?".
สายที่สองไปยังDocument.updatePageLayout()จะสร้างเค้าโครงของเอกสารในหน่วยความจำ การตลาดทางอินเทอร์เน็ต,การขาย,การตลาด,การโฆษณา,รายชื่อผู้มุ่งหวัง หมายเลขหน้าที่ถูกต้องคำนวณจากสายนี้จะถูกแทรกลงในTOC.
ใช้สวิตช์เพื่อควบคุมสารบัญลักษณะการทำงาน
เช่นเดียวกับฟิลด์อื่นๆฟิลด์TOC
สามารถยอมรับสวิตช์ที่กำหนดไว้ภายในโค้ดฟิลด์ที่ควบคุมวิธีการส สวิตช์บางอย่างใช้เพื่อควบคุมรายการที่จะถูกรวมและที่ระดับใดในขณะที่คนอื่นๆจะใช้ในการควบคุมลักษณะที่ปรากฏของTOC สวิทช์สามารถรวมเข้าด้วยกันเพื่อให้ตารางที่ซับซ้อนของเนื้อหาที่จะผลิต.
โดยค่าเริ่มต้นสวิตช์เหล่านี้ข้างต้นจะรวมอยู่เมื่อใส่ค่าเริ่มต้นTOC
ในเอกสาร TOC
ที่ไม่มีสวิตช์จะรวมถึงเนื้อหาจากรูปแบบส่วนหัวในตัว(ราวกับว่าสวิตช์\โอถูกตั้งค่า).
สวิตช์ที่มีอยู่TOC
ที่ได้รับการสนับสนุนโดยAspose.Wordsจะแสดงรายการด้านล่างและการใช้งานของสวิทช์ พวกเขาสามารถแบ่งออกเป็นส่วนที่แยกต่างหากขึ้นอยู่กับประเภทของพวกเขา สวิตช์ในส่วนแรกกำหนดเนื้อหาที่จะรวมในTOC
และสวิตช์ในส่วนที่สองควบคุมลักษณะที่ปรากฏของTOC.
ถ้าสวิตช์ไม่อยู่ในรายการที่นี่แล้วมันจะไม่ได้รับการสนับสนุนในขณะนี้ สวิทช์ทั้งหมดจะได้รับการสนับสนุนในรุ่นอนาคต เราจะเพิ่มการสนับสนุนเพิ่มเติมเพื่อให้ทุกรุ่น.
สวิตช์การทำเครื่องหมายรายการ
สวิตช์ | การบรรจุ |
---|---|
Heading Styles (สวิตช์\โอ) |
สวิตช์นี้กำหนดว่า
|
Outline Levels (\Uสวิตช์) |
แต่ละย่อหน้าสามารถกำหนดระดับเค้าร่างภายใต้ตัวเลือกย่อหน้า
โปรดทราบว่ารูปแบบส่วนหัวในตัวเช่นHeading 1มีระดับเค้าร่างบังคับตั้งค่าในการตั้งค่าลักษณะ
|
Custom Styles (\Tสวิตช์) |
สวิตช์นี้จะอนุญาตให้ใช้รูปแบบที่กำหนดเองเมื่อมีการรวบรวมรายการที่จะใช้ในการTOC มักจะใช้ร่วมกับสวิตช์\โอที่จะรวมรูปแบบที่กำหนดเองพร้อมกับรูปแบบหัวเรื่องในตัวในTOC
จะใช้เนื้อหาสไตล์ด้วยCustomHeading1เป็นระดับ 1 เนื้อหาใน |
ใช้ฟิลด์ TC (สวิตช์ \F และ \L) |
ในเวอร์ชันเก่าของ Microsoft Word วิธีเดียวที่จะสร้าง คุณสามารถแทรกฟิลด์เหล่านี้ลงในเอกสารได้ทุกตำแหน่ง เช่นเดียวกับฟิลด์อื่นๆ และแสดงด้วยการแจงนับ
จะรวมเฉพาะฟิลด์ TC เช่น
ฟิลด์
- \F – อธิบายไว้ข้างต้น - \L – กำหนดว่าฟิลด์ TC นี้จะปรากฏในระดับใดใน - |
สวิตช์ที่เกี่ยวข้องกับลักษณะที่ปรากฏ
สวิตช์ | การบรรจุ |
---|---|
Omit Page Numbers (\Nสวิตช์) |
สวิตช์นี้ใช้เพื่อซ่อนหมายเลขหน้าสำหรับบางระดับของTOC ตัวอย่างเช่นคุณสามารถกำหนด
และหมายเลขหน้าในรายการของระดับ 3 และสี่จะถูกซ่อนไว้พร้อมกับจุดผู้นำ(ถ้ามี) เมื่อต้องการระบุเพียงหนึ่งระดับช่วงควรจะยังคงใช้ตัวอย่างเช่น"1-1"จะไม่รวมหมายเลขห |
แทรกเป็นการเชื่อมโยงหลายมิติ (สวิตช์\ชม.) |
สวิตช์นี้ระบุว่า |
Set Separator Character (\P สวิตช์) |
สวิตช์นี้ช่วยให้เนื้อหาแยกชื่อเรื่องของรายการและหมายเลขหน้าได้อย่างง่ายดายในTOC ควรระบุตัวคั่นที่จะใช้หลังจากสวิตช์นี้และอยู่ในเครื่องหมายคำพูด |
Preserve Tab Entries (\W สวิตช์) |
การใช้สวิตช์นี้จะเป็นการระบุว่ารายการใดๆที่มีอักขระแท็บเช่นหัวข้อที่มีแท็บที่ท้ายบรรทัดจะถูกเก็บไว้เป็นอักขระแท็บที่เหมาะสมเมื่อเติมTOC ซึ่งหมายความว่าฟังก์ชันของอักขระแท็บจะถูกแสดงใน |
Preserve New Line Entries (\สวิตช์ X) |
คล้ายกับสวิตช์ด้านบนสวิตช์นี้ระบุว่าส่วนหัวที่ทอดผ่านหลายบรรทัด(โดยใช้อักขระบรรทัดใหม่ไม่ใช่ย่อหน้าแยกต่างหาก)จะถูกเก็บรักษาไว้ตามที่อยู่ในที่สร้างTOC หรือ |
แทรกฟิลด์TC
คุณสามารถแทรกฟิลด์TCใหม่ที่ตำแหน่งปัจจุบันของDocumentBuilder
โดยเรียกวิธีการDocumentBuilder.InsertField
และระบุชื่อฟิลด์เป็น"TC"พร้อมกับสวิทช์ใดๆที่จำเป็น.
ตัวอย่างรหัสต่อไปนี้แสดงวิธีการแทรกฟิลด์TC
ลงในเอกสารโดยใช้DocumentBuilder.
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
Document doc = new Document(); | |
// Create a document builder to insert content with. | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
// Insert a TC field at the current document builder position. | |
builder.insertField("TC \"Entry Text\" \\f t"); |
มักจะมีการกำหนดบรรทัดข้อความเฉพาะสำหรับ TOC
และทำเครื่องหมายด้วยฟิลด์ TC
วิธีง่ายๆ ในการทำเช่นนี้ใน Word MS คือ ไฮไลต์ข้อความแล้วกด ALT+SHIFT+O วิธีนี้จะสร้างฟิลด์ TC
โดยอัตโนมัติโดยใช้ข้อความที่เลือก เทคนิคเดียวกันนี้สามารถทำได้โดยใช้โค้ด โค้ดด้านล่างนี้จะค้นหาข้อความที่ตรงกับอินพุตและแทรกฟิลด์ TC
ในตำแหน่งเดียวกับข้อความ โค้ดนี้ใช้เทคนิคเดียวกับที่ใช้ในบทความ ตัวอย่างโค้ดต่อไปนี้จะแสดงวิธีค้นหาและแทรกฟิลด์ TC
ในข้อความในเอกสาร.
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
class InsertTCFieldHandler implements IReplacingCallback { | |
// Store the text and switches to be used for the TC fields. | |
private String mFieldText; | |
private String mFieldSwitches; | |
/** | |
* The switches to use for each TC field. Can be an empty string or null. | |
*/ | |
public InsertTCFieldHandler(String switches) throws Exception { | |
this(null, switches); | |
} | |
/** | |
* The display text and the switches to use for each TC field. Display text | |
* Can be an empty string or null. | |
*/ | |
public InsertTCFieldHandler(String text, String switches) throws Exception { | |
mFieldText = text; | |
mFieldSwitches = switches; | |
} | |
public int replacing(ReplacingArgs args) throws Exception { | |
// Create a builder to insert the field. | |
DocumentBuilder builder = new DocumentBuilder((Document) args.getMatchNode().getDocument()); | |
// Move to the first node of the match. | |
builder.moveTo(args.getMatchNode()); | |
// If the user specified text to be used in the field as display text then use that, otherwise use the | |
// match string as the display text. | |
String insertText; | |
if (!(mFieldText == null || "".equals(mFieldText))) | |
insertText = mFieldText; | |
else | |
insertText = args.getMatch().group(); | |
// Insert the TC field before this node using the specified string as the display text and user defined switches. | |
builder.insertField(java.text.MessageFormat.format("TC \"{0}\" {1}", insertText, mFieldSwitches)); | |
// We have done what we want so skip replacement. | |
return ReplaceAction.SKIP; | |
} | |
} |
แก้ไขสารบัญ
เปลี่ยนรูปแบบของรูปแบบ
การจัดรูปแบบของรายการในTOC
ไม่ได้ใช้สไตล์ดั้งเดิมของรายการที่ทำเครื่องหมายไว้แต่ละระดับจะถูกจัดรูปแบบโดยใช้สไตล์ที่เทียบเท่าTOC
ตัวอย่างเช่นระดับแรกในTOC
ถูกจัดรูปแบบด้วยสไตล์TOC1ระดับที่สองจัดรูปแบบด้วยสไตล์TOC2และอื่นๆ ลี่ยนรูปลักษณ์ของTOC
ลักษณะเหล่านี้ต้องถูกแก้ไข ในAspose.Wordsลักษณะเหล่านี้จะแสดงโดยโลแคลอิสระStyleIdentifier.TOC1
ถึงStyleIdentifier.TOC9
และสามารถดึงข้อมูลจากคอลเล็กชันDocument.Styles
โดยใ.
เมื่อมีการดึงข้อมูลลักษณะที่เหมาะสมของเอกสารแล้วการจัดรูปแบบสำหรับลักษณะนี้สามา การเปลี่ยนแปลงลักษณะเหล่านี้จะปรากฏขึ้นโดยอัตโนมัติในTOCsในเอกสาร.
ตัวอย่างรหัสต่อไปนี้จะเปลี่ยนคุณสมบัติการจัดรูปแบบที่ใช้ในลักษณะระดับแรกTOC
.
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
public static void changeAFormattingPropertyUsedInFirstLevelTOCStyle() throws Exception { | |
Document doc = new Document(); | |
// Retrieve the style used for the first level of the TOC and change the formatting of the style. | |
doc.getStyles().getByStyleIdentifier(StyleIdentifier.TOC_1).getFont().setBold(true); | |
} |
นอกจากนี้ยังเป็นประโยชน์ที่จะทราบว่าการจัดรูปแบบโดยตรงของย่อหน้า(ที่กำหนดไว้ในย่อหน้าเองและไม่ได้อยู่ในสไตล์)ที่ทำเครื่องหมายไว้ในTOC
จะถูกคัดลอกในรายการในTOC ตัวอย่างเช่นหากใช้สไตล์Heading 1เพื่อทำเครื่องหมายเนื้อหาสำหรับTOC
และสไตล์นี้มีการจัดรูปแบบตัวหนา รายการผลลัพธ์TOC
จะไม่เป็นตัวหนาเนื่องจากเป็นส่วนหนึ่งของการจัดรูปแบบสไตล์แต่จะเอียงเนื่องจากมีการจัดรูปแบบโดยตรงในย่อหน้า.
นอกจากนี้คุณยังสามารถควบคุมการจัดรูปแบบของตัวคั่นที่ใช้ระหว่างแต่ละรายการและหม โดยค่าเริ่มต้น,นี้เป็นเส้นประที่กระจายไปทั่วไปยังหมายเลขหน้าโดยใช้อักขระแท็บและหยุด.
การใช้ชั้นเรียนStyle
ที่ดึงสำหรับระดับTOC
เฉพาะที่คุณต้องการปรับเปลี่ยนคุณยังสามารถปรับเปลี่ย.
เมื่อต้องการเปลี่ยนวิธีการนี้ปรากฏขึ้นในตอนแรกStyle.ParagraphFormat
ต้องถูกเรียกใช้เพื่อเรียกการจัดรูปแบบย่อหน้าสำหรับสไตล์ จากนี้แท็บหยุดสามารถเรียกดูได้โดยเรียกParagraphFormat.TabStops
และแท็บหยุดที่เหมาะสมแก้ไข ใช้เทคนิคเดียวกันนี้แท็บตัวเองสามารถย้ายหรือลบออกโดยสิ้นเชิง.
ตัวอย่างรหัสต่อไปนี้แสดงวิธีการปรับเปลี่ยนตำแหน่งของแท็บขวาหยุดในย่อหน้าที่เกี่ยวข้องTOC
.
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
public static void modifyPositionOfRightTabStopInTOC() throws Exception { | |
Document doc = new Document(dataDir + "Field.TableOfContents.doc"); | |
// Iterate through all paragraphs in the document | |
for (Paragraph para : (Iterable<Paragraph>) doc.getChildNodes(NodeType.PARAGRAPH, true)) { | |
// Check if this paragraph is formatted using the TOC result based styles. This is any style between TOC and TOC9. | |
if (para.getParagraphFormat().getStyle().getStyleIdentifier() >= StyleIdentifier.TOC_1 && para.getParagraphFormat().getStyle().getStyleIdentifier() <= StyleIdentifier.TOC_9) { | |
// Get the first tab used in this paragraph, this should be the tab used to align the page numbers. | |
TabStop tab = para.getParagraphFormat().getTabStops().get(0); | |
// Remove the old tab from the collection. | |
para.getParagraphFormat().getTabStops().removeByPosition(tab.getPosition()); | |
// Insert a new tab using the same properties but at a modified position. | |
// We could also change the separators used (dots) by passing a different Leader type | |
para.getParagraphFormat().getTabStops().add(tab.getPosition() - 50, tab.getAlignment(), tab.getLeader()); | |
} | |
} | |
doc.save(dataDir + "Field.TableOfContentsTabStops_Out.doc"); | |
} |
นำสารบัญออกจากเอกสาร
สารบัญสามารถลบออกจากเอกสารโดยการลบโหนดทั้งหมดที่พบระหว่างFieldStart
และFieldEndโหนดของTOC
.
รหัสด้านล่างแสดงให้เห็นถึงนี้ การกำจัดของฟิลด์TOC
จะง่ายกว่าฟิลด์ปกติเนื่องจากเราไม่ได้ติดตามเขตข้อมูลที่ซ้อนกัน แต่เราตรวจสอบFieldEnd
โหนดเป็นประเภทFieldType.FieldTOC
ซึ่งหมายความว่าเราได้พบจุดสิ้นสุดของปัจจุบันTOC เทคนิคนี้สามารถใช้ในกรณีนี้โดยไม่ต้องกังวลเกี่ยวกับเขตข้อมูลที่ซ้อนกันใดๆที่เราสามารถสมมติว่าเอกสารใดๆที่เกิดขึ้นอย่างถูกต้องจะไม่มีเขตข้อมูลที่ซ้อนกันอย่างเต็มที่TOC
ภายในอีกเขตข้อมูลTOC
.
ประการแรกFieldStart
โหนดของแต่ละTOC
จะถูกรวบรวมและเก็บไว้ จากนั้นTOC
ที่ระบุจะถูกแจกแจงเพื่อให้โหนดทั้งหมดภายในฟิลด์ถูกเยี่ยมชมและเก็บไว้ จากนั้นโหนดจะถูกลบออกจากเอกสาร ตัวอย่างรหัสต่อไปนี้สาธิตวิธีการลบTOC
ที่ระบุจากเอกสาร.
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
// Open a document which contains a TOC. | |
Document doc = new Document(dataDir + "Document.TableOfContents.doc"); | |
// Remove the first table of contents from the document. | |
removeTableOfContents(doc, 0); | |
// Save the output. | |
doc.save(dataDir + "Document.TableOfContentsRemoveToc_Out.doc"); |
สารสกัดจากสารบัญ
ถ้าคุณต้องการแยกสารบัญจากเอกสารคำใดๆสามารถใช้ตัวอย่างรหัสต่อไปนี้ได้.
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
// The path to the documents directory. | |
String dataDir = Utils.getSharedDataDir(ExtractTableOfContents.class) + "TableOfContents/"; | |
String fileName = "TOC.doc"; | |
Document doc = new Document(dataDir + fileName); | |
for (Field field : (Iterable<Field>)doc.getRange().getFields()) | |
{ | |
if (field.getType() == FieldType.FIELD_HYPERLINK) | |
{ | |
FieldHyperlink hyperlink = (FieldHyperlink)field; | |
if (hyperlink.getSubAddress() != null && hyperlink.getSubAddress().startsWith("_Toc")) | |
{ | |
Paragraph tocItem = (Paragraph)field.getStart().getAncestor(NodeType.PARAGRAPH); | |
System.out.println(tocItem.toString(SaveFormat.TEXT).trim()); | |
System.out.println("------------------"); | |
if (tocItem != null) | |
{ | |
Bookmark bm = doc.getRange().getBookmarks().get(hyperlink.getSubAddress()); | |
// Get the location this TOC Item is pointing to | |
Paragraph pointer = (Paragraph)bm.getBookmarkStart().getAncestor(NodeType.PARAGRAPH); | |
System.out.println(pointer.toString(SaveFormat.TEXT)); | |
} | |
} // End If | |
}// End If | |
}// End Foreach |