Маніпулювання метаданими XMP

Легко додавайте, редагуйте та отримуйте метадані з файлів EPS, маючи повний контроль над інформацією вашого документа. Піднімайте вміст файлів EPS на новий рівень з Aspose.Page Solution для C++!

 

Метадані XMP — це набір властивостей для опису файлу. Вони записуються у форматі XML. Метадані містять інформацію про вміст файлу, ідентифікаційні дані, які відрізняють його від інших файлів, а також інші дані, пов'язані з історією створення, зміни та завантаження файлу. Крім того, вони фіксують дані про користувачів, які брали участь у створенні, редагуванні та завантаженні файлу.

Розкрийте потенціал ваших файлів EPS за допомогою нашого рішення C++ API! Бездоганна інтеграція з метаданими XMP, яка надає вам повний контроль над вашими документами EPS. Чи ви керуєте цифровими активами, вдосконалюєте інформацію про авторські права чи оптимізуєте творчий робочий процес — наш API спрощує цей процес, забезпечуючи точність та ефективність. Вдосконалюйте свої можливості роботи з метаданими та отримуйте глибше розуміння ваших файлів EPS. Оцініть бездоганну інтеграцію з метаданими XMP за допомогою нашого рішення C++ API. Придбайте рішення сьогодні або отримайте безкоштовну пробну версію, щоб ознайомитися з функціональністю додавання, редагування та отримання метаданих з файлів EPS! Для отримання додаткової інформації та прикладів роботи з метаданими XMP відвідайте документацію Aspose.Page API на GitHub . Спробуйте також наш веб-додаток Редактор метаданих XMP , щоб побачити, як можна використовувати цей функціонал.

Для запуску прикладу коду вам знадобиться:

  • Aspose.Page для C++ API — багатофункціональний, потужний та простий у використанні API для роботи з документами та їх конвертації для платформи C++.

  • Ви можете завантажити його останню версію безпосередньо — просто відкрийте менеджер пакетів NuGet, знайдіть Aspose.Page.Cpp і встановіть його. Також можна скористатися такою командою з консолі менеджера пакетів.

Package Manager Console Command

    PM> Install-Package Aspose.Page.Cpp

Додавання метаданих XMP до файлу EPS за допомогою C++

Для вставки метаданих XMP до EPS вам потрібно використовувати сутності класу XmpMetadata . Виконайте такі кроки:

  1. Задайте шлях до каталогу, де знаходиться документ.
  2. Ініціалізуйте вхідний потік для файлу EPS.
  3. Використовуйте клас PsDocument для створення PS-файлу з вхідного потоку.
  4. Отримайте метадані XMP, викликавши метод GetXmpMetadata() . Якщо файл EPS не містить метаданих XMP, ми отримаємо новий файл, заповнений значеннями з коментарів метаданих PS.
  5. Збережіть змінений документ EPS, викликавши метод Save().
Додавання метаданих XMP
    // The path to the documents directory.
    System::String dataDir = RunExamples::GetDataDir_WorkingWithXMPMetadataInEPS();
    // Initialize EPS file input stream
    System::SharedPtr<System::IO::FileStream> psStream = System::MakeObject<System::IO::FileStream>(dataDir + u"add_input.eps", System::IO::FileMode::Open, System::IO::FileAccess::Read);
    // Create PsDocument instance from stream
    System::SharedPtr<PsDocument> document = System::MakeObject<PsDocument>(psStream);
    
    
    {
        auto __finally_guard_0 = ::System::MakeScopeGuard([&psStream]()
        {
            psStream->Close();
        });
        
        try
        {
            // Get XMP metadata. If EPS file doesn't contain XMP metadata we get new one filled with values from PS metadata comments (%%Creator, %%CreateDate, %%Title etc)
            System::SharedPtr<XmpMetadata> xmp = document->GetXmpMetadata();
            
            // Check metadata values extracted from PS metadata comments and set up in new XMP metadata
            
            // Get "CreatorTool" value
            if (xmp->Contains(u"xmp:CreatorTool"))
            {
                System::Console::WriteLine(System::String(u"CreatorTool: ") + xmp->idx_get(u"xmp:CreatorTool")->ToStringValue());
            }
            
            // Get "CreateDate" value
            if (xmp->Contains(u"xmp:CreateDate"))
            {
                System::Console::WriteLine(System::String(u"CreateDate: ") + xmp->idx_get(u"xmp:CreateDate")->ToStringValue());
            }
            
            // Get "format" value
            if (xmp->Contains(u"dc:format"))
            {
                System::Console::WriteLine(System::String(u"Format: ") + xmp->idx_get(u"dc:format")->ToStringValue());
            }
            
            // Get "title" value
            if (xmp->Contains(u"dc:title"))
            {
                System::Console::WriteLine(System::String(u"Title: ") + xmp->idx_get(u"dc:title")->ToArray()->idx_get(0)->ToStringValue());
            }
            
            // Get "creator" value
            if (xmp->Contains(u"dc:creator"))
            {
                System::Console::WriteLine(System::String(u"Creator: ") + xmp->idx_get(u"dc:creator")->ToArray()->idx_get(0)->ToStringValue());
            }
            
            // Get "MetadataDate" value
            if (xmp->Contains(u"xmp:MetadataDate"))
            {
                System::Console::WriteLine(System::String(u"MetadataDate: ") + xmp->idx_get(u"xmp:MetadataDate")->ToStringValue());
            }
            
            // Save EPS file with new XMP metadata
            
            // Create ouput stream
            {
                System::SharedPtr<System::IO::FileStream> outPsStream = System::MakeObject<System::IO::FileStream>(dataDir + u"output/" + u"add_output.eps", System::IO::FileMode::Create, System::IO::FileAccess::Write);
                // Clearing resources under 'using' statement
                System::Details::DisposeGuard<1> __dispose_guard_1({ outPsStream});
                // ------------------------------------------
                
                try
                {
                    // Save EPS file
                    document->Save(outPsStream);
                }
                catch(...)
                {
                    __dispose_guard_1.SetCurrentException(std::current_exception());
                }
            }
            
        }
        catch (...)
        {
            throw;
        }
    }

Зміна метаданих XMP файлу EPS за допомогою C++

Для додавання елементів масиву до метаданих XMP вам знадобиться знову використовувати ті самі сутності та виконати аналогічні кроки. Додатковий крок потребує використання SetArrayItem або AddArrayItem() .

Зміна метаданих XMP
    // The path to the documents directory.
    System::String dataDir = RunExamples::GetDataDir_WorkingWithXMPMetadataInEPS();
    // Initialize EPS file input stream
    System::SharedPtr<System::IO::FileStream> psStream = System::MakeObject<System::IO::FileStream>(dataDir + u"add_simple_props_input.eps", System::IO::FileMode::Open, System::IO::FileAccess::Read);
    // Create PsDocument instance from stream
    System::SharedPtr<PsDocument> document = System::MakeObject<PsDocument>(psStream);
    
    
    {
        auto __finally_guard_0 = ::System::MakeScopeGuard([&psStream]()
        {
            psStream->Close();
        });
        
        try
        {
            // Get XMP metadata. If EPS file doesn't contain XMP metadata we get new one filled with values from PS metadata comments (%%Creator, %%CreateDate, %%Title etc)
            System::SharedPtr<XmpMetadata> xmp = document->GetXmpMetadata();
            
            //Change XMP metadata values
            
            // Add one more title. I will be added at the end of array by default.
            xmp->AddArrayItem(u"dc:title", System::MakeObject<XmpValue>(u"NewTitle"));
            
            // Add one more creator. It will be added in the array by an index (0).
            xmp->AddArrayItem(u"dc:creator", 0, System::MakeObject<XmpValue>(u"NewCreator"));
            
            // Save EPS file with changed XMP metadata
            
            // Create ouput stream
            {
                System::SharedPtr<System::IO::FileStream> outPsStream = System::MakeObject<System::IO::FileStream>(dataDir + u"output/" + u"add_array_items_output.eps", System::IO::FileMode::Create, System::IO::FileAccess::Write);
                // Clearing resources under 'using' statement
                System::Details::DisposeGuard<1> __dispose_guard_1({ outPsStream});
                // ------------------------------------------
                
                try
                {
                    // Save EPS file
                    document->Save(outPsStream);
                }
                catch(...)
                {
                    __dispose_guard_1.SetCurrentException(std::current_exception());
                }
            }
            
        }
        catch (...)
        {
            throw;
        }
    }

EPS What is EPS File Format

EPS (Encapsulated PostScript) — формат на основі PostScript, який описує одну сторінку. Підходить для векторних графік та комбінованих вектор‑растр зображень. Після імпорту файл не можна редагувати, тому його зазвичай конвертують у редагований формат, наприклад SVG або PDF.