Манипулирование 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 Формат файла EPS

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