العمل مع الأدوات في .NET

الأشياء في ملفات PDF هي عناصر جرافيك أو عناصر أخرى ليست جزءًا من المحتوى الفعلي للمستند. عادةً ما تستخدم هذه الأشياء لأغراض الزينة، التخطيط، أو الخلفية. أمثلة على الأشياء تشمل رؤوس الصفحات، تذييلات الصفحات، الفواصل، أو الصور التي لا تنقل أي معنى.

الغرض من الأشياء في ملفات PDF هو السماح بالتمييز بين عناصر المحتوى وعناصر غير المحتوى. هذا مهم للوصولية، حيث يمكن لقارئات الشاشة وتقنيات المساعدة الأخرى تجاهل الأشياء والتركيز على المحتوى ذي الصلة. كما يمكن للأشياء أن تحسن أداء وجودة مستندات PDF، حيث يمكن حذفها من الطباعة، البحث، أو النسخ.

لإنشاء عنصر كشيء في PDF، تحتاج إلى استخدام الفئة Artifact. تحتوي على الخصائص المفيدة التالية:

  • Artifact.Type – تحصل على نوع الشيء (تدعم قيم تعداد Artifact.ArtifactType حيث تشمل القيم Background، Layout، Page، Pagination و Undefined).
  • Artifact.Type – يحصل على نوع العنصر (يدعم قيم تعداد Artifact.ArtifactType حيث تشمل القيم الخلفية، التخطيط، الصفحة، الترقيم، وغير محدد).
  • Artifact.Subtype – يحصل على نوع العنصر الفرعي (يدعم قيم تعداد Artifact.ArtifactSubtype حيث تشمل القيم الخلفية، التذييل، الرأس، غير محدد، العلامة المائية).
  • Artifact.Image – يحصل على صورة العنصر (إذا كانت هناك صورة، وإلا null).
  • Artifact.Text – يحصل على نص العنصر.
  • Artifact.Contents – يحصل على مجموعة من المشغلات الداخلية للعنصر. نوع الدعم هو System.Collections.ICollection.
  • Artifact.Form – يحصل على XForm للعنصر (إذا تم استخدام XForm). عناصر العلامات المائية، الرأس، والتذييل تحتوي على XForm الذي يعرض جميع محتويات العنصر.
  • Artifact.Rectangle – يحصل على موقع العنصر على الصفحة.
  • Artifact.Rotation – يحصل على دوران العنصر (بالدرجات، القيمة الموجبة تشير إلى الدوران عكس عقارب الساعة).
  • Artifact.Opacity – يحصل على شفافية العنصر.
  • Artifact.Opacity – يحصل على شفافية القطعة الأثرية.

الفئات التالية قد تكون مفيدة أيضاً في العمل مع القطع الأثرية:

العمل مع العلامات المائية الموجودة

العلامة المائية التي تم إنشاؤها باستخدام Adobe Acrobat تسمى قطعة أثرية (كما هو موضح في 14.8.2.2 المحتوى الحقيقي والقطع الأثرية لمواصفات PDF).

من أجل الحصول على كل العلامات المائية على صفحة معينة، فإن فئة Page لديها خاصية Artifacts.

يوضح الكود التالي كيفية الحصول على كل العلامات المائية على الصفحة الأولى من ملف PDF.

ملاحظة: هذا الكود يعمل أيضاً مع مكتبة Aspose.PDF.Drawing. ملاحظة: هذا الكود يعمل أيضاً مع مكتبة Aspose.PDF.Drawing.

var document = new Document(System.IO.Path.Combine(_dataDir, "sample-w.pdf"));
var watermarks = document.Pages[1].Artifacts
    .Where(artifact =>
    artifact.Type == Artifact.ArtifactType.Pagination
    && artifact.Subtype == Artifact.ArtifactSubtype.Watermark);
foreach (WatermarkArtifact item in watermarks.Cast<WatermarkArtifact>())
{
    Console.WriteLine($"{item.Text} {item.Rectangle}");
}

العمل مع الخلفيات كمواد أثرية

يمكن استخدام صور الخلفية لإضافة علامة مائية، أو تصميم خفي آخر، إلى الوثائق. في Aspose.PDF لـ .NET، كل وثيقة PDF هي مجموعة من الصفحات وكل صفحة تحتوي على مجموعة من المواد الأثرية. يمكن استخدام فئة BackgroundArtifact لإضافة صورة خلفية إلى كائن صفحة.

يوضح الكود التالي كيفية إضافة صورة خلفية إلى صفحات PDF باستخدام كائن BackgroundArtifact.

var document = new Document(System.IO.Path.Combine(_dataDir, "sample.pdf"));
var background = new BackgroundArtifact()
{
    BackgroundImage = System.IO.File.OpenRead(System.IO.Path.Combine(_dataDir, "background.jpg"))
};
document.Pages[1].Artifacts.Add(background);
document.Save(System.IO.Path.Combine(_dataDir, "sample_artifacts_background.pdf"));

إذا كنت ترغب، لسبب ما، في استخدام خلفية بلون صلب، يرجى تغيير الكود السابق على النحو التالي:

var document = new Document(System.IO.Path.Combine(_dataDir, "sample.pdf"));
var background = new BackgroundArtifact()
{
    BackgroundColor = Color.DarkKhaki,
};
document.Pages[1].Artifacts.Add(background);
document.Save(System.IO.Path.Combine(_dataDir, "sample_artifacts_background.pdf"));

عد العناصر من نوع معين

لحساب العدد الإجمالي للعناصر من نوع معين (مثلاً، العدد الإجمالي للعلامات المائية)، استخدم الكود التالي:

var document = new Document(System.IO.Path.Combine(_dataDir, "sample.pdf"));
var paginationArtifacts = document.Pages[1].Artifacts.Where(artifact => artifact.Type == Artifact.ArtifactType.Pagination);
Console.WriteLine("Watermarks: {0}", paginationArtifacts.Count(a => a.Subtype == Artifact.ArtifactSubtype.Watermark));
Console.WriteLine("Backgrounds: {0}", paginationArtifacts.Count(a => a.Subtype == Artifact.ArtifactSubtype.Background));
Console.WriteLine("Headers: {0}", paginationArtifacts.Count(a => a.Subtype == Artifact.ArtifactSubtype.Header));
Console.WriteLine("Footers: {0}", paginationArtifacts.Count(a => a.Subtype == Artifact.ArtifactSubtype.Footer));