Робота з Змістом
Часто ви будете працювати з документами, що містять таблицю змісту (TOC). Використання Aspose.Words Ви можете вставляти свій власний таблицю змісту або повністю перебудувати існуючий таблицю змісту в документі за допомогою всього декількох рядків коду.
У статті описано, як працювати з таблицею поля контенту та демонструє:
- Як вставити бренд новий TOC.
- Оновлення нових або існуючих TOC в документі.
- Вкажіть перемикачі для керування форматуванням та загальною структурою ТЗ.
- Як змінити стилі і зовнішній вигляд таблиці змісту.
- Як видалити всю
TOC
поле разом з усіма записами з документа.
Вставте таблицю змісту программатично
Ви можете вставити TOC
(табл. змісту) поле в документ на поточному положенні за викликом InsertTableOfContents метод.
Таблиця змісту у документі Word може бути побудована кількома способами і форматовано за допомогою різних варіантів. Увімкнено поле, що ви передаєте до методу управління способом, таблиця побудована і відображається у вашому документі.
Перемикачі за замовчуванням, які використовуються в 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"); |
Введіть номер мобільного, який Ви вказали при укладаннi договору з банком - для ідентифікації. Про нас DocumentBuilder клас потім використовується для вставки деяких форматів вмісту зразка з відповідними заголовками стилі, які використовуються для позначення вмісту, який буде включений в TOC. Наступні рядки потім з’єднають TOC
шляхом оновлення полів та макету сторінки документа.
TOC
поле, але без видимого вмісту. Це тому, що TOC
поле було вставлено, але ще не заселено, поки воно було оновлено в документі. Додаткова інформація про це розглядається в наступному розділі.
Оновлення таблиці змісту
Aspose.Words дозволяє повністю оновлювати оновлення TOC
лише кілька рядків коду. Це може бути зроблено для того, щоб створити нову вставку TOC
або оновити існуючий TOC
після внесення змін до документа.
Для оновлення потрібно використовувати наступні два способи TOC
поля в документі:
Будь ласка, зверніть увагу, що ці два способи оновлення повинні бути викликані в цьому порядку. Якщо перевернути таблицю змісту буде опубліковано, але не буде відображатися номер сторінки. Будь-яка кількість різних TOC можна оновити. Ці методи автоматично оновлюватимуть всі ТЦ, знайдені в документі.
Приклад коду показує, як повністю відновити 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
без перемикачів буде включати вміст з вбудованих стилів заголовка (як якщо наведено перемикач \O).
Доступний TOC
перемикачі, які підтримуються Aspose.Words Нижче описуються і їх використання. Їх можна розділити на окремі розділи на основі їх типу. Перемикачі в першому розділі визначають те, що вміст включено в TOC
і перемикачі в другій секції контролюють зовнішній вигляд TOC.
Якщо перемикач не зазначений тут, то він наразі не підтримується. Всі перемикачі будуть підтримуватися в наступних версіях. Ми додаємо підтримку кожного релізу.
Вимикачи для маркування записів
Перемикач | Опис |
---|---|
Heading Styles (\O перемикач) |
Цей перемикач визначає, що |
![style-table-of-contents-field-aspose-words-java](/words/java/working-with-table-of-contents/how-to-insert-and-work-with-the-table-of-contents-field-3.png)
Будь-який контент, відформатований цими стилями, входить до таблиці змісту. Рівень заголовка визначить відповідний ієрархічний рівень входу в ТОК. Наприклад, абзац з заголовуванням 1 стиль буде розглядатися як перший рівень `TOC` У той час як абзац з заголовуванням 2 буде розглядатися як наступний рівень в ієрархії і так далі.
*(\U перемикач)*
|
Кожен пункт може визначити рівень контуру за параметрами пункту.
![modify-table-of-contents-field-aspose-words-java](/words/java/working-with-table-of-contents/how-to-insert-and-work-with-the-table-of-contents-field-4.png)
Цей параметр диктує, які вирівняти цей пункт слід розглядати в ієрархії документа. Це загальноприйнята практика, яка використовується для легко структурування макета документа. Цей ієрархія можна переглянути, змінивши на зовнішній вигляд Microsoft Wordй Подібно до заголовків стилів, може бути 1 – 9 рівнів, крім рівня "Body Text". Зовнішні рівні 1 - 9 з'явиться в `TOC` у відповідному рівні ієрархії
Будь-який вміст з рівнем контуру або встановленим в стилі абзацу або безпосередньо на сам абзац включений в TOC. У Aspose.Words Рівень контуру представлений рівнем контуру `ParagraphFormat.OutlineLevel` майно параграфа вузла. Рівень контуру стилю представлений таким же чином `Style.ParagraphFormat` майно.
Зверніть увагу, що вбудовані стилі заголовка, такі як Heading 1 мають обов'язковий набір рівня в налаштуваннях стилю.
*(\T перемикач)*
|
Цей перемикач дозволить використовувати користувацькі стилі при зборі записів для використання в TOC. Це часто використовується в поєднанні з перемикачем \ O, щоб включати спеціальні стилі разом з вбудованими головуванням стилів в TOC.
Параметри перемикача повинні бути укладені в межах мовних знаків. Багато користувацьких стилів можна включити, для кожного стилю, ім'я повинна бути зазначена за допомогою коми за рівнем, який стиль повинен з'явитися в стилі `TOC` як. Подальші стилі також відокремлюються комою і.
Зареєструватися
{ TOC \o "1-3" \t "CustomHeading1, 1, CustomHeading2, 2"}
використовувати стиль вмісту з CustomHeading1 як рівень 1 вмісту в `TOC` і CustomHeading2 як рівень 2.
| | Використання TC поля*(\F і \L перемикачі) *
|
У старших версіях Microsoft Word, єдиний спосіб побудови `TOC` було використання полів ТЦ. Ці поля вставляють приховані в документ, навіть якщо відображаються коди поля. Вони включають текст, який повинен відображатися в записі і `TOC` Будується з них. Цей функціонал тепер не використовується дуже часто, але може бути корисним в деяких випадках, щоб включати записи в `TOC` які не відступають, щоб бути видимими в документі.
При вставленні цих полів з'являються приховані навіть при відображенні поля. Не можна побачити без показу прихованого вмісту. Щоб побачити ці поля Показати форматування абзаців необхідно вибрати.
![setup-table-of-contents-field-aspose-words-java](/words/java/working-with-table-of-contents/how-to-insert-and-work-with-the-table-of-contents-field-5.png)
Ці поля можуть бути вставлені в документ на будь-якій позиції, як будь-який інший поле, і представлені `FieldType.FieldTOCEntry` заохочення.
Перемикач \F в `TOC` використовується для позначення, що поля TC повинні бути використані як записи. Перемикач самостійно без додаткового ідентифікатора означає, що будь-яке поле TC в документі буде включено. Будь-який додатковий параметр, часто один лист, спроектуватиме, що тільки поля TC, які мають відповідні \f перемикач буде включений в TOC. Наприклад *
{ TOC \f t }
буде містити лише поля TC, такі як
{ TC \f t }
Про нас `TOC` поле також має пов'язаний перемикач, перемикач "\L" визначає, що тільки поле TC з рівнями в зазначеному діапазоні включено.
![table-of-contents-field-aspose-words-java](/words/java/working-with-table-of-contents/how-to-insert-and-work-with-the-table-of-contents-field-6.png)
Про нас `TC` полів також можуть мати `{several, multiple, a few, many, numerous}` комплект вимикачів. Це:
- \F - Виключені вище. Ім'я *
- \L - Дефіни, які рівні в `TOC` це поле TC з'явиться в. Р `TOC` який використовує цей самий перемикач буде включати в себе це поле TC, якщо він знаходиться в зазначеному діапазоні.
- `_\N` - Номер сторінки для цього `TOC` запис не відображається. Приклад коду як вставити поля TC можна знайти в наступному розділі.
|Зовнішній вигляд Схожі перемикачі
Перемикач | Опис |
---|---|
Omit Page Numbers (\N перемикач) |
Цей перемикач використовується для приховувати номери сторінок для певних рівнів TOC. Наприклад, можна визначити |
{TOC \o "1-4" \n "3-4" }
і номери сторінок на записах рівнів 3 і чотири будуть приховані разом з лідерами точок (якщо є будь-який). Щоб визначити лише один рівень, потрібно використовувати діапазон, наприклад, "1-1" виключить лише номери сторінок для першого рівня.
Постачання не діапазону рівня буде примітити номери сторінок для всіх рівнів в TOC. Це корисно для установки при експорті документа в HTML або аналогічний формат. Це тому, що HTML-формати не мають ніякої концепції сторінки, і таким чином, не потрібна кількість сторінок.
![table-of-contents-aspose-words-java](/words/java/working-with-table-of-contents/how-to-insert-and-work-with-the-table-of-contents-field-7.png)
| | Вставити як гіперпосилання*(\H перемикач)* |
Цей перемикач визначає, що `TOC` записи вставляються як гіперпосилання. При перегляді документа в Microsoft Word ці записи все ще з'являються як звичайний текст всередині `TOC` але є гіперпосилання і, таким чином, може бути використаний для навігації в положення оригінального входу в документ за допомогою *Ctrl + клацніть лівою кнопкою миші * в Microsoft Wordй Коли цей перемикач включений, то ці посилання також зберігаються в інших форматах. Наприклад, в HTML-форматах, включаючи EPUB і продаються формати, такі як PDF і XPS, вони будуть експортовані як робочі посилання.
Без цього перемикача, `TOC` у всіх цих виходах буде експортований як звичайний текст і не продемонструвати цю поведінку. Якщо документ відкривається в MS Word текст записів також не буде клацнути таким чином, але номери сторінок все ще можуть бути використані для навігації до оригінального запису.
![tree-table-of-contents-field-aspose-words-java](/words/java/working-with-table-of-contents/how-to-insert-and-work-with-the-table-of-contents-field-8.png)
| | **Set Separator Character***(\P перемикач)*
|
Цей перемикач дозволяє відокремити заголовок запису та номер сторінки, щоб легко змінюватися в ТЗ. Сепаратор повинен бути зазначений після цього вимикача і закривається в мовних знаках.
Приміряти, що документується в документації Office, можна використовувати тільки один символ замість п'яти. Це стосується як MS Word і Aspose.Wordsй
Використання цього перемикача не рекомендується, оскільки він не дозволяє багато контролювати, що він використовується для окремих записів та номерів сторінок в TOC. замість цього рекомендується редагувати відповідні `TOC` стиль, такі як `StyleIdentifier.TOC1` і звідти відредагувати стиль лідера з доступом до певних членів шрифту тощо. Детальніше про те, як зробити це можна пізніше в статті.
![list-table-of-contents-field-aspose-words-java](/words/java/working-with-table-of-contents/how-to-insert-and-work-with-the-table-of-contents-field-9.png)
| | **Preserve Tab Entries***(\W перемикач)* |
За допомогою цього перемикача вкажіть, що будь-які записи, які мають символ вкладки, наприклад, заголовок, що має вкладку в кінці рядка, будуть зберігатися як правильний символ вкладки при популуванні TOC. Це означає функцію символу вкладки буде присутній в `TOC` і може використовуватися для форматування запису. Наприклад, деякі записи можуть використовувати вкладки і символи вкладок, щоб рівномірно розташувати текст. Довгий час `TOC` рівень визначає еквівалентні вкладки, після чого сформований `TOC` записи з'являться з схожою обшивкою.
У тій же ситуації, якщо цей вимикач не визначений, то символи вкладки будуть перетворені на білий простір, еквівалентний нефункціональним вкладкам. Після цього вихід не буде виглядати як очікувано.
![tab-table-of-contents-field-aspose-words-java](/words/java/working-with-table-of-contents/how-to-insert-and-work-with-the-table-of-contents-field-10.png)
| | **Preserve New Line Entries***(\X перемикач)*
|
Подібно до перемикача вище, цей перемикач визначає, що заголовки, що простягаються на декількох лініях (з використанням нових символів, не окремих абзаців) будуть збережені як вони в генераному TOC. Наприклад, заголовок, яка полягає в тому, щоб поширюватися через декілька рядків, може використовувати новий символ лінії (Ctrl + Enter або `ControlChar.LineBreak`) відокремити вміст по різних лініях. За допомогою цього перемикача вказаний запис в `TOC` зберігати ці нові символи рядків, як показано нижче.
У цій ситуації, якщо перемикач не визначений, то нові символи лінії перетворюються на єдиний білий простір.
![tab-space-table-of-contents-field-aspose-words-java](/words/java/working-with-table-of-contents/how-to-insert-and-work-with-the-table-of-contents-field-11.png)
|Вставити ТК поля
Ви можете вставити нове поле 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
поле. Простий спосіб зробити це в MS Word, щоб виділити текст і натисніть ALT+SHIFT+O. Це автоматично створює TC
поле за допомогою вибраного тексту. Така ж техніка може бути виконана за допомогою коду. Введіть номер мобільного, який Ви вказали при укладаннi договору з банком - для ідентифікації 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
відформатований з ТЦ1 стиль, другий рівень відформатований з ТЦ2 стиль і так далі. Це означає, що змінити зовнішній вигляд TOC
ці стилі повинні бути змінені. У Aspose.Words ці стилі представлені місцевими StyleIdentifier.TOC1
через StyleIdentifier.TOC9
і можна отримати з Document.Styles
збір за допомогою цих ідентифікаторів.
Після відповідного стилю документа було отримано форматування для цього стилю. Будь-які зміни до цих стилів будуть автоматично відображені в документі.
Приклад коду змінює форматування майна, що використовується в першому рівні 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. Наприклад, якщо заголовок 1 стиль використовується для позначення вмісту для TOC
і цей стиль має сміливе форматування, в той час як абзац також має italic форматування безпосередньо на нього. В результаті TOC
запис не буде сміливим, оскільки це частина форматування стилів, проте це буде italic, оскільки це безпосередньо відформатовано на пункті.
Ви також можете керувати форматуванням сепараторів, що використовуються між кожним входом та номером сторінки. За замовчуванням, це пунктирна лінія, яка поширюється на номер сторінки, використовуючи символ вкладки та праву зупинку вкладок, розташовану поруч з правим запасом.
Використання 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"); |
Витягувати таблицю змісту
Якщо ви хочете витягти таблицю змісту з будь-якого документа Word, можна використовувати наступний зразок коду.
// 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 |