_0}} not inside code fences. Keep them as is.

Now produce final answer.# สร้างไฮไลท์ PDF ด้วย Java: คู่มือครบวงจรสำหรับการไฮไลท์ PDF

บทนำ

เคยเจอปัญหาในการจัดการข้อเสนอแนะในหลายเวอร์ชันของเอกสารหรือไม่? คุณไม่ได้อยู่คนเดียว ไม่ว่าคุณจะกำลังสร้างระบบจัดการเอกสาร, พัฒนาแพลตฟอร์มการศึกษา, หรือสร้างเครื่องมือทำงานร่วมกัน, create pdf highlights java อาจเป็นเรื่องที่ท้าทายอย่างมากเมื่อต้องทำจากศูนย์

นี่คือจุดที่ GroupDocs.Annotation for Java เข้ามาช่วยเหลือ ไลบรารีที่ทรงพลังนี้ทำให้ภารกิจการทำ annotation บน PDF ที่ซับซ้อนกลายเป็นขั้นตอนง่าย ๆ ให้คุณเพิ่มไฮไลท์, คอมเมนต์, และการตอบกลับโดยไม่ต้องต่อสู้กับการจัดการ PDF ระดับล่าง

ในบทแนะนำที่ครอบคลุมนี้ คุณจะได้เรียนรู้วิธี highlight pdf in java ผ่านตัวอย่างจริง เราจะพาคุณผ่านทุกขั้นตอนตั้งแต่การตั้งค่าเบื้องต้นจนถึงเทคนิคการไฮไลท์ขั้นสูง พร้อมเคล็ดลับที่ได้จากการใช้งานจริงในสภาพแวดล้อมการผลิต

นี่คือสิ่งที่คุณจะได้เรียนรู้:

  • การตั้งค่า GroupDocs.Annotation ในโปรเจกต์ Java ของคุณ (แบบที่ถูกต้อง)
  • การสร้างไฮไลท์ PDF แบบโต้ตอบพร้อมการปรับสไตล์ตามต้องการ
  • การเพิ่มการตอบกลับและคอมเมนต์แบบเธรดสำหรับการทำงานร่วมกัน
  • การจัดการกับปัญหาที่พบบ่อยและการเพิ่มประสิทธิภาพการทำงาน
  • กลยุทธ์การนำไปใช้ในโลกจริง

พร้อมหรือยังที่จะทำให้ PDF ของคุณกลายเป็นเอกสารโต้ตอบและทำงานร่วมกัน? ไปกันเลย!

คำตอบสั้น

  • ไลบรารีใดที่ทำให้การไฮไลท์ PDF ใน Java ง่ายขึ้น? GroupDocs.Annotation for Java
  • การพึ่งพา Maven ใดที่เพิ่มไลบรารีนี้? com.groupdocs:groupdocs-annotation:25.2
  • ต้องมีลิขสิทธิ์สำหรับการพัฒนาหรือไม่? ลิขสิทธิ์ชั่วคราวฟรีใช้สำหรับการทดสอบ; ต้องมีลิขสิทธิ์แบบชำระเงินสำหรับการผลิต
  • สามารถเพิ่มคอมเมนต์ให้กับไฮไลท์ได้หรือไม่? ได้, คุณสามารถแนบการตอบกลับและคอมเมนต์แบบเธรดได้
  • จะจัดการหน่วยความจำสำหรับ PDF ขนาดใหญ่อย่างไร? ใช้ try‑with‑resources และเรียก dispose() หลังจากบันทึก

ทำไมต้องเลือก GroupDocs.Annotation for Java สำหรับการประมวลผล PDF?

ก่อนที่เราจะกระโดดเข้าสู่โค้ด มาพูดถึงเหตุผลที่ GroupDocs.Annotation โดดเด่นในสนามของไลบรารี PDF สำหรับ Java

ปัญหาการทำ Annotation ด้วยตนเอง: การสร้าง Annotation บน PDF ตั้งแต่ต้นหมายถึงต้องจัดการกับสเปค PDF ที่ซับซ้อน, ระบบพิกัด, และเอนจินการเรนเดอร์ ฉันเคยเห็นนักพัฒนาต้องใช้เวลาหลายสัปดาห์เพียงเพื่อให้ไฮไลท์พื้นฐานทำงานได้อย่างสม่ำเสมอใน PDF ประเภทต่าง ๆ

โซลูชันจาก GroupDocs.Annotation: ไลบรารีนี้ทำให้ความซับซ้อนหายไปขณะยังคงให้การควบคุมละเอียดต่อการแสดงผลและพฤติกรรมของ Annotation เหมือนมีผู้เชี่ยวชาญ PDF ระดับสูงอยู่ในทีมของคุณแล้วแก้ไขกรณีขอบทั้งหมดแล้ว

ประโยชน์หลักที่คุณจะชื่นชอบ:

  • รองรับ PDF ประเภทและโครงสร้างหลากหลาย
  • คำนวณพิกัดอัตโนมัติ
  • รองรับประเภท Annotation มากกว่าการไฮไลท์เพียงอย่างเดียว
  • ผสานรวมได้อย่างราบรื่นกับแอปพลิเคชัน Java ที่มีอยู่
  • มีเอกสารและการสนับสนุนที่ยอดเยี่ยม

ข้อกำหนดเบื้องต้นและการตั้งค่าสภาพแวดล้อม

สิ่งที่คุณต้องมี

สภาพแวดล้อมการพัฒนา:

  • Java 8 หรือสูงกว่า (แนะนำ Java 11+ เพื่อประสิทธิภาพที่ดีกว่า)
  • Maven หรือ Gradle สำหรับการจัดการพึ่งพา
  • IDE ที่คุณชอบ (IntelliJ IDEA, Eclipse, หรือ VS Code ทำงานได้ดี)

ความรู้ที่ต้องมี:

  • การเขียนโปรแกรม Java เบื้องต้น (คอลเลกชัน, ออบเจ็กต์, การทำ I/O ไฟล์)
  • ความคุ้นเคยกับพึ่งพา Maven
  • ความเข้าใจระบบพิกัด (เป็นประโยชน์แต่ไม่จำเป็น)

การติดตั้ง GroupDocs.Annotation for Java

วิธีที่ง่ายที่สุดคือผ่าน Maven เพิ่มการตั้งค่าเหล่านี้ลงในไฟล์ pom.xml ของคุณ:

<repositories>
    <repository>
        <id>repository.groupdocs.com</id>
        <name>GroupDocs Repository</name>
        <url>https://releases.groupdocs.com/annotation/java/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>com.groupdocs</groupId>
        <artifactId>groupdocs-annotation</artifactId>
        <version>25.2</version>
    </dependency>
</dependencies>

เคล็ดลับ: ควรใช้เวอร์ชันล่าสุดที่เสถียร GroupDocs ปล่อยอัปเดตอย่างสม่ำเสมอพร้อมการปรับปรุงประสิทธิภาพและแก้บั๊ก

การตั้งค่าลิขสิทธิ์ (ห้ามข้าม!)

คุณต้องมีลิขสิทธิ์เพื่อใช้ GroupDocs.Annotation ในการผลิต นี่คือวิธีจัดการลิขสิทธิ์:

สำหรับการพัฒนา: รับลิขสิทธิ์ทดลองหรือ ใบอนุญาตชั่วคราว
สำหรับการผลิต: ซื้อลิขสิทธิ์จาก เว็บไซต์ GroupDocs

ลิขสิทธิ์ชั่วคราวเหมาะสำหรับการทดสอบและพัฒนา — ให้ฟังก์ชันเต็มโดยไม่มีลายน้ำ

คู่มือการทำงานแบบขั้นตอน

ตอนนี้มาถึงส่วนที่น่าตื่นเต้น — มาสร้างระบบ Annotation PDF ครบวงจรกัน! เราจะอธิบายแต่ละคอมโพเนนต์ ไม่เพียงแค่โค้ดทำอะไร แต่ทำไมเราถึงทำแบบนั้น

ขั้นตอนที่ 1: เริ่มต้นอ็อบเจ็กต์ Annotator ของคุณ

ก่อนอื่นเราต้องสร้างอ็อบเจ็กต์ Annotator ที่จะจัดการไฟล์ PDF ของเรา คิดว่าเป็นการเปิด PDF ในเครื่องมือแก้ไขพิเศษที่เข้าใจ Annotation

import com.groupdocs.annotation.Annotator;
import org.apache.commons.io.FilenameUtils;

String outputPath = "YOUR_OUTPUT_DIRECTORY/AnnotationOutput.pdf";
final Annotator annotator = new Annotator("YOUR_DOCUMENT_DIRECTORY/InputDocument.pdf");

กำลังเกิดอะไรขึ้น?

  • คอนสตรัคเตอร์ Annotator โหลด PDF ของคุณเข้าสู่หน่วยความจำ
  • เราตั้งค่าเส้นทางเอาต์พุตที่ไฟล์ PDF ที่มี Annotation จะถูกบันทึก
  • PDF ต้นฉบับจะไม่ถูกแก้ไข เรากำลังสร้างเวอร์ชันใหม่ที่มี Annotation

ข้อผิดพลาดที่พบบ่อย: ตรวจสอบให้แน่ใจว่าเส้นทางไฟล์ถูกต้องและโฟลเดอร์มีอยู่ ฉันเคยเห็นนักพัฒนาต้องใช้เวลาหลายชั่วโมงแก้ไขปัญหาเส้นทางที่ดูเหมือนง่ายแต่เป็นสาเหตุของบั๊ก!

ขั้นตอนที่ 2: สร้างการตอบกลับและคอมเมนต์แบบโต้ตอบ

นี่คือจุดที่น่าสนใจ ส่วนใหญ่ของบทแนะนำ Annotation บน PDF มักข้ามส่วนนี้ไป แต่การตอบกลับคือสิ่งที่ทำให้ Annotation มีความร่วมมือจริง ๆ มาสร้างระบบสนทนาแบบเธรดกัน:

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

List<Reply> replies = new ArrayList<>();

// First reply
Reply reply1 = new Reply();
reply1.setComment("First comment");
reply1.setRepliedOn(Calendar.getInstance().getTime());
replies.add(reply1);

// Second reply  
Reply reply2 = new Reply();
reply2.setComment("Second comment");
reply2.setRepliedOn(Calendar.getInstance().getTime());
replies.add(reply2);

ทำไมเรื่องนี้สำคัญ: ในแอปพลิเคชันจริง คุณมักต้องติดตามว่าใครพูดอะไรและเมื่อไหร่ ระบบตอบกลับนี้ช่วยคุณสร้างฟีเจอร์เช่น:

  • เธรดคอมเมนต์บนข้อความที่ไฮไลท์
  • กระบวนการตรวจสอบพร้อมสายงานการอนุมัติ
  • บันทึกการเปลี่ยนแปลงเอกสาร
  • สภาพแวดล้อมการแก้ไขร่วมกัน

เคล็ดลับจากโลกจริง: พิจารณาเก็บข้อมูลผู้ใช้และเวลาที่ทำการบันทึกอย่างละเอียด ในการผลิตคุณอาจดึงข้อมูลเหล่านี้จากระบบยืนยันตัวตนหรือฐานข้อมูลของคุณ

ขั้นตอนที่ 3: กำหนดพิกัดไฮไลท์อย่างแม่นยำ

นี่คือจุดที่ “เวทมนตร์” เกิดขึ้น — เราบอกไลบรารีว่าต้องวางไฮไลท์ที่ไหน ระบบพิกัดอาจดูซับซ้อนในตอนแรก แต่จริง ๆ แล้วค่อนข้างเป็นตรรกะ:

import com.groupdocs.annotation.models.Point;
import java.util.ArrayList;
import java.util.List;

List<Point> points = new ArrayList<>();
points.add(new Point(80, 730));   // Top-left corner
points.add(new Point(240, 730));  // Top-right corner  
points.add(new Point(80, 650));   // Bottom-left corner
points.add(new Point(240, 650));  // Bottom-right corner

ทำความเข้าใจพิกัด PDF:

  • จุดเริ่มต้น (0,0) อยู่ที่มุมล่างซ้ายของหน้า
  • X เพิ่มไปทางขวา, Y เพิ่มไปทางขึ้น
  • จุด (Points) กำหนดพื้นที่สี่เหลี่ยมของไฮไลท์
  • จุดสี่จุดสร้างกรอบล้อมรอบข้อความเป้าหมาย

เคล็ดลับหาพิกัด: ใช้โปรแกรมดู PDF ที่แสดงพิกัดของเคอร์เซอร์, หรือเริ่มจากค่าประมาณและปรับตามผลลัพธ์ โปรแกรมดู PDF ส่วนใหญ่สามารถแสดงพิกัดของเคอร์เซอร์ได้

ขั้นตอนที่ 4: ตั้งค่า Annotation ไฮไลท์ของคุณ

ต่อไปเราจะสร้าง Annotation ไฮไลท์จริงพร้อมคุณสมบัติด้านภาพทั้งหมด ที่นี่คุณสามารถปรับแต่งประสบการณ์ผู้ใช้ได้เต็มที่:

import com.groupdocs.annotation.models.annotationmodels.HighlightAnnotation;

HighlightAnnotation highlight = new HighlightAnnotation();
highlight.setBackgroundColor(65535);  // Yellow highlight
highlight.setCreatedOn(Calendar.getInstance().getTime());
highlight.setFontColor(0);            // Black text  
highlight.setMessage("This is a highlight annotation");
highlight.setOpacity(0.5);            // Semi‑transparent
highlight.setPageNumber(0);           // First page (zero‑indexed)
highlight.setPoints(points);
highlight.setReplies(replies);

// Add the highlight to the annotator
annotator.add(highlight);

อธิบายตัวเลือกการปรับแต่ง:

  • setBackgroundColor(65535): ไฮไลท์สีเหลือง (RGB เป็นจำนวนเต็ม)
  • setOpacity(0.5): ความโปร่งใส 50 % — ข้อความยังอ่านได้
  • setFontColor(0): สีข้อความดำเพื่อคอนทราสต์ที่ดี
  • setPageNumber(0): หมายเลขหน้า (0 = หน้าที่หนึ่ง)

คำแนะนำการเลือกสี:

  • สีเหลือง (65535) เป็นสีคลาสสิกและไม่รบกวน
  • หากต้องการไฮไลท์สำคัญ ลองสีส้ม (16753920) หรือสีแดง (16711680)
  • ควรตั้งค่าความโปร่งใสระหว่าง 0.3‑0.7 เพื่อความอ่านง่ายที่สุด

ขั้นตอนที่ 5: บันทึก PDF ที่มี Annotation

สุดท้ายให้บันทึกงานของคุณและทำความสะอาดทรัพยากรอย่างถูกต้อง:

annotator.save(outputPath);
annotator.dispose();

การจัดการทรัพยากร: การเรียก dispose() มีความสำคัญ — มันปล่อยหน่วยความจำและทำให้แน่ใจว่าการเปลี่ยนแปลงทั้งหมดถูกเขียนลงดิสก์อย่างสมบูรณ์ ควรใส่ในบล็อก try‑finally หรือใช้ try‑with‑resources ในโค้ดการผลิต

การแก้ไขปัญหาที่พบบ่อย

ต่อไปนี้เป็นปัญหาที่ฉันเคยเจอ (และแก้ไข) ขณะทำงานกับ Annotation PDF ใน Java:

ปัญหาเส้นทางไฟล์

อาการ: FileNotFoundException หรือข้อผิดพลาด “Cannot access file”
วิธีแก้:

  • ตรวจสอบว่าเส้นทางเป็นแบบ absolute หรือ relative กับโฟลเดอร์รากของโปรเจกต์
  • ตรวจสอบสิทธิ์ไฟล์ — กระบวนการ Java ของคุณต้องมีสิทธิ์อ่าน/เขียน
  • สร้างโฟลเดอร์เอาต์พุตให้มีอยู่ก่อนบันทึก

พิกัดไม่ตรงกับตำแหน่งที่คาดหวัง

อาการ: ไฮไลท์ปรากฏในตำแหน่งผิด
วิธีแก้:

  • จำไว้ว่า ระบบพิกัด PDF เริ่มจากมุมล่างซ้าย
  • ตัวสร้าง PDF ต่าง ๆ อาจมีความแตกต่างเล็กน้อย
  • ทดลองกับ PDF ตัวอย่างและปรับพิกัดตามผล

ปัญหาหน่วยความจำกับ PDF ขนาดใหญ่

อาการ: OutOfMemoryError หรือประสิทธิภาพช้า
วิธีแก้:

  • เพิ่มขนาด heap ของ JVM เช่น -Xmx2G
  • ประมวลผล PDF เป็นชุดเล็ก ๆ
  • เรียก dispose() เสมอเพื่อปล่อยทรัพยากร

สีไม่แสดงผลถูกต้อง

อาการ: สีไฮไลท์ผิดหรือ Annotation ไม่ปรากฏ
วิธีแก้:

  • ใช้ค่า RGB เป็นจำนวนเต็ม ไม่ใช่สตริง hex
  • ทดสอบค่าความโปร่งใสระหว่าง 0.1 ถึง 0.9
  • ตรวจสอบให้สีพื้นหลังและสีฟอนต์มีคอนทราสต์ที่ดี

แนวทางการเพิ่มประสิทธิภาพการทำงาน

หลังจากได้ทำ Annotation PDF ในหลายระบบการผลิตแล้ว นี่คือเคล็ดลับที่จริงจังและได้ผล:

การจัดการหน่วยความจำ

// Good practice - use try-with-resources when available
try (Annotator annotator = new Annotator(inputPath)) {
    // Your annotation code here
    annotator.save(outputPath);
} // Automatically disposes resources

กลยุทธ์การประมวลผลเป็นชุด

สำหรับหลายไฟล์ PDF ให้ประมวลผลต่อเนื่องแทนการโหลดทั้งหมดเข้าสู่หน่วยความจำพร้อมกัน:

for (String pdfPath : pdfPaths) {
    try (Annotator annotator = new Annotator(pdfPath)) {
        // Process single PDF
        addAnnotations(annotator);
        annotator.save(getOutputPath(pdfPath));
    }
    // Memory freed before next iteration
}

พิจารณาขนาดไฟล์

  • PDF ขนาดใหญ่ (>10 MB) ใช้หน่วยความจำและเวลาประมวลผลมากขึ้น
  • พิจารณาแยกเอกสารขนาดใหญ่ออกเป็นส่วนย่อย
  • ปรับขนาด PDF อินพุตก่อนทำ Annotation หากเป็นไปได้

การใช้งานจริงและกรณีศึกษา

นี่คือจุดที่ Annotation PDF ส่องแสงในแอปพลิเคชันจริง:

ระบบตรวจสอบเอกสาร

เหมาะสำหรับ: สัญญากฎหมาย, สเปคเทคนิค, เอกสารการปฏิบัติตาม
เคล็ดลับการนำไปใช้:

  • ใช้สีไฮไลท์ต่างกันสำหรับผู้ตรวจสอบคนต่าง ๆ
  • ตั้งค่าสิทธิ์ผู้ใช้ว่าใครสามารถเพิ่ม/แก้ไข Annotation ได้
  • เก็บเมตาดาต้า Annotation ในฐานข้อมูลเพื่อทำรายงาน

แพลตฟอร์มการศึกษา

เหมาะสำหรับ: การไฮไลท์หนังสือเรียน, ฟีดแบ็กการบ้าน, การศึกษาแบบร่วมมือ
เคล็ดลับการนำไปใช้:

  • ให้ผู้เรียนบันทึก Annotation ส่วนตัวของตนเอง
  • เปิดให้ครูเพิ่มคอมเมนต์อย่างเป็นทางการ
  • พิจารณาการควบคุมเวอร์ชันสำหรับการอัปเดตเอกสาร

กระบวนการประกันคุณภาพ

เหมาะสำหรับ: การตรวจทานการออกแบบ, เอกสารกระบวนการ, การตรวจสอบการปฏิบัติตาม
เคล็ดลับการนำไปใช้:

  • ผสานรวมกับเครื่องมือ QA ที่มีอยู่
  • ใช้สถานะ Annotation (เปิด/ปิด) เพื่อติดตาม
  • สร้างรายงานจากข้อมูล Annotation

เครื่องมือวิจัยร่วม

เหมาะสำหรับ: งานวิจัยเชิงวิชาการ, เอกสารการวิจัย, การตรวจทานโดยเพื่อนร่วมงาน
เคล็ดลับการนำไปใช้:

  • พัฒนาฟีเจอร์การทำงานร่วมแบบเรียลไทม์
  • ให้การตรวจทานแบบไม่ระบุตัวตนเมื่อจำเป็น
  • ส่งออก Annotation เพื่อการวิเคราะห์และทำรายงาน

เคล็ดลับขั้นสูงและแนวปฏิบัติที่ดีที่สุด

ตัวช่วยคำนวณพิกัด

สร้างเมธอดยูทิลิตี้สำหรับการคำนวณพิกัดทั่วไป:

public class AnnotationUtils {
    public static List<Point> createRectangle(double x, double y, double width, double height) {
        List<Point> points = new ArrayList<>();
        points.add(new Point(x, y + height));      // Top‑left
        points.add(new Point(x + width, y + height)); // Top‑right  
        points.add(new Point(x, y));               // Bottom‑left
        points.add(new Point(x + width, y));       // Bottom‑right
        return points;
    }
}

แม่แบบ Annotation

สร้างการตั้งค่า Annotation ที่นำกลับมาใช้ใหม่ได้:

public class AnnotationTemplates {
    public static HighlightAnnotation createStandardHighlight(List<Point> points, String message) {
        HighlightAnnotation highlight = new HighlightAnnotation();
        highlight.setBackgroundColor(65535);  // Yellow
        highlight.setOpacity(0.5);
        highlight.setFontColor(0);
        highlight.setMessage(message);
        highlight.setCreatedOn(Calendar.getInstance().getTime());
        highlight.setPoints(points);
        return highlight;
    }
}

คำถามที่พบบ่อย

ถาม: สามารถใช้ GroupDocs.Annotation ในแอปพลิเคชันเว็บได้หรือไม่?
ตอบ: แน่นอน! สามารถผสานกับ Spring Boot, Servlets, และเฟรมเวิร์กเว็บ Java อื่น ๆ คุณสามารถเปิดเผย REST endpoint ที่รับไฟล์ PDF, ใส่ไฮไลท์, แล้วส่งคืนเอกสารที่มี Annotation

ถาม: จะจัดการ Annotation ในหลายภาษาอย่างไร?
ตอบ: ไลบรารีรองรับ Unicode ดังนั้นคุณสามารถเพิ่มคอมเมนต์และข้อความในภาษาใดก็ได้ เพียงให้แอป Java ของคุณใช้การเข้ารหัส UTF‑8

ถาม: ผลกระทบต่อประสิทธิภาพเมื่อเพิ่ม Annotation จำนวนมากเป็นอย่างไร?
ตอบ: ประสิทธิภาพสเกลตามจำนวน Annotation แต่ขนาด PDF มีผลมากกว่า สำหรับเอกสารที่มีหลายร้อยไฮไลท์ ควรพิจารณาโหลดแบบ lazy หรือแบ่งหน้าเพื่อรักษาการใช้หน่วยความจำให้ต่ำ

ถาม: สามารถแก้ไข Annotation ที่มีอยู่ได้โดยโปรแกรมหรือไม่?
ตอบ: ได้. โหลด PDF ที่มี Annotation อยู่แล้ว, ปรับคุณสมบัติเช่น สีหรือตำแหน่ง, แล้วบันทึกเวอร์ชันที่อัปเดต นี่เป็นวิธีที่ดีสำหรับการสร้างเครื่องมือจัดการ Annotation

ถาม: จะดึงข้อมูล Annotation เพื่อทำรายงานอย่างไร?
ตอบ: GroupDocs.Annotation มีเมธอด enumeration เพื่ออ่านเมตาดาต้า Annotation (ผู้สร้าง, วันที่สร้าง, ข้อความคอมเมนต์ ฯลฯ) คุณสามารถส่งออกข้อมูลเป็น CSV, JSON, หรือเชื่อมต่อกับ pipeline analytics ของคุณได้

แหล่งข้อมูลและเอกสารสำคัญ

  • GroupDocs.Annotation Java Documentation - คู่มือและอ้างอิง API อย่างครบถ้วน
  • API Reference - รายละเอียดเมธอดต่าง ๆ
  • Download Latest Version - ควรใช้เวอร์ชันเสถียรล่าสุดเสมอ
  • Purchase License - ตัวเลือกลิขสิทธิ์สำหรับการผลิต
  • Get Temporary License - เหมาะสำหรับการพัฒนาและทดสอบ
  • Community Support Forum - รับความช่วยเหลือจากผู้เชี่ยวชาญและนักพัฒนาคนอื่น ๆ

อัปเดตล่าสุด: 2026-03-17
ทดสอบกับ: GroupDocs.Annotation 25.2
ผู้เขียน: GroupDocs