Ekstrak Konten Antar Node dalam Dokumen

Saat bekerja dengan dokumen, penting untuk dapat dengan mudah mengekstraksi konten dari rentang tertentu dalam dokumen. Namun, kontennya mungkin terdiri dari elemen kompleks seperti paragraf, tabel, gambar, dll.

Terlepas dari konten apa yang perlu diekstraksi, metode untuk mengekstrak konten tersebut akan selalu ditentukan oleh node mana yang dipilih untuk mengekstrak konten. Ini bisa berupa keseluruhan isi teks atau rangkaian teks sederhana.

Ada banyak kemungkinan situasi dan oleh karena itu banyak jenis node berbeda yang perlu dipertimbangkan saat mengekstraksi konten. Misalnya, Anda mungkin ingin mengekstrak konten antara:

  • Dua paragraf tertentu
  • Rangkaian teks tertentu
  • Bidang dari berbagai jenis, seperti bidang gabungan
  • Rentang awal dan akhir bookmark atau komentar
  • Berbagai badan teks terdapat dalam bagian terpisah

Dalam beberapa situasi, Anda bahkan mungkin perlu menggabungkan tipe simpul yang berbeda, seperti mengekstraksi konten antara paragraf dan bidang, atau antara eksekusi dan bookmark.

Artikel ini menyediakan implementasi kode untuk mengekstraksi teks antara node yang berbeda, serta contoh skenario umum.

Mengapa Mengekstrak Konten

Seringkali tujuan mengekstraksi konten adalah untuk menduplikasi atau menyimpannya secara terpisah di dokumen baru. Misalnya, Anda dapat mengekstrak konten dan:

  • Salin ke dokumen terpisah
  • Konversi bagian tertentu dari dokumen ke PDF atau gambar
  • Gandakan konten dalam dokumen berkali-kali
  • Bekerja dengan konten yang diekstraksi terpisah dari dokumen lainnya

Hal ini dapat dicapai dengan mudah menggunakan Aspose.Words dan implementasi kode di bawah ini.

Mengekstraksi Algoritma Konten

Kode di bagian ini membahas semua kemungkinan situasi yang dijelaskan di atas dengan satu metode umum dan dapat digunakan kembali. Garis besar umum teknik ini meliputi:

  1. Mengumpulkan node yang menentukan area konten yang akan diekstraksi dari dokumen Anda. Pengambilan node ini ditangani oleh pengguna dalam kodenya, berdasarkan apa yang ingin diekstraksi.
  2. Meneruskan node ini ke metode ExtractContent yang disediakan di bawah. Anda juga harus meneruskan parameter boolean yang menyatakan apakah node ini, yang bertindak sebagai penanda, harus disertakan dalam ekstraksi atau tidak.
  3. Mengambil daftar konten yang dikloning (disalin node) yang ditentukan untuk diekstraksi. Anda dapat menggunakan daftar node ini dengan cara apa pun yang dapat diterapkan, misalnya, membuat dokumen baru yang hanya berisi konten yang dipilih.

Cara Mengekstrak Konten

Untuk mengekstrak konten dari dokumen Anda, Anda perlu memanggil metode ExtractContent di bawah ini dan meneruskan parameter yang sesuai. Dasar yang mendasari metode ini melibatkan pencarian node tingkat blok (paragraf dan tabel) dan mengkloningnya untuk membuat salinan yang identik. Jika node penanda yang diteruskan adalah level blok maka metode ini dapat dengan mudah menyalin konten pada level tersebut dan menambahkannya ke array.

Namun jika node penandanya sejajar (anak dari paragraf) maka situasinya menjadi lebih kompleks, karena paragraf perlu dipecah pada node sebaris, baik itu run, kolom bookmark, dll. Konten dalam node induk yang dikloning tidak yang ada di antara penanda akan dihapus. Proses ini digunakan untuk memastikan bahwa node sebaris masih mempertahankan format paragraf induk. Metode ini juga akan menjalankan pemeriksaan pada node yang diteruskan sebagai parameter dan memberikan pengecualian jika salah satu node tidak valid. Parameter yang akan diteruskan ke metode ini adalah:

  1. StartNode dan EndNode. Dua parameter pertama adalah node yang menentukan di mana ekstraksi konten akan dimulai dan diakhiri. Node ini dapat berupa level blok (Paragraph, Table) atau level inline (misalnya Run, FieldStart, BookmarkStart, dll.):
    1. Untuk meneruskan suatu bidang, Anda harus meneruskan objek FieldStart yang sesuai
    2. Untuk meneruskan bookmark, node BookmarkStart dan BookmarkEnd harus dilewati
    3. Untuk menyampaikan komentar, node CommentRangeStart dan CommentRangeEnd harus digunakan
  2. IsInclusive. Menentukan apakah penanda disertakan dalam ekstraksi atau tidak. Jika opsi ini disetel ke false dan node yang sama atau node berurutan diteruskan, maka daftar kosong akan dikembalikan:
    1. Jika node FieldStart dilewatkan maka opsi ini menentukan apakah seluruh bidang akan disertakan atau dikecualikan
    2. Jika node BookmarkStart atau BookmarkEnd dilewatkan, opsi ini menentukan apakah bookmark disertakan atau hanya konten di antara rentang bookmark.
    3. Jika node CommentRangeStart atau CommentRangeEnd diteruskan, opsi ini menentukan apakah komentar itu sendiri akan disertakan atau hanya konten dalam rentang komentar.

Penerapan metode ExtractContent Anda dapat menemukan di Aspose.Words GitHub. Metode ini akan dirujuk dalam skenario di artikel ini.

Kami juga akan menentukan metode khusus untuk dengan mudah menghasilkan dokumen dari node yang diekstraksi. Metode ini digunakan dalam banyak skenario di bawah dan hanya membuat dokumen baru dan mengimpor konten yang diekstrak ke dalamnya.

Contoh kode berikut menunjukkan cara mengambil daftar node dan menyisipkannya ke dalam dokumen baru:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
public static Document GenerateDocument(Document srcDoc, List<Node> nodes)
{
Document dstDoc = new Document();
// Remove the first paragraph from the empty document.
dstDoc.FirstSection.Body.RemoveAllChildren();
// Import each node from the list into the new document. Keep the original formatting of the node.
NodeImporter importer = new NodeImporter(srcDoc, dstDoc, ImportFormatMode.KeepSourceFormatting);
foreach (Node node in nodes)
{
Node importNode = importer.ImportNode(node, true);
dstDoc.FirstSection.Body.AppendChild(importNode);
}
return dstDoc;
}

Ekstrak Konten Antar Paragraf

Ini menunjukkan cara menggunakan metode di atas untuk mengekstrak konten di antara paragraf tertentu. Dalam hal ini, kami ingin mengekstrak isi surat yang ditemukan di paruh pertama dokumen. Kita dapat mengatakan bahwa ini adalah antara paragraf ke 7 dan ke 11.

Kode di bawah menyelesaikan tugas ini. Paragraf yang sesuai diekstraksi menggunakan metode GetChild pada dokumen dan melewati indeks yang ditentukan. Kami kemudian meneruskan node ini ke metode ExtractContent dan menyatakan bahwa node tersebut akan disertakan dalam ekstraksi. Metode ini akan mengembalikan konten yang disalin di antara node-node ini yang kemudian disisipkan ke dalam dokumen baru.

Contoh kode berikut menunjukkan cara mengekstrak konten antar paragraf tertentu menggunakan metode ExtractContent di atas:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
Document doc = new Document(MyDir + "Extract content.docx");
Paragraph startPara = (Paragraph) doc.FirstSection.Body.GetChild(NodeType.Paragraph, 6, true);
Paragraph endPara = (Paragraph) doc.FirstSection.Body.GetChild(NodeType.Paragraph, 10, true);
// Extract the content between these nodes in the document. Include these markers in the extraction.
List<Node> extractedNodes = ExtractContentHelper.ExtractContent(startPara, endPara, true);
Document dstDoc = ExtractContentHelper.GenerateDocument(doc, extractedNodes);
dstDoc.Save(ArtifactsDir + "ExtractContent.ExtractContentBetweenParagraphs.docx");

Ekstrak Konten Antara Berbagai Jenis Node

Kami dapat mengekstrak konten antara kombinasi level blok atau node sebaris apa pun. Dalam skenario di bawah ini kami akan mengekstraksi konten antara paragraf pertama dan tabel di bagian kedua secara inklusif. Kami mendapatkan node penanda dengan memanggil metode FirstParagraph dan GetChild di bagian kedua dokumen untuk mengambil node Paragraph dan Table yang sesuai. Untuk sedikit variasi, mari kita duplikat kontennya dan sisipkan di bawah konten aslinya.

Contoh kode berikut menunjukkan cara mengekstrak konten antara paragraf dan tabel menggunakan metode ExtractContent:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
Document doc = new Document(MyDir + "Extract content.docx");
Paragraph startPara = (Paragraph) doc.LastSection.GetChild(NodeType.Paragraph, 2, true);
Table endTable = (Table) doc.LastSection.GetChild(NodeType.Table, 0, true);
// Extract the content between these nodes in the document. Include these markers in the extraction.
List<Node> extractedNodes = ExtractContentHelper.ExtractContent(startPara, endTable, true);
// Let's reverse the array to make inserting the content back into the document easier.
extractedNodes.Reverse();
foreach (Node extractedNode in extractedNodes)
endTable.ParentNode.InsertAfter(extractedNode, endTable);
doc.Save(ArtifactsDir + "ExtractContent.ExtractContentBetweenBlockLevelNodes.docx");

Ekstrak Konten Antar Paragraf Berdasarkan Gaya

Anda mungkin perlu mengekstrak konten antar paragraf dengan gaya yang sama atau berbeda, seperti antar paragraf yang ditandai dengan gaya judul. Kode di bawah ini menunjukkan cara mencapainya. Ini adalah contoh sederhana yang akan mengekstraksi konten antara contoh pertama gaya “Header 1” dan “Header 3” tanpa mengekstraksi judulnya juga. Untuk melakukan ini, kami menetapkan parameter terakhir ke false, yang menetapkan bahwa node penanda tidak boleh disertakan.

Dalam implementasi yang tepat, ini harus dijalankan dalam satu lingkaran untuk mengekstraksi konten di antara semua paragraf gaya ini dari dokumen. Konten yang diekstraksi disalin ke dalam dokumen baru.

Contoh kode berikut menunjukkan cara mengekstrak konten antar paragraf dengan gaya tertentu menggunakan metode ExtractContent:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
Document doc = new Document(MyDir + "Extract content.docx");
// Gather a list of the paragraphs using the respective heading styles.
List<Paragraph> parasStyleHeading1 = ParagraphsByStyleName(doc, "Heading 1");
List<Paragraph> parasStyleHeading3 = ParagraphsByStyleName(doc, "Heading 3");
// Use the first instance of the paragraphs with those styles.
Node startPara = parasStyleHeading1[0];
Node endPara = parasStyleHeading3[0];
// Extract the content between these nodes in the document. Don't include these markers in the extraction.
List<Node> extractedNodes = ExtractContentHelper.ExtractContent(startPara, endPara, false);
Document dstDoc = ExtractContentHelper.GenerateDocument(doc, extractedNodes);
dstDoc.Save(ArtifactsDir + "ExtractContent.ExtractContentBetweenParagraphStyles.docx");
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
public List<Paragraph> ParagraphsByStyleName(Document doc, string styleName)
{
// Create an array to collect paragraphs of the specified style.
List<Paragraph> paragraphsWithStyle = new List<Paragraph>();
NodeCollection paragraphs = doc.GetChildNodes(NodeType.Paragraph, true);
// Look through all paragraphs to find those with the specified style.
foreach (Paragraph paragraph in paragraphs)
{
if (paragraph.ParagraphFormat.Style.Name == styleName)
paragraphsWithStyle.Add(paragraph);
}
return paragraphsWithStyle;
}

Ekstrak Konten Di Antara Proses Tertentu

Anda juga dapat mengekstrak konten antar node sebaris seperti Run. Runs dari paragraf yang berbeda dapat diteruskan sebagai penanda. Kode di bawah ini menunjukkan cara mengekstrak teks tertentu di antara node Paragraph yang sama.

Contoh kode berikut menunjukkan cara mengekstrak konten di antara proses tertentu dari paragraf yang sama menggunakan metode ExtractContent:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
Document doc = new Document(MyDir + "Extract content.docx");
Paragraph para = (Paragraph) doc.GetChild(NodeType.Paragraph, 7, true);
Run startRun = para.Runs[1];
Run endRun = para.Runs[4];
// Extract the content between these nodes in the document. Include these markers in the extraction.
List<Node> extractedNodes = ExtractContentHelper.ExtractContent(startRun, endRun, true);
foreach (Node extractedNode in extractedNodes)
Console.WriteLine(extractedNode.ToString(SaveFormat.Text));

Ekstrak Konten menggunakan Bidang

Untuk menggunakan bidang sebagai penanda, node FieldStart harus diteruskan. Parameter terakhir pada metode ExtractContent akan menentukan apakah seluruh bidang akan disertakan atau tidak. Mari kita ekstrak konten antara bidang gabungan “Nama Lengkap” dan paragraf dalam dokumen. Kami menggunakan metode MoveToMergeField kelas DocumentBuilder. Ini akan mengembalikan node FieldStart dari nama bidang gabungan yang diteruskan ke sana.

Dalam kasus kita, mari kita atur parameter terakhir yang diteruskan ke metode ExtractContent ke false untuk mengecualikan bidang dari ekstraksi. Kami akan merender konten yang diekstraksi ke PDF.

Contoh kode berikut menunjukkan cara mengekstraksi konten antara bidang dan paragraf tertentu dalam dokumen menggunakan metode ExtractContent:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
Document doc = new Document(MyDir + "Extract content.docx");
DocumentBuilder builder = new DocumentBuilder(doc);
// Pass the first boolean parameter to get the DocumentBuilder to move to the FieldStart of the field.
// We could also get FieldStarts of a field using GetChildNode method as in the other examples.
builder.MoveToMergeField("Fullname", false, false);
// The builder cursor should be positioned at the start of the field.
FieldStart startField = (FieldStart) builder.CurrentNode;
Paragraph endPara = (Paragraph) doc.FirstSection.GetChild(NodeType.Paragraph, 5, true);
// Extract the content between these nodes in the document. Don't include these markers in the extraction.
List<Node> extractedNodes = ExtractContentHelper.ExtractContent(startField, endPara, false);
Document dstDoc = ExtractContentHelper.GenerateDocument(doc, extractedNodes);
dstDoc.Save(ArtifactsDir + "ExtractContent.ExtractContentUsingField.docx");

Ekstrak Konten dari Bookmark

Dalam dokumen, konten yang ditentukan dalam bookmark dienkapsulasi oleh node BookmarkStart dan BookmarkEnd. Konten yang ditemukan di antara dua node ini membentuk penanda. Anda dapat meneruskan salah satu dari node ini sebagai penanda apa pun, bahkan penanda dari penanda berbeda, selama penanda awal muncul sebelum penanda akhir dalam dokumen. Kami akan mengekstrak konten ini ke dalam dokumen baru menggunakan kode di bawah ini. Opsi parameter IsInclusive menunjukkan cara mempertahankan atau membuang bookmark.

Contoh kode berikut menunjukkan cara mengekstrak konten yang direferensikan ke bookmark menggunakan metode ExtractContent:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
Document doc = new Document(MyDir + "Extract content.docx");
Bookmark bookmark = doc.Range.Bookmarks["Bookmark1"];
BookmarkStart bookmarkStart = bookmark.BookmarkStart;
BookmarkEnd bookmarkEnd = bookmark.BookmarkEnd;
// Firstly, extract the content between these nodes, including the bookmark.
List<Node> extractedNodesInclusive = ExtractContentHelper.ExtractContent(bookmarkStart, bookmarkEnd, true);
Document dstDoc = ExtractContentHelper.GenerateDocument(doc, extractedNodesInclusive);
dstDoc.Save(ArtifactsDir + "ExtractContent.ExtractContentBetweenBookmark.IncludingBookmark.docx");
// Secondly, extract the content between these nodes this time without including the bookmark.
List<Node> extractedNodesExclusive = ExtractContentHelper.ExtractContent(bookmarkStart, bookmarkEnd, false);
dstDoc = ExtractContentHelper.GenerateDocument(doc, extractedNodesExclusive);
dstDoc.Save(ArtifactsDir + "ExtractContent.ExtractContentBetweenBookmark.WithoutBookmark.docx");

Ekstrak Konten dari Komentar

Sebuah komentar terdiri dari node CommentRangeStart, CommentRangeEnd, dan Comment. Semua node ini sejajar. Dua node pertama merangkum konten dalam dokumen yang direferensikan oleh komentar, seperti yang terlihat pada gambar di bawah.

Node Comment sendiri adalah InlineStory yang dapat berisi paragraf dan berjalan. Ini mewakili pesan komentar seperti yang terlihat sebagai gelembung komentar di panel ulasan. Karena simpul ini sebaris dan merupakan turunan dari badan, Anda juga dapat mengekstraksi konten dari dalam pesan ini.

Komentar merangkum judul, paragraf pertama, dan tabel di bagian kedua. Mari ekstrak komentar ini ke dalam dokumen baru. Opsi IsInclusive menentukan apakah komentar itu sendiri disimpan atau dibuang.

Contoh kode berikut menunjukkan cara melakukannya:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
Document doc = new Document(MyDir + "Extract content.docx");
CommentRangeStart commentStart = (CommentRangeStart) doc.GetChild(NodeType.CommentRangeStart, 0, true);
CommentRangeEnd commentEnd = (CommentRangeEnd) doc.GetChild(NodeType.CommentRangeEnd, 0, true);
// Firstly, extract the content between these nodes including the comment as well.
List<Node> extractedNodesInclusive = ExtractContentHelper.ExtractContent(commentStart, commentEnd, true);
Document dstDoc = ExtractContentHelper.GenerateDocument(doc, extractedNodesInclusive);
dstDoc.Save(ArtifactsDir + "ExtractContent.ExtractContentBetweenCommentRange.IncludingComment.docx");
// Secondly, extract the content between these nodes without the comment.
List<Node> extractedNodesExclusive = ExtractContentHelper.ExtractContent(commentStart, commentEnd, false);
dstDoc = ExtractContentHelper.GenerateDocument(doc, extractedNodesExclusive);
dstDoc.Save(ArtifactsDir + "ExtractContent.ExtractContentBetweenCommentRange.WithoutComment.docx");

Cara Mengekstrak Konten menggunakan DocumentVisitor

Gunakan kelas DocumentVisitor untuk mengimplementasikan skenario penggunaan ini. Kelas ini sesuai dengan pola desain Pengunjung yang terkenal. Dengan DocumentVisitor , Anda dapat menentukan dan menjalankan operasi khusus yang memerlukan enumerasi pada pohon dokumen.

DocumentVisitor menyediakan serangkaian metode VisitXXX yang dipanggil ketika elemen dokumen (node) tertentu ditemukan. Misalnya, VisitParagraphStart dipanggil ketika awal paragraf teks ditemukan dan VisitParagraphEnd dipanggil ketika akhir paragraf teks ditemukan. Setiap metode DocumentVisitor.VisitXXX menerima objek terkait yang ditemuinya sehingga Anda dapat menggunakannya sesuai kebutuhan (misalnya mengambil pemformatan), misalnya DocumentVisitor.VisitParagraphStart dan DocumentVisitor.VisitParagraphEnd menerima objek Paragraph.

Setiap metode DocumentVisitor.VisitXXX mengembalikan nilai VisitorAction yang mengontrol enumerasi node. Anda dapat meminta untuk melanjutkan pencacahan, melewati node saat ini (tetapi melanjutkan pencacahan), atau menghentikan pencacahan node.

Ini adalah langkah-langkah yang harus Anda ikuti untuk menentukan dan mengekstrak berbagai bagian dokumen secara terprogram:

  • Buat kelas turunan dari DocumentVisitor
  • Mengganti dan menyediakan implementasi untuk beberapa atau semua metode DocumentVisitor.VisitXXX untuk melakukan beberapa operasi khusus
  • Panggil Node.Accept pada node tempat Anda ingin memulai pencacahan, misalnya jika Anda ingin menghitung seluruh dokumen, gunakan Document.Accept

DocumentVisitor menyediakan implementasi default untuk semua metode DocumentVisitor.VisitXXX. Hal ini mempermudah pembuatan pengunjung dokumen baru karena hanya metode yang diperlukan untuk pengunjung tertentu yang perlu diganti. Tidak perlu mengganti semua metode pengunjung.

Contoh berikut menunjukkan cara menggunakan pola Pengunjung untuk menambahkan operasi baru ke model objek Aspose.Words. Dalam hal ini, kami membuat konverter dokumen sederhana ke dalam format teks:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
Document doc = new Document(MyDir + "Extract content.docx");
ConvertDocToTxt convertToPlainText = new ConvertDocToTxt();
// Note that every node in the object model has the accept method so the visiting
// can be executed not only for the whole document, but for any node in the document.
doc.Accept(convertToPlainText);
// Once the visiting is complete, we can retrieve the result of the operation,
// That in this example, has accumulated in the visitor.
Console.WriteLine(convertToPlainText.GetText());
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
/// <summary>
/// Simple implementation of saving a document in the plain text format. Implemented as a Visitor.
/// </summary>
internal class ConvertDocToTxt : DocumentVisitor
{
public ConvertDocToTxt()
{
mIsSkipText = false;
mBuilder = new StringBuilder();
}
/// <summary>
/// Gets the plain text of the document that was accumulated by the visitor.
/// </summary>
public string GetText()
{
return mBuilder.ToString();
}
/// <summary>
/// Called when a Run node is encountered in the document.
/// </summary>
public override VisitorAction VisitRun(Run run)
{
AppendText(run.Text);
// Let the visitor continue visiting other nodes.
return VisitorAction.Continue;
}
/// <summary>
/// Called when a FieldStart node is encountered in the document.
/// </summary>
public override VisitorAction VisitFieldStart(FieldStart fieldStart)
{
// In Microsoft Word, a field code (such as "MERGEFIELD FieldName") follows
// after a field start character. We want to skip field codes and output field.
// Result only, therefore we use a flag to suspend the output while inside a field code.
// Note this is a very simplistic implementation and will not work very well.
// If you have nested fields in a document.
mIsSkipText = true;
return VisitorAction.Continue;
}
/// <summary>
/// Called when a FieldSeparator node is encountered in the document.
/// </summary>
public override VisitorAction VisitFieldSeparator(FieldSeparator fieldSeparator)
{
// Once reached a field separator node, we enable the output because we are
// now entering the field result nodes.
mIsSkipText = false;
return VisitorAction.Continue;
}
/// <summary>
/// Called when a FieldEnd node is encountered in the document.
/// </summary>
public override VisitorAction VisitFieldEnd(FieldEnd fieldEnd)
{
// Make sure we enable the output when reached a field end because some fields
// do not have field separator and do not have field result.
mIsSkipText = false;
return VisitorAction.Continue;
}
/// <summary>
/// Called when visiting of a Paragraph node is ended in the document.
/// </summary>
public override VisitorAction VisitParagraphEnd(Paragraph paragraph)
{
// When outputting to plain text we output Cr+Lf characters.
AppendText(ControlChar.CrLf);
return VisitorAction.Continue;
}
public override VisitorAction VisitBodyStart(Body body)
{
// We can detect beginning and end of all composite nodes such as Section, Body,
// Table, Paragraph etc and provide custom handling for them.
mBuilder.Append("*** Body Started ***\r\n");
return VisitorAction.Continue;
}
public override VisitorAction VisitBodyEnd(Body body)
{
mBuilder.Append("*** Body Ended ***\r\n");
return VisitorAction.Continue;
}
/// <summary>
/// Called when a HeaderFooter node is encountered in the document.
/// </summary>
public override VisitorAction VisitHeaderFooterStart(HeaderFooter headerFooter)
{
// Returning this value from a visitor method causes visiting of this
// Node to stop and move on to visiting the next sibling node
// The net effect in this example is that the text of headers and footers
// Is not included in the resulting output
return VisitorAction.SkipThisNode;
}
/// <summary>
/// Adds text to the current output. Honors the enabled/disabled output flag.
/// </summary>
private void AppendText(string text)
{
if (!mIsSkipText)
mBuilder.Append(text);
}
private readonly StringBuilder mBuilder;
private bool mIsSkipText;
}

Cara Mengekstrak Teks Saja

Cara mengambil teks dari dokumen adalah:

  • Gunakan Document.Save dengan SaveFormat.Text untuk menyimpan sebagai teks biasa ke dalam file atau aliran
  • Gunakan Node.ToString dan teruskan parameter SaveFormat.Text. Secara internal, ini memanggil penyimpanan sebagai teks ke dalam aliran memori dan mengembalikan string yang dihasilkan
  • Gunakan Node.GetText untuk mengambil teks dengan semua karakter kontrol Microsoft Word termasuk kode bidang
  • Menerapkan DocumentVisitor khusus untuk melakukan ekstraksi khusus

Menggunakan Node.GetText dan Node.ToString

Dokumen Word dapat berisi karakter kontrol yang menunjuk elemen khusus seperti bidang, akhir sel, akhir bagian, dll. Daftar lengkap kemungkinan karakter kontrol Word ditentukan di kelas ControlChar. Metode Node.GetText mengembalikan teks dengan semua karakter kontrol yang ada di node.

Memanggil ToString mengembalikan representasi teks biasa dari dokumen saja tanpa karakter kontrol. Untuk informasi lebih lanjut tentang mengekspor sebagai teks biasa lihat bagian “Menggunakan SaveFormat.Teks” berikut.

Contoh kode berikut menunjukkan perbedaan antara memanggil metode GetText dan ToString pada sebuah node:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.InsertField("MERGEFIELD Field");
// When converted to text it will not retrieve fields code or special characters,
// but will still contain some natural formatting characters such as paragraph markers etc.
// This is the same as "viewing" the document as if it was opened in a text editor.
Console.WriteLine("Convert to text result: " + doc.ToString(SaveFormat.Text));

Menggunakan SaveFormat.Text

Contoh ini menyimpan dokumen sebagai berikut:

  • Menyaring karakter bidang dan kode bidang, bentuk, catatan kaki, catatan akhir, dan referensi komentar
  • Mengganti karakter ControlChar.Cr akhir paragraf dengan kombinasi ControlChar.CrLf
  • Menggunakan pengkodean UTF8

Contoh kode berikut menunjukkan cara menyimpan dokumen dalam format TXT:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
Document doc = new Document(MyDir + "Document.docx");
doc.Save(ArtifactsDir + "BaseConversions.DocxToTxt.txt");
view raw docx-to-txt.cs hosted with ❤ by GitHub

Ekstrak Gambar dari Bentuk

Anda mungkin perlu mengekstrak gambar dokumen untuk melakukan beberapa tugas. Aspose.Words memungkinkan Anda melakukan hal ini juga.

Contoh kode berikut menunjukkan cara mengekstrak gambar dari dokumen:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
Document doc = new Document(MyDir + "Images.docx");
NodeCollection shapes = doc.GetChildNodes(NodeType.Shape, true);
int imageIndex = 0;
foreach (Shape shape in shapes)
{
if (shape.HasImage)
{
string imageFileName =
$"Image.ExportImages.{imageIndex}_{FileFormatUtil.ImageTypeToExtension(shape.ImageData.ImageType)}";
// Note, if you have only an image (not a shape with a text and the image),
// you can use shape.GetShapeRenderer().Save(...) method to save the image.
shape.ImageData.Save(ArtifactsDir + imageFileName);
imageIndex++;
}
}