Table of Contents (TOC) adalah bagian penting dari Dokumen Word. Ini memberikan ikhtisar konten dokumen dan memungkinkan Anda menavigasi ke bagian yang diinginkan dengan cepat. Anda mungkin menemukan diri Anda dalam skenario di mana Anda perlu menambah, mengekstrak, memperbarui, atau menghapus daftar isi dari dokumen Word secara terprogram. Untuk itu, artikel ini akan mengajarkan Anda cara bekerja dengan daftar isi di file Word menggunakan C++.
- C++ API untuk Bekerja dengan Daftar Isi di Dokumen Word
- Tambahkan Daftar Isi dalam Dokumen Word
- Ekstrak Daftar Isi dari Dokumen Word
- Perbarui Daftar Isi dalam Dokumen Word
- Hapus Daftar Isi dari Dokumen Word
C++ API untuk Bekerja dengan Daftar Isi di Dokumen Word
Aspose.Words for C++ adalah pustaka C++ asli yang memungkinkan Anda membuat, membaca, memodifikasi, dan mengonversi dokumen Microsoft Word. Selain itu, ini juga mendukung bekerja dengan daftar isi di file Word. Anda dapat menginstal API melalui NuGet atau mengunduhnya langsung dari bagian Unduhan.
PM> Install-Package Aspose.Words.Cpp
Tambahkan Daftar Isi dalam Dokumen Word
Berikut ini adalah langkah-langkah untuk menambahkan daftar isi pada dokumen Word.
- Muat file Word menggunakan kelas Document.
- Buat instance kelas DocumentBuilder menggunakan objek Document yang dibuat sebelumnya.
- Masukkan daftar isi menggunakan metode DocumentBuilder->InsertTableOfContents(System::String switch).
- Isi daftar isi menggunakan metode Document->UpdateFields().
- Simpan dokumen Word menggunakan metode Document->Save(System::String fileName).
Kode contoh berikut menunjukkan cara menambahkan daftar isi dalam dokumen Word menggunakan C++.
// Jalur direktori sumber dan keluaran.
System::String sourceDataDir = u"SourceDirectory\\";
System::String outputDataDir = u"OutputDirectory\\";
// Muat file Word
System::SharedPtr<Document> doc = System::MakeObject<Document>(sourceDataDir + u"Sample 5.docx");
// Buat instance dari kelas DocumentBuilder
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
// Sisipkan daftar isi di awal dokumen.
builder->InsertTableOfContents(u"\\o \"1-3\" \\h \\z \\u");
// Daftar isi yang baru dimasukkan awalnya akan kosong.
// Itu perlu diisi dengan memperbarui bidang dalam dokumen.
doc->UpdateFields();
// Jalur file keluaran
System::String outputPath = outputDataDir + u"AddTOC.docx";
// Simpan file Word
doc->Save(outputPath);
Ekstrak Daftar Isi dari Dokumen Word
Berikut ini adalah langkah-langkah untuk mengekstrak daftar isi dari dokumen Word.
- Muat file Word menggunakan kelas Document.
- Ambil bidang menggunakan metode Document->getRange()->getFields() dan ulangi.
- Periksa apakah bidang bertipe FieldType::FieldHyperlink.
- Periksa apakah bidang milik daftar isi.
- Mengambil dan mencetak informasi lapangan.
Kode contoh berikut menunjukkan cara mengekstrak daftar isi dari dokumen Word menggunakan C++.
// Direktori sumber
System::String inputDataDir = u"SourceDirectory\\";
// Muat file Word
System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"SampleTOC.docx");
// Loop melalui bidang
for (System::SharedPtr<Field> field : System::IterateOver(doc->get_Range()->get_Fields()))
{
// Dapatkan bidang FieldHyperlink
if (field->get_Type() == FieldType::FieldHyperlink)
{
System::SharedPtr<FieldHyperlink> hyperlink = System::DynamicCast<FieldHyperlink>(field);
// Periksa apakah bidang milik TOC
if (hyperlink->get_SubAddress() != nullptr && hyperlink->get_SubAddress().StartsWith(u"_Toc"))
{
System::SharedPtr<Paragraph> tocItem = System::DynamicCast<Paragraph>(field->get_FieldStart()->GetAncestor(NodeType::Paragraph));
std::cout << System::StaticCast<Node>(tocItem)->ToString(SaveFormat::Text).Trim().ToUtf8String() << std::endl;
std::cout << "------------------" << std::endl;
if (tocItem != nullptr)
{
System::SharedPtr<Bookmark> bm = doc->get_Range()->get_Bookmarks()->idx_get(hyperlink->get_SubAddress());
// Dapatkan lokasi yang ditunjuk Item TOC ini
System::SharedPtr<Paragraph> pointer = System::DynamicCast<Paragraph>(bm->get_BookmarkStart()->GetAncestor(NodeType::Paragraph));
std::cout << System::StaticCast<Node>(pointer)->ToString(SaveFormat::Text).ToUtf8String() << std::endl;
}
}
}
}
Perbarui Daftar Isi dalam Dokumen Word
Jika konten dokumen telah diperbarui, dan Anda perlu mencerminkan perubahan tersebut di daftar isi, Anda hanya perlu memuat file Word dan memanggil metode Document->UpdateFields(). Metode ini akan memperbarui daftar isi sesuai dengan konten yang dimodifikasi. Setelah ini, simpan dokumen Word yang diperbarui.
Hapus Daftar Isi dari Dokumen Word
Berikut ini adalah langkah-langkah untuk menghapus daftar isi dari dokumen Word.
- Muat file Word menggunakan kelas Document.
- Ambil dan simpan daftar node FieldStart.
- Ulangi node hingga Anda mencapai node bertipe NodeType::FieldEnd yang menunjukkan akhir dari daftar isi.
- Hapus daftar isi menggunakan metode Node->Remove().
- Simpan dokumen Word menggunakan metode Document->Save(System::String fileName).
Kode contoh berikut menunjukkan cara menghapus daftar isi dari Dokumen Word menggunakan C++.
void RemoveTableOfContents(const System::SharedPtr<Document>& doc, int32_t index)
{
// Simpan node FieldStart dari bidang TOC dalam dokumen untuk akses cepat.
std::vector<System::SharedPtr<FieldStart>> fieldStarts;
// Ini adalah daftar untuk menyimpan node yang ditemukan di dalam TOC yang ditentukan. Mereka akan dihapus
// pada akhir metode ini.
std::vector<System::SharedPtr<Node>> nodeList;
for (System::SharedPtr<FieldStart> start : System::IterateOver<System::SharedPtr<FieldStart>>(doc->GetChildNodes(NodeType::FieldStart, true)))
{
if (start->get_FieldType() == FieldType::FieldTOC)
{
// Tambahkan semua FieldStarts yang bertipe FieldTOC.
fieldStarts.push_back(start);
}
}
// Pastikan bahwa TOC yang ditentukan oleh indeks yang diteruskan ada.
if (index > fieldStarts.size() - 1)
{
throw System::ArgumentOutOfRangeException(u"TOC index is out of range");
}
bool isRemoving = true;
// Dapatkan FieldStart dari TOC yang ditentukan.
System::SharedPtr<Node> currentNode = fieldStarts[index];
while (isRemoving)
{
// Lebih aman untuk menyimpan node ini dan menghapusnya sekaligus nanti.
nodeList.push_back(currentNode);
currentNode = currentNode->NextPreOrder(doc);
// Setelah kami menemukan simpul FieldEnd bertipe FieldTOC, maka kami tahu bahwa kami berada di akhir
// dari TOC saat ini dan kita bisa berhenti di sini.
if (currentNode->get_NodeType() == NodeType::FieldEnd)
{
System::SharedPtr<FieldEnd> fieldEnd = System::DynamicCast<FieldEnd>(currentNode);
if (fieldEnd->get_FieldType() == FieldType::FieldTOC)
{
isRemoving = false;
}
}
}
// Hapus semua node yang ditemukan di TOC yang ditentukan.
for (System::SharedPtr<Node> node : nodeList)
{
node->Remove();
}
}
int main()
{
// Jalur direktori sumber dan keluaran.
System::String sourceDataDir = u"SourceDirectory\\";
System::String outputDataDir = u"OutputDirectory\\";
// Buka dokumen Word
System::SharedPtr<Document> doc = System::MakeObject<Document>(sourceDataDir + u"SampleTOC.docx");
// Hapus daftar isi pertama dari dokumen.
RemoveTableOfContents(doc, 0);
// Jalur file keluaran
System::String outputPath = outputDataDir + u"RemoveTOC.docx";
// Simpan file Word
doc->Save(outputPath);
}
Dapatkan Lisensi Gratis
Anda dapat mencoba API tanpa batasan evaluasi dengan meminta lisensi sementara gratis.
Kesimpulan
Pada artikel ini, Anda telah mempelajari cara bekerja dengan daftar isi dalam dokumen Word menggunakan C++. Anda telah melihat langkah-langkah dan contoh kode yang diperlukan untuk menambah, mengekstrak, memperbarui, dan menghapus daftar isi dari dokumen Word. Aspose.Words for C++ menyediakan banyak fitur tambahan untuk bekerja dengan file Word. Anda dapat menjelajahi API secara mendetail dengan mengunjungi dokumentasi resmi. Jika ada pertanyaan, jangan ragu untuk menghubungi kami di [forum dukungan gratis] kami21.