Объединение документов XPS в PDF

API решение для C++ для объединения нескольких файлов XPS

 

Формат файла XPS позволяет хранить несколько документов в одном файле, а также может содержать несколько страниц. Решение Aspose.Page API для C++ позволяет объединять несколько файлов в один, в результате чего создается файл XPS или PDF, содержащий объединенное содержимое всех исходных файлов.

Здесь вы найдете пример кода использования API для слияния файлов XPS. Чтобы узнать, как эту функцию можно интегрировать в веб-решение или использовать для объединения файлов онлайн, вы можете попробовать кроссплатформенный XPS Merger . орудие труда.

Чтобы объединить файлы PS и EPS, вам необходимо:

  • Aspose.Page for C++ API — многофункциональное, мощное и простое в использовании API решение для обработки и преобразования документов для платформы C++.

  • Вы можете загрузить его последнюю версию напрямую, просто откройте диспетчер пакетов NuGet, найдите Aspose.Page.Cpp и установите. Вы также можете использовать следующую команду из консоли диспетчера пакетов.

Package Manager Console Command


    PM> Install-Package Aspose.Page

Порядок действий по объединению нескольких файлов XPS в PDF с помощью C++.

  1. Укажите путь к каталогу документов.
  2. Инициализируйте выходные потоки PDF и входные файлы XPS.
  3. Создайте экземпляр XpsDocument из созданного ранее входного потока.
  4. Инициализировать объект options с параметрами TextCompression, ImageCompression, JpegQualityLevel для выходного файла с помощью PdfSaveOptions Класс.
  5. Используя класс PdfDevice , создайте устройство рендеринга для формата PDF.
  6. Объедините файлы XPS для вывода документа XPS.

Код С++ для объединения XPS в PDF

    using Aspose::Page::XPS;
    using Aspose::Page::IO;
    using Aspose::Page::Presentation::Pdf;
    // Input file
    System::SharedPtr<System::IO::Stream> pdfStream = System::IO::File::Open(RunExamples::outDir() + u"XPStoPDF.pdf", System::IO::FileMode::Create, System::IO::FileAccess::Write);
    // Clearing resources under 'using' statement
    System::Details::DisposeGuard<1> __dispose_guard_1({ pdfStream });
    // ------------------------------------------
    try {
	    System::SharedPtr<System::IO::Stream> xpsStream = System::IO::File::Open(RunExamples::dataDir() + u"input xps", System::IO::FileMode::Open, System::IO::FileAccess::Read);
	    // Clearing resources under 'using' statement
	    System::Details::DisposeGuard<1> __dispose_guard_0({ xpsStream });
	    // ------------------------------------------

	    try
	    {
		    // Load XPS document form the stream
		    System::SharedPtr<XpsDocument> document = System::MakeObject<XpsDocument>(xpsStream, System::MakeObject<XpsLoadOptions>());
		    // or load XPS document directly from file. No xpsStream is needed then.
		    // XpsDocument document = new XpsDocument(inputFileName, new XpsLoadOptions());

		    // Initialize options object with necessary parameters.
		    System::SharedPtr<Aspose::Page::Xps::Presentation::Pdf::PdfSaveOptions> options = [&] { auto tmp_0 = System::MakeObject<Aspose::Page::Xps::Presentation::Pdf::PdfSaveOptions>(); tmp_0->set_JpegQualityLevel(100); tmp_0->set_ImageCompression(Aspose::Page::Xps::Presentation::Pdf::PdfImageCompression::Jpeg); tmp_0->set_TextCompression(Aspose::Page::Xps::Presentation::Pdf::PdfTextCompression::Flate); tmp_0->set_PageNumbers(System::MakeArray<int32_t>({ 1, 2, 6 })); return tmp_0; }();

		    // Create rendering device for PDF format
		    System::SharedPtr<Aspose::Page::Xps::Presentation::Pdf::PdfDevice> device = System::MakeObject<Aspose::Page::Xps::Presentation::Pdf::PdfDevice>(pdfStream);

		    // Create an array of XPS files that will be merged with the first one
		    System::ArrayPtr<System::String> filesForMerge = System::MakeArray<System::String>({dataDir() + u"input2.xps", dataDir() + u"input3.xps"});

		    document->Merge(filesForMerge, device, options);
	    }
	    catch (...)
	    {
		    __dispose_guard_0.SetCurrentException(std::current_exception());
	    }
    }
    catch (...)
    {
	    __dispose_guard_1.SetCurrentException(std::current_exception());
    }

Порядок действий по объединению нескольких файлов XPS в один файл с помощью C++.

  1. Инициализируйте выходные и входные потоки XPS.
  2. Создайте массив файлов XPS для объединения с первым.
  3. Создайте экземпляр XpsDocument из созданного ранее входного потока.
  4. Объедините файлы XPS для вывода документа XPS.

Код C++ для слияния XPS с XPS

    // Output stream
    System::SharedPtr<System::IO::Stream> outStream = System::IO::File::Open(RunExamples::outDir() + u"mergedXPSfiles.xps", System::IO::FileMode::Create, System::IO::FileAccess::Write);
    // Clearing resources under 'using' statement
    System::Details::DisposeGuard<1> __dispose_guard_1({ outStream });
    // ------------------------------------------
    try {
	    System::SharedPtr<System::IO::Stream> inStream = System::IO::File::Open(RunExamples::dataDir() + u"input.xps", System::IO::FileMode::Open, System::IO::FileAccess::Read);
	    // Clearing resources under 'using' statement
	    System::Details::DisposeGuard<1> __dispose_guard_0({ inStream });
	    // ------------------------------------------

	    try
	    {
		    // Load XPS document form the stream
		    System::SharedPtr<XpsDocument> document = System::MakeObject<XpsDocument>(xpsStream, System::MakeObject<XpsLoadOptions>());
		    // or load XPS document directly from file. No xpsStream is needed then.
		    // XpsDocument document = new XpsDocument(inputFileName, new XpsLoadOptions());

		    // Create an array of XPS files that will be merged with the first one
		    System::ArrayPtr<System::String> filesForMerge = System::MakeArray<System::String>({dataDir() + u"input2.xps", dataDir() + u"input3.xps"});

		    document->Merge(filesForMerge, outStream);
	    }
	    catch (...)
	    {
		    __dispose_guard_0.SetCurrentException(std::current_exception());
	    }
    }
    catch (...)
    {
	    __dispose_guard_1.SetCurrentException(std::current_exception());
    }

XPS Формат файла XPS

Формат XPS похож на формат PDF. Оба являются форматами языка описания страниц (PDL). EPS основан на HTML, а не на языке PostScript. Файл .eps может содержать разметку структуры документа вместе с информацией о том, как документ будет выглядеть. Также добавлены инструкции о том, как распечатать и визуализировать документ. Особенность формата в том, что он фиксирует описание документа, а значит, он будет выглядеть одинаково независимо от того, кто и из какой операционной системы его открывает.