Konvertera XPS- eller OXPS-filer till PDF-format med C++

Dokumenten XPS och OXPS definierar layout, utseende och utskriftsinformation. Dessa dokument liknar PDF-filer. På grund av PDF-formatets höga popularitet kan du hamna i situationer där du behöver konvertera XPS- och OXPS-dokument till PDF-format. För detta ändamål kommer den här artikeln att lära dig hur du konverterar XPS- och OXPS-dokument till PDF-format med C++.

C++ API för att konvertera XPS- och OXPS-dokument till PDF-format

Aspose.Page for C++ är ett C++-bibliotek för att rendera och manipulera XPS- och PostScript-filer. Det låter dig skapa, läsa och uppdatera XPS-dokument. Dessutom stöder API:et konvertering av XPS- och OXPS-dokument till PDF-format. Du kan antingen installera API:t genom NuGet eller ladda ner det direkt från avsnittet downloads.

PM> Install-Package Aspose.Page.Cpp

Konvertera XPS/OXPS-dokument till PDF-format

Följande är stegen för att konvertera XPS- och OXPS-dokument till PDF-format.

Följande exempelkod visar hur du konverterar XPS/OXPS-dokument till PDF-format med C++.

// Utdatafil
System::SharedPtr<System::IO::Stream> pdfStream = System::IO::File::Open(u"OutputDirectory\\XPStoPDF.pdf", System::IO::FileMode::Create, System::IO::FileAccess::Write);
// Rensa resurser under "använder" uttalande
System::Details::DisposeGuard<1> __dispose_guard_1({ pdfStream });
// ------------------------------------------
try {
	// Källfilen
	System::SharedPtr<System::IO::Stream> xpsStream = System::IO::File::Open(u"SourceDirectory\\sample.xps", System::IO::FileMode::Open, System::IO::FileAccess::Read);
	// Rensa resurser under "använder" uttalande
	System::Details::DisposeGuard<1> __dispose_guard_0({ xpsStream });
	// ------------------------------------------

	try
	{
		// Ladda XPS-dokument från strömmen
		System::SharedPtr<XpsDocument> document = System::MakeObject<XpsDocument>(xpsStream, System::MakeObject<XpsLoadOptions>());
		// eller ladda XPS-dokument direkt från filen. Då behövs ingen xpsStream.
		// XpsDocument document = new XpsDocument(inputFileName, new XpsLoadOptions());

		// Initiera PdfSaveOptions-objektet med nödvändiga parametrar.
		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);
			return tmp_0;
		}();

		// Skapa renderingsenhet för PDF-format
		System::SharedPtr<Aspose::Page::XPS::Presentation::Pdf::PdfDevice> device = System::MakeObject<Aspose::Page::XPS::Presentation::Pdf::PdfDevice>(pdfStream);

		// Spara PDF-fil
		document->Save(device, options);
	}
	catch (...)
	{
		__dispose_guard_0.SetCurrentException(std::current_exception());
	}
}
catch (...)
{
	__dispose_guard_1.SetCurrentException(std::current_exception());
}
Bild av den utgående PDF-filen som genereras av exempelkoden

Bild av den utgående PDF-filen som genereras av exempelkoden

Konvertera utvalda sidor av XPS/OXPS-dokument till PDF-format

När du konverterar XPS- och OXPS-filer till PDF-format kan du också ange vilka sidor du vill konvertera. Utdata-PDF-filen kommer endast att innehålla de sidor du väljer. För att uppnå detta, följ stegen nedan.

Följande exempelkod visar hur man konverterar utvalda sidor av XPS- och OXPS-dokument till PDF-format med C++.

// Utdatafil
System::SharedPtr<System::IO::Stream> pdfStream = System::IO::File::Open(u"OutputDirectory\\XPStoPDF.pdf", System::IO::FileMode::Create, System::IO::FileAccess::Write);
// Rensa resurser under "använder" uttalande
System::Details::DisposeGuard<1> __dispose_guard_1({ pdfStream });
// ------------------------------------------
try {
	// Källfilen
	System::SharedPtr<System::IO::Stream> xpsStream = System::IO::File::Open(u"SourceDirectory\\sample.xps", System::IO::FileMode::Open, System::IO::FileAccess::Read);
	// Rensa resurser under "använder" uttalande
	System::Details::DisposeGuard<1> __dispose_guard_0({ xpsStream });
	// ------------------------------------------

	try
	{
		// Ladda XPS-dokument från strömmen
		System::SharedPtr<XpsDocument> document = System::MakeObject<XpsDocument>(xpsStream, System::MakeObject<XpsLoadOptions>());
		// eller ladda XPS-dokument direkt från filen. Då behövs ingen xpsStream.
		// XpsDocument document = new XpsDocument(inputFileName, new XpsLoadOptions());

		// Initiera PdfSaveOptions-objektet med nödvändiga parametrar.
		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, 3 }));
			return tmp_0;
		}();

		// Skapa renderingsenhet för PDF-format
		System::SharedPtr<Aspose::Page::XPS::Presentation::Pdf::PdfDevice> device = System::MakeObject<Aspose::Page::XPS::Presentation::Pdf::PdfDevice>(pdfStream);

		// Spara PDF-fil
		document->Save(device, options);
	}
	catch (...)
	{
		__dispose_guard_0.SetCurrentException(std::current_exception());
	}
}
catch (...)
{
	__dispose_guard_1.SetCurrentException(std::current_exception());
}
Bild av den utgående PDF-filen som genereras av exempelkoden

Bild av den utgående PDF-filen som genereras av exempelkoden

Skaffa en gratis licens

Du kan prova API:et utan utvärderingsbegränsningar genom att begära en gratis tillfällig licens.

Slutsats

I den här artikeln har du lärt dig hur du konverterar XPS- och OXPS-dokument till PDF-format med C++. Dessutom har du sett hur man konverterar utvalda sidor i XPS/OXPS-dokumenten till PDF-format med Aspose.Page for C++ API. API:et tillhandahåller många ytterligare funktioner för att arbeta med XPS-dokument som du kan utforska i detalj genom att besöka den officiella dokumentationen. Om du har några frågor är du välkommen att kontakta oss på vårt gratis supportforum.

Se även