บทนำ
PDF เป็นมาตรฐานที่ใช้กันอย่างแพร่หลายสำหรับสัญญา, ข้อกำหนด, รายงาน, และการยื่นเอกสารตามกฎระเบียบ — และเมื่อมีหลายเวอร์ชันอยู่ในระบบ การติดตามว่ามีการเปลี่ยนแปลงอะไรบ้างระหว่างสองไฟล์จึงกลายเป็นงานที่น่าเบื่อ การเลื่อนดูเอกสารข้างกันและทำเครื่องหมายความแตกต่างด้วยมือไม่สามารถทำได้อย่างมีประสิทธิภาพ และแม้แต่เครื่องมือที่ออกแบบมาเฉพาะอย่างฟีเจอร์ Compare ของ Adobe Acrobat ก็ต้องการการแทรกแซงด้วยมือสำหรับแต่ละคู่ไฟล์
GroupDocs.Comparison for .NET ให้คุณรันการเปรียบเทียบ PDF ทั้งหมดจากโค้ดและเลือกได้อย่างแม่นยำว่าผลลัพธ์จะแสดงอย่างไร เวอร์ชัน 26.4 แนะนำคลาส PdfCompareOptions ที่มีโหมดการแสดงผลสามแบบ:
- Inline (ค่าเริ่มต้น) — PDF ที่รวมกันเป็นไฟล์เดียวที่แสดงการลบและการแทรกด้วยสีที่ต่างกันบนหน้าเดียวกัน นี่คือพฤติกรรมแบบคลาสสิกและเป็นผลลัพธ์ที่ง่ายที่สุดในการแชร์เป็นไฟล์สแตนด์อโลน
- Side‑by‑Side — แต่ละหน้าผลลัพธ์จะแสดงหน้าต้นฉบับและหน้าปลายทางวางเคียงกันโดยไม่มีการทับซ้อนของเนื้อหา เหมาะเมื่อเอกสารต่างกันอย่างมากและการผสมเนื้อหาบนหน้าเดียวจะทำให้สับสน
- 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:
- เปิด Acrobat Pro แล้วเลือก Tools → Compare Files
- เลือก Older File (ต้นฉบับ) และ Newer File (ปลายทาง)
- คลิก 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:
สิ่งที่เกิดขึ้นเบื้องหลัง:
- เนื้อหาที่ถูกลบจากเอกสารต้นฉบับจะถูกไฮไลท์ด้วยสีหนึ่ง (สีแดงเป็นค่าเริ่มต้น)
- เนื้อหาที่ถูกแทรกจากเอกสารปลายทางจะถูกไฮไลท์ด้วยสีอีกสีหนึ่ง (สีเขียวเป็นค่าเริ่มต้น)
- การเปลี่ยนแปลงทั้งสองชุดอยู่บนหน้าเดียวกัน ทำให้ผลลัพธ์กระชับแต่เมื่อเอกสารต่างกันอย่างมากอาจดูแออัดได้ หากมีการแก้ไขข้อความจำนวนมาก เนื้อหาที่ลบและที่แทรกอาจทับซ้อนกันบนหน้า — ตัวอย่างเช่น ย่อหน้าที่ถูกแทนที่จะแสดงอยู่บนย่อหน้าต้นฉบับ ทำให้อ่านยาก ในกรณีเช่นนี้ควรพิจารณาใช้โหมด
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:
สิ่งที่เกิดขึ้นเบื้องหลัง:
- แต่ละหน้าผลลัพธ์เป็น “แคนวาส” กว้างที่แบ่งเป็นสองครึ่ง
- ครึ่งซ้ายแสดงหน้าต้นฉบับพร้อมการไฮไลท์การลบ
- ครึ่งขวาแสดงหน้าปลายทางพร้อมการไฮไลท์การแทรก
- เนื้อหาจากสองเอกสารไม่ทับซ้อนกัน แม้หน้าจะมีการแก้ไขอย่างหนักก็ยังอ่านได้ชัดเจน
โหมด 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):
สิ่งที่เกิดขึ้นเบื้องหลัง:
- เอกสารผลลัพธ์มี
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 }
};
คุณสมบัติพื้นฐานที่สืบทอดจาก CompareOptions — InsertedItemStyle, 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 ไว้ในคลาสเดียวที่ค้นหาได้ง่าย
เลือกโหมดที่เหมาะกับกระบวนการทำงานของคุณ, หรือสร้างผลลัพธ์ทั้งสามและให้ผู้ใช้เลือกมุมมองที่ต้องการ