מבוא
PDF הוא הסטנדרט הלא‑פורמלי לחוזים, מפרטים, דוחות והגשות רגולטוריות — ועם גרסאות מרובות בשימוש, מציאת השינויים המדויקים בין שני קבצים הופכת במהירות למייגעת. גלילה במסמכים זה לצד זה והוספת הערות לשינויים ידנית אינה ניתנת להרחבה, ואף לכלים ייעודיים כמו תכונת ה‑Compare של Adobe Acrobat נדרש התערבות ידנית עבור כל זוג קבצים.
GroupDocs.Comparison for .NET מאפשר לבצע השוואת PDF באופן מלא מהקוד ולבחור בדיוק כיצד יוצג התוצאה. גרסה 26.4 הציגה מחלקה ייעודית PdfCompareOptions עם שלוש מצבי תצוגה של הפלט:
- Inline (ברירת מחדל) — קובץ PDF ממוזג יחיד שבו מחיקות והוספות מודגשות בצבעים שונים באותם דפים. זהו ההתנהגות הקלאסית והקלה ביותר לשיתוף כקובץ עצמאי.
- Side‑by‑Side — כל דף תוצאה מציג את דפי המקור והיעד זה לצד זה, ללא חפיפה של תוכן. אידיאלי כאשר המסמכים שונים במידה רבה והצגת תוכן משולב בדף אחד עלולה לבלבל.
- Interleaved — התוצאה מכילה דפים מתחלפים: דפים אי‑זוגיים מגיעים מהמקור (מחיקות מודגשות), דפים זוגיים מהיעד (הוספות מודגשות). השינויים מיוצגים כהערות PDF מובנות — סוג אובייקט PDF נייטרלי שנושא מטא‑נתונים כגון סוג השינוי ושם המחבר. רוב מציגי ה‑PDF (Adobe Acrobat Reader, Foxit, וכו’) מאפשרים למשתמשים לפתוח את לוח ההערות ולקבל או למחוק הערות בודדות, מה שיוצר זרימת עבודה קלה לבחינה ללא צורך בתוכנה נוספת. פתיחת קובץ זה במצב “Two Page View” של מציג PDF מייצרת השוואה טבעית שמאל/ימין.
במאמר זה נעבור על שלושת המצבים עם דוגמאות C# עובדות, נחקור את PdfCompareOptions ואת המאפיינים שלו, ונציג בקצרה כיצד ניתן לבצע את אותה משימה ידנית ב‑Adobe Acrobat.
השוואת PDF ב‑Adobe Acrobat
לפני שנצלול לגישה התכנותית, כדאי לדעת מה מציע Adobe Acrobat Pro באופן מובנה. כלי Compare Files המובנה של Acrobat (זמין תחת Tools → Compare Files) מייצר דוח השוואה צד‑צד שמדגיש שינויים בטקסט, הבדלים בתמונות ושינויים בעיצוב.
כדי לבצע השוואה ב‑Acrobat Pro:
- פתחו את Acrobat Pro ובחרו Tools → Compare Files.
- בחרו את Older File (מקור) ואת Newer File (יעד).
- לחצו על Compare. Acrobat מייצר דוח השוואה אינטראקטיבי עם דף סיכום וסמנים לשינויים בתוך הטקסט.
זה עובד היטב לביקורות ידניות מזדמנות. עם זאת, לכלי ההשוואה של Acrobat יש מגבלות משמעותיות כאשר יש צורך לבצע השוואה כחלק מצינור אוטומטי.
כאשר ההשוואה חייבת להתבצע בשרת, בצינור CI/CD, או כחלק מזרימת עבודה מותאמת, ספרייה מבוססת קוד היא הפתרון המתאים.
דרישות מוקדמות
לפני שמתחילים:
- .NET 6.0 ומעלה.
- GroupDocs.Comparison for .NET 26.4 ומעלה — התקינו דרך NuGet:
dotnet add package GroupDocs.Comparison
- קובץ רישיון (
GroupDocs.Comparison.lic). ללא רישיון הספרייה פועלת במצב הערכה עם סימני מים והגבלות על מספר העמודים. ניתן לבקש רישיון זמני לצורך בדיקה. - שני קבצי PDF להשוואה — נקרא להם
source.pdfו‑target.pdf. דוגמת תוכן:
source.pdf |
target.pdf |
|---|
מצב 1: השוואת Inline (ברירת מחדל)
מתי להשתמש: כאשר אתם רוצים קובץ 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
מתי להשתמש: כאשר שני המסמכים שונים במידה רבה והצגת מחיקות והוספות באותו דף תגרום לקושי בקריאה. 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
מתי להשתמש: כאשר ברצונכם לעבור על השינויים דף‑דף במציג 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מוסיף את שם המחבר על ההערות שנוצרו במהלך ההשוואה — שימושי כאשר התוצאה נכנסת לזרימת עבודה שבה יש צורך להבדיל בין מחברים שונים.
טיפ: פתחו את הקובץ ב‑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 הוא תת‑מחלקה ספציפית ל‑PDF של CompareOptions, על פי אותו דפוס כמו WordCompareOptions שהוצגה בגרסה 26.2. היא מקבצת את כל ההגדרות הייחודיות ל‑PDF במקום אחד כדי שלא תיישמו בטעות אפשרויות של Word או גיליון אלקטרוני על משימת PDF.
| Property | Type | Description |
|---|---|---|
DisplayMode |
ComparisonDisplayMode |
קובע את פריסת התוצאה: Inline (ברירת מחדל), SideBySide, או Interleaved. |
PagesSetup |
PagesSetup |
טווח עמודים להשוואה. כאשר null, כל העמודים מעובדים. |
CompareImagesPdf |
bool |
האם לכלול תמונות משובצות בהשוואה. |
AnnotationAuthorName |
string |
שם המחבר שמודפס על הערות PDF (בשימוש במצב Interleaved). |
ImagesInheritanceMode |
enum | קובע איזו מסמך מספק תמונות כאשר השוואת תמונות מושבתת. |
דוגמה מלאה עם קונפיגורציה:
var options = new PdfCompareOptions
{
DisplayMode = PdfCompareOptions.ComparisonDisplayMode.Interleaved,
CompareImagesPdf = true,
AnnotationAuthorName = "Review Bot",
PagesSetup = new PagesSetup { StartPage = 1, EndPage = 5 }
};
המאפיינים המורשים מה‑base class 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(); // מחזיר 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 מדף ההפצות הרשמי. לצורך בדיקה ללא מגבלות, בקשו רישיון זמני — אין צורך בכרטיס אשראי.
שאלות נפוצות
ש: האם צריך להתקין Adobe Acrobat או תוכנת PDF אחרת על השרת?
ת: לא. GroupDocs.Comparison היא ספרייה עצמאית ב‑.NET שקוראת וכותבת קבצי PDF ללא תלות בתוכנות צד שלישי.
ש: איזה מצב תצוגה לבחור כברירת מחדל?
ת: התחילו עם Inline — הוא מייצר את התוצאה הקומפקטית ביותר והקלה ביותר לשיתוף. עברו ל‑SideBySide כאשר עריכות מרובות מקשות על קריאת המצב Inline, או השתמשו ב‑Interleaved כאשר הסוקרים יפתחו את הקובץ במצב “Two Page View” של מציג PDF.
ש: האם ניתן להשוות מסמכים בפורמטים אחרים מ‑PDF?
ת: כן — הספרייה תומכת במסמכי Word, גיליונות Excel, מצגות PowerPoint, קבצי טקסט רגילים ועוד רבים. הרשימה המלאה נמצאת ב‑התיעוד.
ש: מה קורה אם לא מגדירים רישיון?
ת: הספרייה פועלת במצב הערכה. קבצי הפלט יכילו סימן מים ורק כמה עמודים ראשונים יעובדו. רישיון זמני (temporary license) מסיר מגבלות אלו לצורך בדיקה.
ש: האם אפשר להשוות רק תמונות בתוך PDF ולהתעלם משינויים בטקסט?
ת: השתמשו ב‑CompareImagesPdf = true ב‑PdfCompareOptions כדי לכלול השוואת תמונות. כדי להתמקד אך ורק בתמונות ניתן לשלב זאת עם המאפיין ImagesInheritanceMode; ראו את תיעוד ה‑API לפרטים.
סיכום
GroupDocs.Comparison for .NET 26.4 מעניקה שליטה מדויקת, מבוססת קוד, על אופן הצגת תוצאות השוואת PDF. מצב Inline מכסה את רוב המקרים השגרתיים — PDF יחיד עם סימוני שינוי שניתן לשתף בקלות. SideBySide משאיר תוכן כבד קריא ונפרד. Interleaved מתיישב באופן טבעי עם מציג PDF במצב Two Page View לסקירה דף‑ב‑דף מלאה. בנוסף, סינון לפי טווח עמודים מאפשר למקד את ההשוואה לחלקים החשובים, ו‑PdfCompareOptions מרכז את כל ההגדרות הייחודיות ל‑PDF במחלקה נגישה.
בחרו את המצב המתאים לתהליך העבודה שלכם, או הפיקו את שלושת המצבים ותנו לכל קהל לבחור את תצוגת ההשוואה המועדפת עליו.