İçindekiler ile Çalışma
Sıklıkla bir tablo içeriği (TOC) içeren belgelerle çalışacaksınız. Aspose.Words kullanarak kendi tablo içeriğinizi ekleyebilir ya da mevcut tablo içeriğini belgeninizde sadece birkaç kod satırı kullanarak tamamen yeniden oluşturabilirsiniz.
Bu makale, “İçindekiler” alanıyla nasıl çalışılacağını tanımlar ve şu anda:
- Bir yeni TOC nasıl girilir?
- Belge içindeki yeni veya mevcut TOC’leri güncelle. TOC’nin biçimlendirilmesini ve genel yapısını kontrol etmek için anahtarları belirtin.
- İçindekiler tablosunun stilini ve görünümünü nasıl değiştireceğiniz.
- Bir
TOC
alanını tüm girdileriyle birlikte belgeden nasıl kaldırılır?
İçindekiler Tablosunu Programlı Olarak Ekle
Bu metinde şu anki konumda bir TOC
(içindekiler tablosu) alanı belgenize yerleştirmek için InsertTableOfContents yöntemini çağırın.
Bir Word belgesindeki bir içerik tablosu birkaç şekilde oluşturulabilir ve çeşitli seçenekler kullanılarak biçimlendirilebilir. Alan anahtarları, yönteme geçirsiniz, tabloyu oluşturma ve belgenizde görüntüleme şeklini kontrol eder.
Bir TOC
içinde kullanılan varsayılan anahtarlar Microsoft Word’de \o “1-3 “\ h “\ z “\ u şeklindedir. Bu anahtarların açıklamaları ayrıca desteklenen anahtarların bir listesini daha sonra bu makale içinde bulunabilir. Doğru anahtarları elde etmek için kılavuzu kullanabilir ya da zaten benzer TOC
içeren bir belgeye sahipseniz, alan kodlarını (ALT+F9) gösterebilir ve anahtarları doğrudan alandan kopyalayabilirsiniz.
Aşağıdaki kod örneği bir belgeye İçindekiler alanı eklemek için nasıl yapılacağını göstermektedir:
// 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"); |
Aşağıdaki kod örneği, başlık stillerini girişler olarak kullanarak bir belgedeki İçindekiler (TOC) eklemeyi nasıl yapacağınızı göstermektedir:
// 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"); |
Kod yeni bir tablo içeriğini boş bir belgeye eklendiğini göstermektedir. DocumentBuilder sınıfı daha sonra uygun başlık stilleri kullanılarak oluşturulan örnek içerik biçimlendirmesini eklemek için kullanılır ve içeriğin yer alacağı yerin işaretlenmesi için kullanılır. Sonraki satırlar o zaman TOC
‘ü doldurur, belgenin alanlarını ve sayfa düzenini güncellerken.
TOC
alanını bulursunuz ancak görünür içeriği yoktur. Bu şu yüzden çünkü TOC
alanı eklendi ancak henüz belgeden güncellenmediğine göre doldurulmadı. Bunun hakkında daha fazla bilgi bir sonraki bölümde tartışılıyor.
İçindekiler Tablosunu Güncelle
Aspose.Words size bir TOC
‘ı sadece birkaç kod satırı kullanarak tamamen güncellemenize olanak tanır. Bu, yeni bir TOC
eklemek ya da belge değişikliği yapıldıktan sonra mevcut bir TOC
‘ı güncellemek için yapılabilir.
Aşağıdaki iki yöntem, belgedeki TOC
alanlarını güncellemek için kullanılmalıdır:
Lütfen bu iki güncelleme yönteminin o sırayla çağrılmak zorunda olduğunu unutmayın. Eğer tersine çevrilirse, içerik tablosu doldurulacak fakat hiçbir sayfa numarası gösterilmeyecek. Çok sayıda farklı TOC’lar güncellenebilir. Bu yöntemler belgedeki bulunan tüm tablolar otomatik olarak güncellenecektir.
Aşağıdaki kod örneği, alan güncellemelerini çağırarak belgenin içindeki TOC
alanını tamamen nasıl yeniden oluşturacağınızı göstermektedir:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
doc.updateFields(); |
İlk çağrı Document.updateFields() oluşturmak için TOC
inşa edecek, tüm metin girdileri dolu ve TOC
neredeyse tamamen görünür. Kayıp tek şey sayfalardır ve şu anda “?” ile görüntülenirler.
Document.updatePageLayout()‘a yapılan ikinci çağrı, belgenin bellekte düzenini oluşturacaktır. Bu, girişlerin sayfa numaralarını toplamak için yapılmalıdır. Bu çağrıdan hesaplanan doğru sayfa numaraları daha sonra İçindekiler tablosuna eklenir.
İçerik Tablosu Davranışını Kontrol Etmek için Anahtarlamaları Kullanın
Herhangi bir alan gibi, TOC
alanı, nasıl tablo içeriği oluşturulduğuna bağlı olarak kontrol eden alan kodunda tanımlanan anahtar kelimeleri kabul edebilir. Bazı anahtarlar girişleri ne zaman dahil edileceğini ve hangi düzeyde olacağını kontrol etmek için kullanılırken diğerleri görünümünü kontrol etmek için kullanılır. Farklar bir araya getirilebilir böylece karmaşık bir içerik tablosu üretilebilir.
Varsayılan olarak, bu anahtarlar belgenin varsayılan TOC
eklenirken dahil edilir. A TOC
anahtarları olmadan, yerleşik başlık stillerinden gelen içeriği içerecektir (anahtar \O ayarlanmış gibi).
Kullanılabilir TOC
anahtarları Aspose.Words tarafından desteklenmektedir ve bunların kullanımları aşağıda ayrıntılı olarak açıklanmaktadır. Onlar, türlerine göre ayrı bölümlere ayrılabilirler. İlk bölümdeki anahtarlar, ne TOC
‘i içereceğini tanımlar ve ikinci bölümdeki anahtarlar TOC’nun görünümünü kontrol eder.
Diyek bir anahtar burada listelenmediyse, o şu anda desteklenmiyor demektir. Tüm anahtarlar gelecek sürümlerde desteklenecektir. Biz her sürümle birlikte daha fazla destek ekliyoruz.
Giriş İşaretleme Anahtarları
Switch | Açıklama |
---|---|
Heading Styles (\O Switch) |
Bu anahtar, ![]()
TOC iken bir paragrafla Başlık 2 hiyerarşide bir sonraki seviye olarak ele alınır ve bu şekilde devam eder. |
Outline Levels (\U switch) |
Her paragraf, Paragraf Seçenekleri altında bir başlık seviyesi tanımlayabilir.
TOC içinde görünür Paragraf stilinde veya doğrudan paragrafta ayarlanan açıklama seviyesine sahip herhangi bir içerik, TOC’a dahildir. Aspose.Words ‘da, başlık düzeyi Paragraf düğümüne ait ' ParagraphFormat.OutlineLevel ' özelliği tarafından temsil edilir. Bir paragraf stilinin taslak düzeyi, aynı şekilde Style.ParagraphFormat özelliğinde gösterilir.
Not: Yerleşik başlık stilleri gibi Başlık 1'in taslak düzeyi zorla stil ayarlarında belirlenmiştir.
|
Custom Styles (\T switch) |
Bu anahtar, TOC ‘da kullanılacak girişlerin toplanmasında özel stillerin kullanılmasına izin verecek. Bu genellikle başlık stilleriyle birlikte özel stiller dahil etmek için kullanılan \O anahtarını kullanarak TOC’ya eklenir.
will content’i özel başlık 1 olarak biçimlendirilmiş düzeyi 1 içeriği ve CustomHeading2 olarak düzey 2 olarak kullanacaktır. |
TC Alanlarını Kullan (\F ve \L anahtarları) |
Eski sürümlerde Microsoft Word’da, bir Bu alanlar başka bir alan gibi herhangi bir pozisyonda bir belgeye eklenebilir ve
Sadece TC alanları içerecektir
- \F - Yukarıda açıklayın. * * * - \L - TOC bu anahtar kullanıyorsa, bu TC alanını belirtilen aralık içinde yalnızca dahil eder. - |
Görünüşle İlgili Anahtarlar
Devre değiştir | Açıklama |
---|---|
Omit Page Numbers (\N Switch) |
Bu anahtar, TOÇ’un belirli seviyelerinin sayfa numaralarını gizlemek için kullanılır. Örneğin, tanımlayabilirsiniz
Ve 3 ve dört seviyenin girişleri üzerindeki sayfa numaraları, lider noktalarla birlikte saklı olacaktır (eğer varsa). Sadece bir düzey belirtmek için hala bir aralık kullanılmalıdır, örneğin “1-1”, yalnızca ilk düzey sayfa numaralarını hariç tutacaktır.Tedarik edilecek bir seviye aralığı, tüm seviyeler için sayfa numaralarını çıkaracaktır. Bu, bir belgeyi HTML ya da buna benzer bir biçimde dışa aktarırken ayarlamak için yararlıdır. Bu, çünkü HTML tabanlı formatlar herhangi bir sayfa kavramına sahip olmadıkları ve dolayısıyla herhangi bir sayfa numaralandırma ihtiyacı olmadığı için. |
Bağlantı Olarak Ekle (\HSwitch) |
Bu anahtar, |
Set Separator Character (\P Switch) |
Bu anahtar, giriş başlığı ve sayfa numaralandırması arasındaki içeriği kolayca değiştirerek TOC’de değiştirmenizi sağlar. Kullanılacak ayırıcı bu anahtar kelime sonrası belirtilmeli ve tırnak içine alınmalıdır. |
Preserve Tab Entries (\W Switch) |
Bu anahtar, örneğin bir satırın sonunda bir sekme karakteri olan bir başlık gibi, herhangi bir girişi belirtir ki bu girişler, içeriği doldururken düzgün bir sekme karakteri olarak korunur. Bunun anlamı, sekme karakterinin işlevi |
Preserve New Line Entries (\X Switch) |
Yukarıdaki anahtar kelimeye benzer şekilde, bu anahtar kelime başlıkların birden fazla satıra yayılmasını (yeni satır karakterleri kullanarak, ayrı paragraflarla değil) belirtir ve üretilen İçindekiler tablosunda olduğu gibi korunur. Örneğin, birden fazla satıra yayılması gereken bir başlık, içeriği farklı satırlara ayırmak için yeni satır karakteri (Ctrl + Enter veya |
TC Alanlarını Girin
DocumentBuilder
konumundaki mevcut bir TC alanına DocumentBuilder.InsertField
yöntemini çağırarak yeni bir TC alanı ekleyebilirsiniz ve gerekli tüm anahtarlar ile birlikte alan adını “TC” olarak belirtin.
Aşağıdaki kod örneği, TC
alanını bir belgeye DocumentBuilder‘ü kullanarak nasıl ekleyeceğini göstermektedir.
// 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"); |
Sıklıkla TOC
için özel bir satır belirtilir ve bir TC
alanı ile işaretlenir. MS Word’te bunu yapmak kolay bir yol, metni vurgulamak ve ardından ALT+SHIFT+O’yu basmaktır. Bu, seçilen metin kullanılarak otomatik olarak bir TC
alanı oluşturur. Aynı tekniği kod aracılığıyla gerçekleştirilebilir. Aşağıdaki kod, girişle eşleşen metni bulacak ve metinle aynı konumda bir TC
alanı ekleyecektir. Kod, makalede kullanılan aynı teknik üzerine kurulmuştur. Aşağıdaki kod örneği bir belgedeki metinde bir TC
alanı bulup eklemeyi nasıl yapacağınızı göstermektedir.
// 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; | |
} | |
} |
Bir İçindekiler Tablosunu Değiştir
Biçimlendirme Stillerini Değiştir
TOC
içindeki girdilerin biçimlendirilmesi, işaretlenmiş girdilerin orijinal stillerini kullanmaz. Bunun yerine her düzey bir eşdeğer TOC
stili kullanılarak biçimlendirilir. Örneğin, TOC
düzeyinde ilk seviye TOC1 tarzında biçimlendirilir, ikinci seviye TOC2 tarzında biçimlendirilir ve öyle devam eder. Bu, görünümünü değiştirmek için TOC
bu stillerin değiştirilmesi gerektiği anlamına gelir. Bu Aspose.Words stilleri, yerelleştirilmiş olmayan StyleIdentifier.TOC1
ve StyleIdentifier.TOC9
kullanılarak temsil edilir ve bu kimlikler kullanılarak Document.Styles
koleksiyonundan alınabilir.
Doğru belgenin tarzını aldıktan sonra bu tarz için biçimlendirme değiştirilebilir. Bu stillerin herhangi bir değişikliği otomatik olarak belgedeki tabloların içeriği yansıtacaktır.
Aşağıdaki kod örneği birinci seviye TOC
stilinde kullanılan bir biçimlendirme özelliğini değiştirir.
// 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); | |
} |
Bu ayrıca herhangi bir doğrudan paragraf biçimlendirmesi (paragraf üzerinde tanımlanmış ve stil içinde değilse) TOC
‘da yer alacak şekilde işaretlendiğinde, girişin TOC’unda kopyalanacağını da not etmek yararlıdır. Örneğin, başlık 1 stili içeriği TOC
işaretlemek için kullanılır ve bu stil kalın biçimlendirme alırken paragraf da doğrudan ona italik biçimlendirme uygulanır. Sonuçlanan TOC
girişi kalın olmayacak çünkü bu stil formatlamasının bir parçası, ancak doğrudan paragraf üzerinde biçimlendirildiği için italik olacak.
Girintiler arasında her bir giriş ve sayfa numarası için kullanılan biçimlendirmenin kontrolünü de sağlayabilirsiniz. Varsayılan olarak, bu, sayfa numaralandırma için bir sekme karakteri ve bir sağ sekme duraklama çizgisi kullanılarak yayılan bir kırpılmış çizgi.
Kullanın Style
sınıfını belirli bir TOC
düzeyini değiştirmek istediğiniz için aldı, bu belgenin içinde nasıl göründüklerini de değiştirebilirsiniz.
Bunun görünümünü değiştirmek için önce Style.ParagraphFormat
çağrılmalıdır, stil için paragraf biçimi almak üzere. Bundan bu, sekme durakları ParagraphFormat.TabStops
çağırarak alınabilir ve uygun sekme durakının değiştirilmesi. Bu tekniği kullanarak sekmeler hareket ettirilebilir ya da tamamen çıkarılabilir.
Aşağıdaki kod örneği, TOC
ile ilgili paragraftaki sağ sekme duraklarının konumunu nasıl değiştireceğinizi göstermektedir.
// 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"); | |
} |
Bir İçindekiler Tablosunu Belgeye Kaldırın
İçindekiler tablosu, FieldStart
ve TOC
alanındaki FieldEnd düğümü arasındaki tüm düğümlerin kaldırılmasıyla belgeden çıkarılabilir.
Aşağıdaki kod bunu göstermektedir. Kaldırma TOC
alanı normal bir alan kadar basittir çünkü iç içe geçmiş alanları takip etmiyoruz. Bunun yerine, FieldEnd
‘nin türünün FieldType.FieldTOC
olduğunu kontrol ediyoruz ki bu bize geçerli tablo içeriğinin sonuna ulaştığımızı gösteriyor demek. Bu teknik bu durumda herhangi bir iç içe geçmiş alanı umursamadan kullanılabilir çünkü herhangi düzgün oluşturulmuş bir belgenin herhangi bir tam iç içe TOC
alanı başka bir TOC
alanının içinde olmayacağını varsayabiliriz.
Önce her TOC
nodun FieldStart
‘u toplanır ve saklanır. Belirtilen TOC
sonra numaralandırılır böylece alandaki tüm düğümler ziyaret edilir ve depolanır. Ardından düğümler belgeden çıkarılır. Aşağıdaki kod örneği, bir belgeden belirli bir TOC
‘u nasıl kaldırılacağını göstermektedir.
// 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"); |
İçindekiler tablosunu ayıkla
Bir Word belgesinden bir tablo oluşturmak istiyorsanız, aşağıdaki kod örneği kullanılabilir.
// 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 |