مدیریت نظرات ارائه در Java

مرور کلی

این مقاله نحوهٔ مدیریت نظرات ارائه در Aspose.Slides را توضیح می‌دهد. انواع اصلی مرتبط با نظرات را نشان می‌دهد و روش افزودن نظرات به اسلایدها، دسترسی به نظرات موجود، کار با پاسخ‌ها، استفاده از نظرات مدرن، و حذف نظرات از یک ارائه را نمایش می‌دهد.

مثال‌ها بر سناریوهای رایج بررسی و همکاری در PowerPoint تمرکز دارند؛ مانند اختصاص نظرات به نویسندگان، خواندن محتوای نظر و داده‌های متا، ساخت زنجیرهٔ پاسخ‌ها، و پاک‌سازی همهٔ نظرات یا حذف نظرات انتخابی.

در PowerPoint، یک نظر به عنوان یک یادداشت یا حاشیه‌نویسی بر روی اسلاید ظاهر می‌شود. هنگامی که روی یک نظر کلیک می‌شود، محتوای آن یا پیام‌ها نشان داده می‌گردند.

چرا نظرات به ارائه‌ها اضافه کنیم؟

ممکن است بخواهید برای ارائهٔ بازبینی‌شده خود، بازخورد بدهید یا با همکارانتان ارتباط برقرار کنید.

برای اینکه بتوانید در ارائه‌های PowerPoint از نظرات استفاده کنید، Aspose.Slides برای Java فراهم می‌کند:

  • کلاس Presentation که شامل مجموعهٔ نویسندگان (از رابط ICommentAuthorCollection ) است. نویسندگان نظرات را به اسلایدها اضافه می‌کنند.
  • رابط ICommentCollection که شامل مجموعهٔ نظرات برای هر نویسنده است.
  • کلاس IComment که اطلاعاتی دربارهٔ نویسندگان و نظرات آن‌ها شامل اینکه چه کسی نظر را اضافه کرده، زمان افزودن، موقعیت نظر و غیره را نگهداری می‌کند.
  • کلاس CommentAuthor که شامل اطلاعات مربوط به هر نویسنده است: نام نویسنده، حروف اولیه، نظرات مرتبط با نام نویسنده و غیره.

افزودن نظرات به اسلاید

این کد Java نشان می‌دهد چگونه به یک اسلاید در یک ارائه PowerPoint یک نظر اضافه کنید:

// نمونه‌سازی کلاس Presentation
Presentation pres = new Presentation();
try {
    // یک اسلاید خالی اضافه می‌کند
    pres.getSlides().addEmptySlide(pres.getLayoutSlides().get_Item(0));

    // یک نویسنده اضافه می‌کند
    ICommentAuthor author = pres.getCommentAuthors().addAuthor("Jawad", "MF");

    // موقعیت نظرات را تنظیم می‌کند
    Point2D.Float point = new Point2D.Float(0.2f, 0.2f);

    // یک نظر اسلاید برای نویسنده در اسلاید 1 اضافه می‌کند
    author.getComments().addComment("Hello Jawad, this is slide comment", pres.getSlides().get_Item(0), point, new Date());

    // یک نظر اسلاید برای نویسنده در اسلاید 2 اضافه می‌کند
    author.getComments().addComment("Hello Jawad, this is second slide comment", pres.getSlides().get_Item(1), point, new Date());

    // دسترسی به ISlide 1
    ISlide slide = pres.getSlides().get_Item(0);

    // زمانی که null به عنوان آرگومان پاس داده شود، نظرات تمام نویسندگان به اسلاید انتخاب شده منتقل می‌شوند
    IComment[] Comments = slide.getSlideComments(author);

    // دسترسی به نظر در ایندکس 0 برای اسلاید 1
    String str = Comments[0].getText();

    pres.save("Comments_out.pptx", SaveFormat.Pptx);

    if (Comments.length > 0)
    {
        // مجموعه نظرات نویسنده را در ایندکس 0 انتخاب می‌کند
        ICommentCollection commentCollection = Comments[0].getAuthor().getComments();
        String Comment = commentCollection.get_Item(0).getText();
    }
} finally {
    if (pres != null) pres.dispose();
}

دسترسی به نظرات اسلاید

این کد Java نشان می‌دهد چگونه به یک نظر موجود بر روی اسلاید در یک ارائه PowerPoint دسترسی پیدا کنید:

// نمونه‌سازی کلاس Presentation
Presentation pres = new Presentation("Comments1.pptx");
try {
    for (ICommentAuthor commentAuthor : pres.getCommentAuthors())
    {
        CommentAuthor author = (CommentAuthor) commentAuthor;
        for (IComment comment1 : author.getComments())
        {
            Comment comment = (Comment) comment1;
            System.out.println("ISlide :" + comment.getSlide().getSlideNumber() + " has comment: " + comment.getText() +
                    " with Author: " + comment.getAuthor().getName() + " posted on time :" + comment.getCreatedTime() + "\n");
        }
    }
} finally {
    if (pres != null) pres.dispose();
}

پاسخ به نظرات

یک نظر والد، نظر اصلی یا بالایی در یک سلسله‌مراتب نظرات یا پاسخ‌ها است. با استفاده از متدهای getParentComment یا setParentComment (از رابط IComment) می‌توانید یک نظر والد را تنظیم یا دریافت کنید.

این کد Java نشان می‌دهد چگونه نظرات اضافه کنید و پاسخ‌هایشان را دریافت کنید:

Presentation pres = new Presentation();
try {
    // یک نظر اضافه می‌کند
    ICommentAuthor author1 = pres.getCommentAuthors().addAuthor("Author_1", "A.A.");
    IComment comment1 = author1.getComments().addComment("comment1", pres.getSlides().get_Item(0), new Point2D.Float(10, 10), new Date());

    // یک پاسخ به comment1 اضافه می‌کند
    ICommentAuthor author2 = pres.getCommentAuthors().addAuthor("Autror_2", "B.B.");
    IComment reply1 = author2.getComments().addComment("reply 1 for comment 1", pres.getSlides().get_Item(0), new Point2D.Float(10, 10), new Date());
    reply1.setParentComment(comment1);

    // یک پاسخ دیگر به comment1 اضافه می‌کند
    IComment reply2 = author2.getComments().addComment("reply 2 for comment 1", pres.getSlides().get_Item(0),  new Point2D.Float(10, 10), new Date());
    reply2.setParentComment(comment1);

    // یک پاسخ به یک پاسخ موجود اضافه می‌کند
    IComment subReply = author1.getComments().addComment("subreply 3 for reply 2", pres.getSlides().get_Item(0),  new Point2D.Float(10, 10), new Date());
    subReply.setParentComment(reply2);

    IComment comment2 = author2.getComments().addComment("comment 2", pres.getSlides().get_Item(0), new Point2D.Float(10, 10), new Date());
    IComment comment3 = author2.getComments().addComment("comment 3", pres.getSlides().get_Item(0), new Point2D.Float(10, 10), new Date());

    IComment reply3 = author1.getComments().addComment("reply 4 for comment 3", pres.getSlides().get_Item(0), new Point2D.Float(10, 10), new Date());
    reply3.setParentComment(comment3);

    // ساختار سلسله‌مراتبی نظرات را در کنسول نمایش می‌دهد
    ISlide slide = pres.getSlides().get_Item(0);
    IComment[] comments = slide.getSlideComments(null);
    for (int i = 0; i < comments.length; i++)
    {
        IComment comment = comments[i];
        while (comment.getParentComment() != null)
        {
            System.out.print("\t");
            comment = comment.getParentComment();
        }

        System.out.println(comments[i].getAuthor().getName() +  " : " + comments[i].getText());
        System.out.println();
    }
    pres.save("parent_comment.pptx",SaveFormat.Pptx);

    // comment1 و تمام پاسخ‌های آن را حذف می‌کند
    comment1.remove();

    pres.save("remove_comment.pptx",SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

افزودن نظرات مدرن

در سال 2021، مایکروسافت «نظرات مدرن» را در PowerPoint معرفی کرد. ویژگی نظرات مدرن همکاری در PowerPoint را به‌طرز چشمگیری بهبود می‌بخشد. از طریق نظرات مدرن، کاربران PowerPoint می‌توانند نظرات را حل کنند، نظرات را به اشیاء و متن‌ها متصل کنند و به‌صورت بسیار ساده‌تری با هم تعامل داشته باشند.

در Aspose Slides for Java 21.11، ما پشتیبانی از نظرات مدرن را با افزودن کلاس ModernComment پیاده‌سازی کردیم. متدهای addModernComment و insertModernComment به کلاس CommentCollection اضافه شدند.

این کد Java نشان می‌دهد چگونه یک نظر مدرن به اسلایدی در یک ارائه PowerPoint اضافه کنید:

Presentation pres = new Presentation();
try {
    ICommentAuthor newAuthor = pres.getCommentAuthors().addAuthor("Some Author", "SA");
    IModernComment modernComment = newAuthor.getComments().addModernComment("This is a modern comment", pres.getSlides().get_Item(0), null, new Point2D.Float(100, 100), new Date());

    pres.save("pres.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

حذف نظرات

حذف تمام نظرات و نویسندگان

این کد Java نشان می‌دهد چگونه تمام نظرات و نویسندگان را در یک ارائه حذف کنید:

Presentation presentation = new Presentation("example.pptx");
try {
    // تمام نظرات را از ارائه حذف می‌کند
    for (ICommentAuthor author : presentation.getCommentAuthors())
    {
        author.getComments().clear();
    }

    // تمام نویسندگان را حذف می‌کند
    presentation.getCommentAuthors().clear();

    presentation.save("example_out.pptx", SaveFormat.Pptx);
} finally {
    if (presentation != null) presentation.dispose();
}

حذف نظرات خاص

این کد Java نشان می‌دهد چگونه نظرات خاصی را بر روی یک اسلاید حذف کنید:

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    // افزودن نظرات...
    ICommentAuthor author = presentation.getCommentAuthors().addAuthor("Author", "A");
    author.getComments().addComment("comment 1", slide, new Point2D.Float(0.2f, 0.2f), new Date());
    author.getComments().addComment("comment 2", slide, new Point2D.Float(0.3f, 0.2f), new Date());

    // حذف تمام نظراتی که متن "comment 1" را دارند
    for (ICommentAuthor commentAuthor : presentation.getCommentAuthors())
    {
        ArrayList<IComment> toRemove = new ArrayList<IComment>();
        for (IComment comment : slide.getSlideComments(commentAuthor))
        {
            if (comment.getText().equals("comment 1"))
            {
                toRemove.add(comment);
            }
        }

        for (IComment comment : toRemove)
        {
            commentAuthor.getComments().remove(comment);
        }
    }

    presentation.save("pres.pptx", SaveFormat.Pptx);
} finally {
    if (presentation != null) presentation.dispose();
}

سوالات متداول

آیا Aspose.Slides برای نظرات مدرن وضعیت «حل‌شده» را پشتیبانی می‌کند؟

بله. نظرات مدرن متد setStatus را ارائه می‌دهند؛ می‌توانید وضعیت نظرتان (مثلاً علامت‌گذاری به‌عنوان حل‌شده) را تنظیم کنید و این وضعیت در فایل ذخیره شده و توسط PowerPoint شناخته می‌شود.

آیا بحث‌های زنجیره‌ای (reply chains) پشتیبانی می‌شوند و آیا محدودیتی برای تو در تو بودن وجود دارد؟

بله. هر نظر می‌تواند به parent comment خود ارجاع دهد و اجازهٔ ایجاد زنجیره‌های پاسخ دلخواه را می‌دهد. API محدودیت عمق خاصی اعلام نکرده است.

موقعیت علامت‌گذار یک نظر بر روی اسلاید در چه سامانهٔ مختصاتی تعریف می‌شود؟

موقعیت به‌صورت یک نقطهٔ شناور در سامانهٔ مختصات اسلاید ذخیره می‌شود. این امکان را می‌دهد تا علامت‌گذار نظر را دقیقاً در مکانی که می‌خواهید قرار دهید.