บทนำ

PDF เป็นมาตรฐานที่ใช้กันอย่างแพร่หลายสำหรับสัญญา, ข้อกำหนด, รายงาน, และการยื่นเอกสารตามกฎระเบียบ — และเมื่อมีหลายเวอร์ชันอยู่ในระบบ การติดตามว่ามีการเปลี่ยนแปลงอะไรบ้างระหว่างสองไฟล์จึงกลายเป็นงานที่น่าเบื่อ การเลื่อนดูเอกสารข้างกันและทำเครื่องหมายความแตกต่างด้วยมือไม่สามารถทำได้อย่างมีประสิทธิภาพ และแม้แต่เครื่องมือที่ออกแบบมาเฉพาะอย่างฟีเจอร์ Compare ของ Adobe Acrobat ก็ต้องการการแทรกแซงด้วยมือสำหรับแต่ละคู่ไฟล์

GroupDocs.Comparison for .NET ให้คุณรันการเปรียบเทียบ PDF ทั้งหมดจากโค้ดและเลือกได้อย่างแม่นยำว่าผลลัพธ์จะแสดงอย่างไร เวอร์ชัน 26.4 แนะนำคลาส PdfCompareOptions ที่มีโหมดการแสดงผลสามแบบ:

  1. Inline (ค่าเริ่มต้น) — PDF ที่รวมกันเป็นไฟล์เดียวที่แสดงการลบและการแทรกด้วยสีที่ต่างกันบนหน้าเดียวกัน นี่คือพฤติกรรมแบบคลาสสิกและเป็นผลลัพธ์ที่ง่ายที่สุดในการแชร์เป็นไฟล์สแตนด์อโลน
  2. Side‑by‑Side — แต่ละหน้าผลลัพธ์จะแสดงหน้าต้นฉบับและหน้าปลายทางวางเคียงกันโดยไม่มีการทับซ้อนของเนื้อหา เหมาะเมื่อเอกสารต่างกันอย่างมากและการผสมเนื้อหาบนหน้าเดียวจะทำให้สับสน
  3. Interleaved — ผลลัพธ์ประกอบด้วยหน้าที่สลับกัน: หน้าเลขคี่มาจากต้นฉบับ (ไฮไลท์การลบ) หน้าเลขคู่มาจากปลายทาง (ไฮไลท์การแทรก) การเปลี่ยนแปลงจะแสดงเป็น annotation ของ PDF ที่เป็นประเภทอ็อบเจกต์ในตัวซึ่งบรรจุเมตาดาต้าเช่นประเภทการเปลี่ยนแปลงและชื่อผู้เขียน ผู้ชม PDF ส่วนใหญ่ (Adobe Acrobat Reader, Foxit ฯลฯ) ให้ผู้ใช้เปิดแผง annotation และยอมรับหรือลบ annotation แต่ละรายการ ทำให้เป็นกระบวนการตรวจสอบที่เบาโดยไม่ต้องใช้ซอฟต์แวร์เพิ่มเติม การเปิดไฟล์นี้ในโปรแกรมอ่าน PDF แบบ “Two Page View” จะให้การเปรียบเทียบซ้าย/ขวาโดยอัตโนมัติ

ในบทความนี้เราจะอธิบายโหมดทั้งสามพร้อมตัวอย่าง C# ที่ทำงานได้, สำรวจ PdfCompareOptions และคุณสมบัติต่าง ๆ ของมัน, และสรุปสั้น ๆ ว่างานเดียวกันสามารถทำได้ด้วยตนเองใน Adobe Acrobat อย่างไร


การเปรียบเทียบ PDF ใน Adobe Acrobat

ก่อนจะลงลึกในวิธีการเชิงโปรแกรม ควรทราบว่า Adobe Acrobat Pro มีฟีเจอร์อะไรให้ใช้ได้โดยตรง เครื่องมือ Compare Files ในตัวของ Acrobat (อยู่ภายใต้ Tools → Compare Files) จะสร้างรายงานแบบ side‑by‑side ที่ไฮไลท์การเปลี่ยนแปลงของข้อความ, ความแตกต่างของรูปภาพ, และการเปลี่ยนแปลงรูปแบบ

วิธีรันการเปรียบเทียบใน Acrobat Pro:

  1. เปิด Acrobat Pro แล้วเลือก Tools → Compare Files
  2. เลือก Older File (ต้นฉบับ) และ Newer File (ปลายทาง)
  3. คลิก Compare Acrobat จะสร้างรายงานเปรียบเทียบแบบโต้ตอบพร้อมหน้าสรุปและเครื่องหมายการเปลี่ยนแปลงแบบ inline

วิธีนี้เหมาะสำหรับการตรวจสอบด้วยมือเป็นครั้งคราว อย่างไรก็ตาม เครื่องมือเปรียบเทียบของ Acrobat มีข้อจำกัดอย่างมากเมื่อการเปรียบเทียบต้องเป็นส่วนหนึ่งของไพพ์ไลน์อัตโนมัติ

เมื่อการเปรียบเทียบต้องทำบนเซิร์ฟเวอร์, ภายใน CI/CD pipeline, หรือเป็นส่วนหนึ่งของกระบวนการตรวจสอบแบบกำหนดเอง, ไลบรารีแบบ code‑first คือเครื่องมือที่เหมาะสม


ข้อกำหนดเบื้องต้น

ก่อนเริ่ม:

  • .NET 6.0 หรือใหม่กว่า
  • GroupDocs.Comparison for .NET 26.4 หรือใหม่กว่า — ติดตั้งผ่าน NuGet:
dotnet add package GroupDocs.Comparison
  • ไฟล์ลิขสิทธิ์ (GroupDocs.Comparison.lic) หากไม่มีไฟล์นี้ ไลบรารีจะทำงานในโหมดประเมินผลพร้อมลายน้ำและจำกัดจำนวนหน้า คุณสามารถขอ temporary license สำหรับการทดสอบได้
  • ไฟล์ PDF สองไฟล์สำหรับเปรียบเทียบ — เราจะเรียกมันว่า source.pdf และ target.pdf ตัวอย่างเนื้อหา:
source.pdf target.pdf

โหมด 1: Inline Comparison (ค่าเริ่มต้น)

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

using GroupDocs.Comparison;
using GroupDocs.Comparison.Options;

using (var comparer = new Comparer("source.pdf"))
{
    comparer.Add("target.pdf");

    var options = new PdfCompareOptions
    {
        DisplayMode = PdfCompareOptions.ComparisonDisplayMode.Inline
    };

    comparer.Compare("result_inline.pdf", options);
}

หมายเหตุ: Inline เป็นค่าเริ่มต้นของ DisplayMode ดังนั้นบล็อก options ข้างต้นจึงเป็นทางเลือกเสริม การเรียก comparer.Compare("result_inline.pdf") เพียงอย่างเดียวก็ให้ผลลัพธ์เดียวกัน

เอกสารผลลัพธ์ใน โหมด Inline:

PDF comparison result in Inline mode

สิ่งที่เกิดขึ้นเบื้องหลัง:

  • เนื้อหาที่ถูกลบจากเอกสารต้นฉบับจะถูกไฮไลท์ด้วยสีหนึ่ง (สีแดงเป็นค่าเริ่มต้น)
  • เนื้อหาที่ถูกแทรกจากเอกสารปลายทางจะถูกไฮไลท์ด้วยสีอีกสีหนึ่ง (สีเขียวเป็นค่าเริ่มต้น)
  • การเปลี่ยนแปลงทั้งสองชุดอยู่บนหน้าเดียวกัน ทำให้ผลลัพธ์กระชับแต่เมื่อเอกสารต่างกันอย่างมากอาจดูแออัดได้ หากมีการแก้ไขข้อความจำนวนมาก เนื้อหาที่ลบและที่แทรกอาจทับซ้อนกันบนหน้า — ตัวอย่างเช่น ย่อหน้าที่ถูกแทนที่จะแสดงอยู่บนย่อหน้าต้นฉบับ ทำให้อ่านยาก ในกรณีเช่นนี้ควรพิจารณาใช้โหมด SideBySide หรือ Interleaved

โหมด 2: Side‑by‑Side Comparison

เมื่อใดควรใช้: เอกสารสองฉบับต่างกันอย่างมากและการวางการลบและการแทรกบนหน้าเดียวทำให้ผลลัพธ์อ่านยาก Side‑by‑Side แยกเนื้อหาต้นฉบับและปลายทางออกจากกันอย่างชัดเจน ทำให้สแกนแต่ละหน้าได้อย่างรวดเร็ว

using GroupDocs.Comparison;
using GroupDocs.Comparison.Options;

using (var comparer = new Comparer("source.pdf"))
{
    comparer.Add("target.pdf");

    var options = new PdfCompareOptions
    {
        DisplayMode = PdfCompareOptions.ComparisonDisplayMode.SideBySide
    };

    comparer.Compare("result_side_by_side.pdf", options);
}

เอกสารผลลัพธ์ใน โหมด Side‑by‑Side:

PDF comparison result in Side-by-Side mode

สิ่งที่เกิดขึ้นเบื้องหลัง:

  • แต่ละหน้าผลลัพธ์เป็น “แคนวาส” กว้างที่แบ่งเป็นสองครึ่ง
  • ครึ่งซ้ายแสดงหน้าต้นฉบับพร้อมการไฮไลท์การลบ
  • ครึ่งขวาแสดงหน้าปลายทางพร้อมการไฮไลท์การแทรก
  • เนื้อหาจากสองเอกสารไม่ทับซ้อนกัน แม้หน้าจะมีการแก้ไขอย่างหนักก็ยังอ่านได้ชัดเจน

โหมด 3: Interleaved Comparison

เมื่อใดควรใช้: คุณต้องการตรวจสอบการเปลี่ยนแปลงหน้า‑ต่อ‑หน้าในโปรแกรมอ่าน PDF ปกติโดยใช้ Two Page View (หรือ “Facing Pages”) โหมดนี้ทำให้หน้าต้นฉบับอยู่ด้านซ้ายและหน้าปลายทางอยู่ด้านขวา — การจัดวางทางกายภาพสอดคล้องกับสิ่งที่ Side‑by‑Side แสดงบนแคนวาสเดียว แต่ละหน้าเต็มขนาด

using GroupDocs.Comparison;
using GroupDocs.Comparison.Options;

using (var comparer = new Comparer("source.pdf"))
{
    comparer.Add("target.pdf");

    var options = new PdfCompareOptions
    {
        DisplayMode = PdfCompareOptions.ComparisonDisplayMode.Interleaved,
        AnnotationAuthorName = "GroupDocs"
    };

    comparer.Compare("result_interleaved.pdf", options);
}

เอกสารผลลัพธ์ใน โหมด Interleaved (แสดงใน Two Page View):

PDF comparison result in Interleaved mode viewed in Two Page View

สิ่งที่เกิดขึ้นเบื้องหลัง:

  • เอกสารผลลัพธ์มี 2 × N หน้า สำหรับคู่เอกสารที่มี N หน้า
  • หน้าเลขคี่ (1, 3, 5 …) เป็นหน้าต้นฉบับพร้อมการไฮไลท์การลบ
  • หน้าเลขคู่ (2, 4, 6 …) เป็นหน้าปลายทางพร้อมการไฮไลท์การแทรก
  • AnnotationAuthorName จะใส่ชื่อผู้เขียนลงบน annotation ของ PDF ที่สร้างระหว่างการเปรียบเทียบ — มีประโยชน์เมื่อผลลัพธ์ต้องเข้าสู่กระบวนการตรวจสอบที่มีผู้เขียนหลายคนต้องการแยกแยะคอมเมนต์

เคล็ดลับ: เปิดไฟล์ผลลัพธ์ใน Adobe Acrobat Reader หรือโปรแกรมอ่านใด ๆ ที่รองรับ View → Page Display → Two Page View เพื่อให้ได้การจัดวางซ้าย/ขวาตามที่ตั้งใจโดยอัตโนมัติ


จำกัดการเปรียบเทียบให้เฉพาะช่วงหน้า

โหมดทั้งสามรองรับการกรองช่วงหน้าโดยใช้คุณสมบัติ PagesSetup ซึ่งเป็นประโยชน์เมื่อมีเพียงบทหรือส่วนหนึ่งของเอกสารขนาดใหญ่ที่มีการเปลี่ยนแปลงและคุณต้องการข้ามส่วนที่เหลือ

using GroupDocs.Comparison;
using GroupDocs.Comparison.Options;

using (var comparer = new Comparer("source.pdf"))
{
    comparer.Add("target.pdf");

    var options = new PdfCompareOptions
    {
        DisplayMode = PdfCompareOptions.ComparisonDisplayMode.SideBySide,
        PagesSetup = new PagesSetup
        {
            StartPage = 3,
            EndPage = 10
        }
    };

    comparer.Compare("result_pages_3_to_10.pdf", options);
}

เมื่อ PagesSetup เป็น null (หรือไม่ได้ตั้งค่า) จะเปรียบเทียบทุกหน้า — พฤติกรรมเดียวกับเวอร์ชันก่อนหน้า


สำรวจ PdfCompareOptions

PdfCompareOptions เป็นคลาสย่อยของ CompareOptions ที่ออกแบบมาสำหรับ PDF โดยอิงตามรูปแบบเดียวกับ WordCompareOptions ที่แนะนำในเวอร์ชัน 26.2 มันรวมการตั้งค่าที่ใช้เฉพาะกับ PDF ไว้ในที่เดียวเพื่อป้องกันการนำการตั้งค่าของ Word หรือสเปรดชีตไปใช้กับงาน PDF โดยบังเอิญ

คุณสมบัติ ชนิด คำอธิบาย
DisplayMode ComparisonDisplayMode กำหนดรูปแบบผลลัพธ์: Inline (ค่าเริ่มต้น), SideBySide, หรือ Interleaved
PagesSetup PagesSetup ช่วงหน้าที่จะเปรียบเทียบ; หากเป็น null จะประมวลผลทุกหน้า
CompareImagesPdf bool ระบุว่าจะรวมรูปภาพที่ฝังอยู่ใน PDF ในการเปรียบเทียบหรือไม่
AnnotationAuthorName string ชื่อผู้เขียนที่ฝังลงบน annotation ของ PDF (ใช้ในโหมด Interleaved)
ImagesInheritanceMode enum กำหนดว่าเอกสารใดจะให้รูปภาพเมื่อการเปรียบเทียบรูปภาพถูกปิดใช้งาน

ตัวอย่างการกำหนดค่าเต็มรูปแบบ:

var options = new PdfCompareOptions
{
    DisplayMode = PdfCompareOptions.ComparisonDisplayMode.Interleaved,
    CompareImagesPdf = true,
    AnnotationAuthorName = "Review Bot",
    PagesSetup = new PagesSetup { StartPage = 1, EndPage = 5 }
};

คุณสมบัติพื้นฐานที่สืบทอดจาก CompareOptionsInsertedItemStyle, DeletedItemStyle, ChangedItemStyle — ก็พร้อมใช้งานเช่นกัน ทำให้คุณสามารถปรับสีไฮไลท์เริ่มต้นได้ตามต้องการ


ดึงข้อมูลการเปลี่ยนแปลงแบบโปรแกรม

ไม่ว่าคุณจะเลือกโหมดการแสดงผลใด คุณก็สามารถดึงรายการโครงสร้างของความแตกต่างทั้งหมดได้ผ่าน Comparer.GetChanges() ซึ่งมีประโยชน์สำหรับการสร้างรายงานแบบกำหนดเอง, ส่งผลลัพธ์เข้าสู่ระบบตรวจสอบ, หรือรวบรวมสถิติของการแก้ไข

using (var comparer = new Comparer("source.pdf"))
{
    comparer.Add("target.pdf");

    comparer.Compare("result.pdf");

    var changes = comparer.GetChanges(); // returns ChangeInfo[]
    Console.WriteLine($"Total changes detected: {changes.Length}");
}

ดูรายละเอียดเพิ่มเติมในเอกสาร API อย่างเป็นทางการ: Comparer.GetChanges.


ทำงานกับ PDF ที่มีการป้องกันด้วยรหัสผ่าน

PDF ที่ป้องกันด้วยรหัสผ่านได้รับการสนับสนุนเต็มรูปแบบ ให้ส่งรหัสผ่านผ่าน LoadOptions เมื่อสร้าง Comparer:

using GroupDocs.Comparison;
using GroupDocs.Comparison.Options;

using (var comparer = new Comparer("source_protected.pdf",
    new LoadOptions { Password = "secret" }))
{
    comparer.Add("target_protected.pdf", new LoadOptions { Password = "secret" });

    var options = new PdfCompareOptions
    {
        DisplayMode = PdfCompareOptions.ComparisonDisplayMode.SideBySide
    };

    comparer.Compare("result_protected.pdf", options);
}

รับการทดลองใช้งานฟรี

คุณสามารถดาวน์โหลด GroupDocs.Comparison for .NET จาก official releases page สำหรับการทดสอบโดยไม่มีข้อจำกัด ให้ขอ temporary license — ไม่ต้องใช้บัตรเครดิต


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

ถาม: ฉันต้องติดตั้ง Adobe Acrobat หรือซอฟต์แวร์ PDF ใด ๆ บนเซิร์ฟเวอร์หรือไม่?
ตอบ: ไม่จำเป็น GroupDocs.Comparison เป็นไลบรารี .NET แบบสแตนด์อโลนที่อ่านและเขียนไฟล์ PDF ได้โดยไม่ต้องพึ่งพาไลบรารีของบุคคลที่สาม

ถาม: ควรใช้โหมดการแสดงผลใดเป็นค่าเริ่มต้น?
ตอบ: เริ่มต้นด้วย Inline — ให้ผลลัพธ์ที่กระชับที่สุดและง่ายต่อการแชร์ เปลี่ยนเป็น SideBySide เมื่อการแก้ไขหนักทำให้มุมมอง inline อ่านยาก หรือใช้ Interleaved เมื่อผู้ตรวจสอบจะเปิดผลลัพธ์ในโปรแกรมอ่าน PDF แบบ “Two Page View”

ถาม: ฉันสามารถเปรียบเทียบเอกสารในรูปแบบอื่นนอกจาก PDF ได้หรือไม่?
ตอบ: ได้ — ไลบรารีรองรับเอกสาร Word, Excel, PowerPoint, ไฟล์ข้อความธรรมดา, และรูปแบบอื่น ๆ อีกมากมาย รายการเต็มอยู่ใน documentation

ถาม: จะเกิดอะไรขึ้นหากไม่ได้ตั้งค่าลิขสิทธิ์?
ตอบ: ไลบรารีจะทำงานในโหมดประเมินผล เอกสารผลลัพธ์จะมีลายน้ำและจะประมวลผลเพียงไม่กี่หน้าตแรกเท่านั้น การขอ temporary license จะลบข้อจำกัดเหล่านี้สำหรับการทดสอบ

ถาม: ฉันสามารถเปรียบเทียบเฉพาะรูปภาพใน PDF แล้วละเว้นการเปลี่ยนแปลงข้อความได้หรือไม่?
ตอบ: ตั้งค่า CompareImagesPdf = true ใน PdfCompareOptions เพื่อรวมการเปรียบเทียบรูปภาพ หากต้องการโฟกัสเฉพาะรูปภาพเท่านั้น สามารถผสานกับคุณสมบัติ ImagesInheritanceMode; ดูรายละเอียดในเอกสาร API


สรุป

GroupDocs.Comparison for .NET 26.4 ให้คุณควบคุมการเปรียบเทียบ PDF อย่างแม่นยำด้วยโค้ด Inline ครอบคลุมกรณีใช้งานที่พบบ่อยที่สุด — PDF ที่มีการทำเครื่องหมายแก้ไขแบบแยกไฟล์เดียว SideBySide ทำให้เนื้อหาที่แก้ไขหนักยังคงอ่านง่าย Interleaved สอดคล้องกับโหมด Two Page View ของโปรแกรมอ่าน PDF ใด ๆ นอกจากนี้การกรองช่วงหน้าช่วยให้คุณมุ่งเน้นเฉพาะส่วนที่สำคัญ, และ PdfCompareOptions รวมการตั้งค่าที่ใช้กับ PDF ไว้ในคลาสเดียวที่ค้นหาได้ง่าย

เลือกโหมดที่เหมาะกับกระบวนการทำงานของคุณ, หรือสร้างผลลัพธ์ทั้งสามและให้ผู้ใช้เลือกมุมมองที่ต้องการ

แหล่งข้อมูลเพิ่มเติม