العمل مع التعليقات
حاول عبر الإنترنت
يمكنك تجربة هذه الوظيفة مع إزالة التعليقات التوضيحية مجانًا عبر الإنترنت الخاص بنا.
يتيح Aspose.Words للمستخدمين العمل مع التعليقات - يتم تمثيل التعليقات الموجودة في مستند في Aspose.Words بواسطة فئة Comment. استخدم أيضًا فئات CommentRangeStart وCommentRangeEnd لتحديد منطقة النص التي يجب أن ترتبط بالتعليق.
اضف تعليق
يسمح لك Aspose.Words بإضافة التعليقات بعدة طرق:
- استخدام فئة Comment
- استخدام فئتي CommentRangeStart وCommentRangeEnd
يوضح مثال التعليمات البرمجية التالي كيفية إضافة تعليق إلى فقرة باستخدام فئة Comment:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir_WorkingWithComments(); | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
builder.Write("Some text is added."); | |
Comment comment = new Comment(doc, "Awais Hafeez", "AH", DateTime.Today); | |
builder.CurrentParagraph.AppendChild(comment); | |
comment.Paragraphs.Add(new Paragraph(doc)); | |
comment.FirstParagraph.Runs.Add(new Run(doc, "Comment text.")); | |
dataDir = dataDir + "Comments_out.doc"; | |
// Save the document. | |
doc.Save(dataDir); |
يوضح مثال التعليمات البرمجية التالي كيفية إضافة تعليق إلى فقرة باستخدام منطقة نص وفئتي CommentRangeStart وCommentRangeEnd:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir_WorkingWithComments(); | |
Document doc = new Document(); | |
Paragraph para1 = new Paragraph(doc); | |
Run run1 = new Run(doc, "Some "); | |
Run run2 = new Run(doc, "text "); | |
para1.AppendChild(run1); | |
para1.AppendChild(run2); | |
doc.FirstSection.Body.AppendChild(para1); | |
Paragraph para2 = new Paragraph(doc); | |
Run run3 = new Run(doc, "is "); | |
Run run4 = new Run(doc, "added "); | |
para2.AppendChild(run3); | |
para2.AppendChild(run4); | |
doc.FirstSection.Body.AppendChild(para2); | |
Comment comment = new Comment(doc, "Awais Hafeez", "AH", DateTime.Today); | |
comment.Paragraphs.Add(new Paragraph(doc)); | |
comment.FirstParagraph.Runs.Add(new Run(doc, "Comment text.")); | |
CommentRangeStart commentRangeStart = new CommentRangeStart(doc, comment.Id); | |
CommentRangeEnd commentRangeEnd = new CommentRangeEnd(doc, comment.Id); | |
run1.ParentNode.InsertAfter(commentRangeStart, run1); | |
run3.ParentNode.InsertAfter(commentRangeEnd, run3); | |
commentRangeEnd.ParentNode.InsertAfter(comment, commentRangeEnd); | |
dataDir = dataDir + "Anchor.Comment_out.doc"; | |
// Save the document. | |
doc.Save(dataDir); |
استخراج أو إزالة التعليقات
يعد استخدام التعليقات في مستند Word (بالإضافة إلى تعقب التغييرات) ممارسة شائعة عند مراجعة المستندات، خاصة عندما يكون هناك عدة مراجعين. يمكن أن تكون هناك مواقف يكون فيها الشيء الوحيد الذي تحتاجه من المستند هو التعليقات. لنفترض أنك تريد إنشاء قائمة بنتائج المراجعة، أو ربما قمت بجمع كل المعلومات المفيدة من المستند وتريد ببساطة إزالة التعليقات غير الضرورية. قد ترغب في عرض أو إزالة تعليقات مراجع معين.
في هذه العينة، سنلقي نظرة على بعض الأساليب البسيطة لجمع المعلومات من التعليقات داخل المستند ولإزالة التعليقات من المستند. سنغطي على وجه التحديد كيفية:
- استخراج كافة التعليقات من وثيقة أو فقط تلك التي أدلى بها مؤلف معين
- إزالة كافة التعليقات من مستند أو من مؤلف معين فقط
كيفية استخراج أو إزالة التعليقات
التعليمات البرمجية الموجودة في هذه العينة بسيطة للغاية وتعتمد كافة الأساليب على نفس الأسلوب. يتم تمثيل التعليق في مستند Word بواسطة كائن Comment في نموذج كائن مستند Aspose.Words. لتجميع كل التعليقات في مستند، استخدم أسلوب GetChildNodes مع تعيين المعلمة الأولى على NodeType.Comment. تأكد من تعيين المعلمة الثانية لأسلوب GetChildNodes على true: وهذا يفرض على GetChildNodes الاختيار من جميع العقد الفرعية بشكل متكرر، بدلاً من جمع العناصر الفرعية المباشرة فقط.
لتوضيح كيفية استخراج التعليقات وإزالتها من مستند، سنمر بالخطوات التالية:
- افتح مستند Word باستخدام فئة Document
- احصل على كافة التعليقات من المستند في مجموعة
- لاستخراج التعليقات:
- انتقل إلى المجموعة باستخدام عامل التشغيل foreach
- قم باستخراج وإدراج اسم المؤلف والتاريخ والوقت ونص جميع التعليقات
- قم باستخراج وإدراج اسم المؤلف والتاريخ والوقت ونص التعليقات المكتوبة بواسطة مؤلف محدد، في هذه الحالة المؤلف ‘ks’
- لإزالة التعليقات:
- قم بالرجوع للخلف خلال المجموعة باستخدام عامل التشغيل for
- إزالة التعليقات
- احفظ التغييرات
كيفية استخراج كافة التعليقات
تعد طريقة GetChildNodes مفيدة جدًا ويمكنك استخدامها في كل مرة تحتاج فيها إلى الحصول على قائمة بعقد المستندات من أي نوع. لا تنشئ المجموعة الناتجة حملًا مباشرًا لأنه يتم تحديد العقد في هذه المجموعة فقط عند تعداد العناصر الموجودة فيها أو الوصول إليها.
يوضح مثال التعليمات البرمجية التالي كيفية استخراج اسم المؤلف والتاريخ والوقت والنص لجميع التعليقات في المستند:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
static ArrayList ExtractComments(Document doc) | |
{ | |
ArrayList collectedComments = new ArrayList(); | |
// Collect all comments in the document | |
NodeCollection comments = doc.GetChildNodes(NodeType.Comment, true); | |
// Look through all comments and gather information about them. | |
foreach (Comment comment in comments) | |
{ | |
collectedComments.Add(comment.Author + " " + comment.DateTime + " " + comment.ToString(SaveFormat.Text)); | |
} | |
return collectedComments; | |
} |
كيفية استخراج تعليقات مؤلف محدد
بعد تحديد عقد Comment في المجموعة، كل ما عليك فعله هو استخراج المعلومات التي تحتاجها. في هذه العينة، يتم دمج الأحرف الأولى من اسم المؤلف والتاريخ والوقت والنص العادي للتعليق في سلسلة واحدة؛ يمكنك اختيار تخزينه بطرق أخرى بدلاً من ذلك.
الطريقة المثقلة التي تستخرج التعليقات من مؤلف معين هي نفسها تقريبًا، فهي تتحقق فقط من اسم المؤلف قبل إضافة المعلومات إلى المصفوفة.
يوضح مثال التعليمات البرمجية التالي كيفية استخراج اسم المؤلف وتاريخه ووقته ونص التعليقات بواسطة المؤلف المحدد:
كيفية إزالة التعليقات
إذا كنت تقوم بإزالة جميع التعليقات، فليست هناك حاجة للتنقل خلال المجموعة لحذف التعليقات واحدًا تلو الآخر. يمكنك إزالتها عن طريق استدعاء الأسلوب Clear في مجموعة التعليقات.
يوضح مثال التعليمات البرمجية التالي كيفية إزالة كافة التعليقات في المستند:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
static void RemoveComments(Document doc) | |
{ | |
// Collect all comments in the document | |
NodeCollection comments = doc.GetChildNodes(NodeType.Comment, true); | |
// Remove all comments. | |
comments.Clear(); | |
} |
عندما تحتاج إلى إزالة التعليقات بشكل انتقائي، تصبح العملية أكثر تشابهًا مع الكود الذي استخدمناه لاستخراج التعليقات.
يوضح مثال التعليمات البرمجية التالي كيفية إزالة التعليقات بواسطة المؤلف المحدد:
النقطة الرئيسية التي يجب تسليط الضوء عليها هنا هي استخدام عامل التشغيل. على عكس الاستخراج البسيط، هنا تريد حذف تعليق. الحيلة المناسبة هي تكرار المجموعة بشكل عكسي من التعليق الأخير إلى التعليق الأول. والسبب في ذلك هو أنه إذا بدأت من النهاية وانتقلت للخلف، فسيظل فهرس العناصر السابقة دون تغيير، ويمكنك العودة إلى العنصر الأول في المجموعة.
يوضح مثال التعليمات البرمجية التالي طرق استخراج التعليقات وإزالتها:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir_WorkingWithComments(); | |
string fileName = "TestFile.doc"; | |
// Open the document. | |
Document doc = new Document(dataDir + fileName); | |
// Extract the information about the comments of all the authors. | |
foreach (string comment in ExtractComments(doc)) | |
Console.Write(comment); | |
// Remove comments by the "pm" author. | |
RemoveComments(doc, "pm"); | |
Console.WriteLine("Comments from \"pm\" are removed!"); | |
// Extract the information about the comments of the "ks" author. | |
foreach (string comment in ExtractComments(doc, "ks")) | |
Console.Write(comment); | |
//Read the comment's reply and resolve them. | |
CommentResolvedandReplies(doc); | |
// Remove all comments. | |
RemoveComments(doc); | |
Console.WriteLine("All comments are removed!"); | |
dataDir = dataDir + RunExamples.GetOutputFilePath(fileName); | |
// Save the document. | |
doc.Save(dataDir); |
كيفية إزالة تعليق بين CommentRangeStart وCommentRangeEnd
باستخدام Aspose.Words، يمكنك أيضًا إزالة التعليقات بين عقدتي CommentRangeStart وCommentRangeEnd.
يوضح مثال التعليمات البرمجية التالي كيفية إزالة النص بين CommentRangeStart وCommentRangeEnd:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir_WorkingWithComments(); | |
string fileName = "TestFile.doc"; | |
// Open the document. | |
Document doc = new Document(dataDir + fileName); | |
CommentRangeStart commentStart = (CommentRangeStart)doc.GetChild(NodeType.CommentRangeStart, 0, true); | |
CommentRangeEnd commentEnd = (CommentRangeEnd)doc.GetChild(NodeType.CommentRangeEnd, 0, true); | |
Node currentNode = commentStart; | |
Boolean isRemoving = true; | |
while (currentNode != null && isRemoving) | |
{ | |
if (currentNode.NodeType == NodeType.CommentRangeEnd) | |
isRemoving = false; | |
Node nextNode = currentNode.NextPreOrder(doc); | |
currentNode.Remove(); | |
currentNode = nextNode; | |
} | |
dataDir = dataDir + "RemoveRegionText_out.doc"; | |
// Save the document. | |
doc.Save(dataDir); |
إضافة أو إزالة الرد على التعليق
تضيف طريقة AddReply ردًا على هذا التعليق. يرجى ملاحظة أنه نظرًا للقيود الحالية لمكتب Microsoft، يُسمح فقط بمستوى واحد من الردود في المستند. سيتم ظهور استثناء من النوع InvalidOperationException إذا تم استدعاء هذه الطريقة على تعليق الرد الموجود.
يمكنك استخدام طريقة RemoveReply لإزالة الرد المحدد على هذا التعليق.
يوضح مثال التعليمات البرمجية التالي كيفية إضافة رد على التعليق وإزالة رد التعليق:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(dataDir + "TestFile.doc"); | |
Comment comment = (Comment)doc.GetChild(NodeType.Comment, 0, true); | |
//Remove the reply | |
comment.RemoveReply(comment.Replies[0]); | |
//Add a reply to comment | |
comment.AddReply("John Doe", "JD", new DateTime(2017, 9, 25, 12, 15, 0), "New reply"); | |
dataDir = dataDir + "TestFile_Out.doc"; | |
// Save the document to disk. | |
doc.Save(dataDir); |
اقرأ رد التعليق
تقوم الخاصية Replies بإرجاع مجموعة من كائنات Comment التي تعتبر أبناء مباشرين للتعليق المحدد.
يوضح مثال التعليمات البرمجية التالي كيفية تكرار ردود التعليقات وحلها:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
static void CommentResolvedandReplies(Document doc) | |
{ | |
NodeCollection comments = doc.GetChildNodes(NodeType.Comment, true); | |
Comment parentComment = (Comment)comments[0]; | |
foreach (Comment childComment in parentComment.Replies) | |
{ | |
// Get comment parent and status. | |
Console.WriteLine(childComment.Ancestor.Id); | |
Console.WriteLine(childComment.Done); | |
// And update comment Done mark. | |
childComment.Done = true; | |
} | |
} |