العمل مع العناصر في .NET

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

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

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

  • Artifact.Type – يحصل على نوع Artifact (يدعم القيم من تعداد Artifact.ArtifactType حيث تشمل القيم Background، Layout، Page، Pagination و Undefined).
  • Artifact.Subtype – يحصل على النوع الفرعي لـ Artifact (يدعم القيم من تعداد Artifact.ArtifactSubtype حيث تشمل القيم Background، Footer، Header، Undefined، Watermark).
  • Artifact.Image – يحصل على صورة Artifact (إذا كانت الصورة موجودة، وإلا null).
  • Artifact.Text – يحصل على نص Artifact.
  • Artifact.Contents – يحصل على مجموعة من العمليات الداخلية لـ Artifact. النوع المدعوم هو System.Collections.ICollection.
  • Artifact.Form – يحصل على XForm لـ Artifact (إذا تم استخدام XForm). تحتوي Artifacts الخاصة بـ Watermarks و header و footer على XForm تُظهر جميع محتويات Artifact.
  • Artifact.Rectangle – يحصل على موضع Artifact في الصفحة.
  • Artifact.Rotation – يحصل على دوران Artifact (بالدرجات؛ حيث تشير القيمة الموجبة إلى دوران عكس اتجاه عقارب الساعة).
  • Artifact.Opacity – يحصل على شفافية Artifact. القيم الممكنة تتراوح من 0 إلى 1، حيث يعني 1 شفافية كاملة.

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

Working with Existing Watermarks

العلامة المائية المُنشأة باستخدام Adobe Acrobat تُسمى Artifact (كما هو موضح في 14.8.2.2 Real Content and Artifacts من مواصفات PDF).

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

تُظهر الشيفرة التالية كيفية الحصول على جميع العلامات المائية في الصفحة الأولى من ملف PDF.

Note: تعمل هذه الشيفرة أيضًا مع مكتبة Aspose.PDF.Drawing library.

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ExtractWatermarkFromPDF()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf();

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "sample-w.pdf"))
    {
        // Get the watermarks from the first page artifacts
        var watermarks = document.Pages[1].Artifacts
            .Where(artifact =>
                artifact.Type == Aspose.Pdf.Artifact.ArtifactType.Pagination
                && artifact.Subtype == Aspose.Pdf.Artifact.ArtifactSubtype.Watermark);

        // Iterate through the found watermark artifacts and print details
        foreach (Aspose.Pdf.WatermarkArtifact item in watermarks.Cast<Aspose.Pdf.WatermarkArtifact>())
        {
            Console.WriteLine($"{item.Text} {item.Rectangle}");
        }
    }
}

Working with Backgrounds as Artifacts

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

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

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void AddBackgroundImageToPDF()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf();

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "sample.pdf"))
    {
        // Create a new BackgroundArtifact and set the background image
        var background = new Aspose.Pdf.BackgroundArtifact()
        {
            BackgroundImage = File.OpenRead(dataDir + "background.jpg")
        };

        // Add the background image to the first page's artifacts
        document.Pages[1].Artifacts.Add(background);

        // Save PDF document with the added background
        document.Save(dataDir + "SampleArtifactsBackground_out.pdf");
    }
}

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

 // For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET

 private static void AddBackgroundColorToPDF()
 {
    // The path to the documents directory
     var dataDir = RunExamples.GetDataDir_AsposePdf();

     // Open PDF document
     using (var document = new Aspose.Pdf.Document(dataDir + "sample.pdf"))
     {
         // Create a new BackgroundArtifact and set the background color
         var background = new Aspose.Pdf.BackgroundArtifact()
         {
             BackgroundColor = Aspose.Pdf.Color.DarkKhaki
         };

         // Add the background color to the first page's artifacts
         document.Pages[1].Artifacts.Add(background);

         // Save PDF document
         document.Save(dataDir + "SampleArtifactsBackground_out.pdf");
     }
 }

Counting Artifacts of a Particular Type

لحساب العدد الإجمالي لـ Artifacts من نوع معين (على سبيل المثال، العدد الإجمالي للعلامات المائية)، استخدم الشيفرة التالية:

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void CountPDFArtifacts()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf();

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "sample.pdf"))
    {
        // Get pagination artifacts from the first page
        var paginationArtifacts = document.Pages[1].Artifacts
            .Where(artifact => artifact.Type == Aspose.Pdf.Artifact.ArtifactType.Pagination);

        // Count and display the number of each artifact type
        Console.WriteLine("Watermarks: {0}",
            paginationArtifacts.Count(a => a.Subtype == Aspose.Pdf.Artifact.ArtifactSubtype.Watermark));
        Console.WriteLine("Backgrounds: {0}",
            paginationArtifacts.Count(a => a.Subtype == Aspose.Pdf.Artifact.ArtifactSubtype.Background));
        Console.WriteLine("Headers: {0}",
            paginationArtifacts.Count(a => a.Subtype == Aspose.Pdf.Artifact.ArtifactSubtype.Header));
        Console.WriteLine("Footers: {0}",
            paginationArtifacts.Count(a => a.Subtype == Aspose.Pdf.Artifact.ArtifactSubtype.Footer));
    }
}

Adding Bates Numbering Artifact

لإضافة Bates numbering artifact إلى المستند، استدعِ طريقة التمديد AddBatesNumbering(BatesNArtifact batesNArtifact) على PageCollection، مع تمرير كائن BatesNArtifact كمعامل:

أو، يمكنك تمرير مجموعة من PaginationArtifacts:

بدلاً من ذلك، يمكنك إضافة Bates numbering artifact باستخدام مُفوَّض فعل:

لحذف Bates numbering، استخدم الشيفرة التالية: