Bekerja dengan Grafik Vektor

Dalam bab ini, kita akan menjelajahi cara menggunakan kelas GraphicsAbsorber yang kuat untuk berinteraksi dengan grafik vektor dalam dokumen PDF. Apakah Anda perlu memindahkan, menghapus, atau menambahkan grafik, panduan ini akan menunjukkan kepada Anda cara melakukan tugas-tugas ini secara efektif.

Pendahuluan

Grafik vektor adalah komponen penting dari banyak dokumen PDF, digunakan untuk merepresentasikan gambar, bentuk, dan elemen grafis lainnya. Aspose.PDF menyediakan kelas GraphicsAbsorber, yang memungkinkan pengembang untuk mengakses dan memanipulasi grafik ini secara programatik. Dengan menggunakan metode Visit dari GraphicsAbsorber, Anda dapat mengekstrak grafik vektor dari halaman tertentu dan melakukan berbagai operasi, seperti memindahkan, menghapus, atau menyalinnya ke halaman lain.

Mengekstrak Grafik dengan GraphicsAbsorber

Langkah pertama dalam bekerja dengan grafik vektor adalah mengekstraknya dari dokumen PDF. Berikut adalah cara melakukannya menggunakan kelas GraphicsAbsorber:

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

    // Open the document
    using (var document = new Aspose.Pdf.Document(dataDir + "DocumentWithVectorGraphics.pdf"))
    {
        // Create an instance of GraphicsAbsorber
        using (var graphicsAbsorber = new Aspose.Pdf.Vector.GraphicsAbsorber())
        {
            // Select the first page of the document
            var page = document.Pages[1];

            // Use the `Visit` method to extract graphics from the page
            graphicsAbsorber.Visit(page);

            // Step 5: Display information about the extracted elements
            foreach (var element in graphicsAbsorber.Elements)
            {
                Console.WriteLine($"Page Number: {element.SourcePage.Number}");
                Console.WriteLine($"Position: ({element.Position.X}, {element.Position.Y})");
                Console.WriteLine($"Number of Operators: {element.Operators.Count}");
            }
        }
    }
}
  1. Buat Objek Dokumen: Objek Document baru diinstansiasi dengan jalur ke file PDF target.
  2. Buat Instance dari GraphicsAbsorber: Kelas ini menangkap semua elemen grafik dari halaman tertentu.
  3. Metode Visit: Metode Visit dipanggil pada halaman pertama, memungkinkan GraphicsAbsorber untuk menyerap grafik vektor.
  4. Iterasi Melalui Elemen yang Diekstrak: Kode melakukan loop melalui setiap elemen yang diekstrak, mencetak informasi seperti nomor halaman, posisi, dan jumlah operator gambar yang terlibat.

Memindahkan Grafik

Setelah Anda mengekstrak grafik, Anda dapat memindahkannya ke posisi yang berbeda di halaman yang sama. Berikut adalah cara mencapainya:

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

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "DocumentWithVectorGraphics.pdf"))
    {
        // Create a GraphicsAbsorber instance 
        using (var graphicsAbsorber = new Aspose.Pdf.Vector.GraphicsAbsorber())
        {
            // Select the first page of the document
            var page = document.Pages[1];

            // Extract graphic elements from the page
            graphicsAbsorber.Visit(page);

            // Temporarily suspend updates to improve performance
            graphicsAbsorber.SuppressUpdate();

            // Loop through each extracted graphic element and shift its position
            foreach (var element in graphicsAbsorber.Elements)
            {
                var position = element.Position;
                // Move graphics by shifting its X and Y coordinates
                element.Position = new Aspose.Pdf.Point(position.X + 150, position.Y - 10);
            }

            // Resume updates and apply changes
            graphicsAbsorber.ResumeUpdate();
        }

        // Save PDF document
        document.Save(dataDir + "DocumentWithVectorGraphics_out.pdf");
    }
}
  • SuppressUpdate: Metode ini sementara menangguhkan pembaruan untuk meningkatkan kinerja saat melakukan beberapa perubahan.
  • ResumeUpdate: Metode ini melanjutkan pembaruan dan menerapkan perubahan yang dilakukan pada posisi grafik.
  • Penempatan Elemen: Posisi setiap grafik disesuaikan dengan mengubah koordinat X dan Y-nya.

Menghapus Grafik

Ada skenario di mana Anda mungkin ingin menghapus grafik tertentu dari sebuah halaman. Aspose.PDF menawarkan dua metode untuk mencapai ini:

Metode 1: Menggunakan Batas Persegi Panjang

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

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "DocumentWithVectorGraphics.pdf"))
    {
        // Create GraphicsAbsorber
        using (var graphicsAbsorber = new Aspose.Pdf.Vector.GraphicsAbsorber())
        {
            // Get the first page of the document
            var page = document.Pages[1];

            // Extract graphic elements from the page
            graphicsAbsorber.Visit(page);

            // Define the rectangle where graphics will be removed
            var rectangle = new Aspose.Pdf.Rectangle(70, 248, 170, 252);

            // Temporarily suspend updates for better performance
            graphicsAbsorber.SuppressUpdate();

            // Iterate through the extracted graphic elements and remove elements inside the rectangle
            foreach (var element in graphicsAbsorber.Elements)
            {
                // Check if the graphic's position falls within the rectangle
                if (rectangle.Contains(element.Position))
                {
                    // Remove the graphic element
                    element.Remove();
                }
            }

            // Resume updates and apply changes
            graphicsAbsorber.ResumeUpdate();
        }

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

Metode 2: Menggunakan Koleksi Elemen yang Dihapus

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

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "DocumentWithVectorGraphics.pdf"))
    {
        // Create GraphicsAbsorber
        using (var graphicsAbsorber = new Aspose.Pdf.Vector.GraphicsAbsorber())
        {
            // Get the first page of the document
            var page = document.Pages[1];

            // Define the rectangle where graphics will be removed
            var rectangle = new Aspose.Pdf.Rectangle(70, 248, 170, 252);

            // Extract graphic elements from the page
            graphicsAbsorber.Visit(page);

            // Create a collection for the removed elements
            var removedElementsCollection = new Aspose.Pdf.Vector.GraphicElementCollection();

            // Add elements within the rectangle to the collection
            foreach (var item in graphicsAbsorber.Elements.Where(el => rectangle.Contains(el.Position)))
            {
                removedElementsCollection.Add(item);
            }

            // Temporarily suppress updates for better performance
            page.Contents.SuppressUpdate();

            // Delete the selected graphic elements
            page.DeleteGraphics(removedElementsCollection);

            // Resume updates and apply changes
            page.Contents.ResumeUpdate();
        }

        // Save PDF document
        document.Save(dataDir + "DocumentWithVectorGraphics_out.pdf");
    }
}
  • Batas Persegi Panjang: Tentukan area persegi panjang untuk menentukan grafik mana yang akan dihapus.
  • Suppress dan Resume Updates: Pastikan penghapusan yang efisien tanpa rendering sementara.

Menambahkan Grafik ke Halaman Lain

Grafik yang diserap dari satu halaman dapat ditambahkan ke halaman lain dalam dokumen yang sama. Berikut adalah dua metode untuk mencapainya:

Metode 1: Menambahkan Grafik Secara Individu

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

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "DocumentWithVectorGraphics.pdf"))
    {
        // Create GraphicsAbsorber
        using (var graphicsAbsorber = new Aspose.Pdf.Vector.GraphicsAbsorber())
        {
            // Get the first and second pages
            var page1 = document.Pages[1];
            var page2 = document.Pages[2];

            // Extract graphic elements from the first page
            graphicsAbsorber.Visit(page1);

            // Temporarily suppress updates for better performance
            page2.Contents.SuppressUpdate();

            // Add each graphic element from the first page to the second page
            foreach (var element in graphicsAbsorber.Elements)
            {
                element.AddOnPage(page2); // Add each graphic element to the second page.
            }

            // Resume updates and apply changes
            page2.Contents.ResumeUpdate();
        }

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

Metode 2: Menambahkan Grafik sebagai Koleksi

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

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "DocumentWithVectorGraphics.pdf"))
    {
        // Create GraphicsAbsorber
        using (var graphicsAbsorber = new Aspose.Pdf.Vector.GraphicsAbsorber())
        {
            // Get the first and second pages
            var page1 = document.Pages[1];
            var page2 = document.Pages[2];

            // Extract graphic elements from the first page
            graphicsAbsorber.Visit(page1);

            // Temporarily suppress updates for better performance
            page2.Contents.SuppressUpdate();

            // Add all graphics at once from the first page to the second page
            page2.AddGraphics(graphicsAbsorber.Elements);

            // Resume updates and apply changes
            page2.Contents.ResumeUpdate();
        }

        // Save PDF document
        document.Save(dataDir + "DocumentWithVectorGraphics_out.pdf");
    }
}
  • SuppressUpdate dan ResumeUpdate: Metode ini membantu dalam mempertahankan kinerja saat melakukan perubahan massal.
  • AddOnPage vs. AddGraphics: Gunakan AddOnPage untuk penambahan individu dan AddGraphics untuk penambahan massal.