Chuyển đổi tệp XPS hoặc OXPS sang định dạng PDF bằng C ++

Các tài liệu XPSOXPS xác định bố cục, giao diện và thông tin in. Các tài liệu này tương tự như các tệp PDF. Do tính phổ biến cao của định dạng PDF, bạn có thể rơi vào tình huống cần chuyển đổi tài liệu XPS và OXPS sang định dạng PDF. Để đạt được điều đó, bài viết này sẽ hướng dẫn bạn cách chuyển đổi tài liệu XPS và OXPS sang định dạng PDF bằng C ++.

API C ++ để chuyển đổi tài liệu XPS và OXPS sang định dạng PDF

Aspose.Page for C ++ là một thư viện C ++ để kết xuất và xử lý các tệp XPS và PostScript. Nó cho phép bạn tạo, đọc và cập nhật các tài liệu XPS. Hơn nữa, API hỗ trợ chuyển đổi các tài liệu XPS và OXPS sang định dạng PDF. Bạn có thể cài đặt API thông qua NuGet hoặc tải xuống trực tiếp từ phần tải xuống.

PM> Install-Package Aspose.Page.Cpp

Chuyển đổi tài liệu XPS / OXPS sang định dạng PDF

Sau đây là các bước để chuyển đổi tài liệu XPS và OXPS sang định dạng PDF.

Đoạn mã mẫu sau đây cho thấy cách chuyển đổi tài liệu XPS / OXPS sang định dạng PDF bằng C ++.

// Tệp đầu ra
System::SharedPtr<System::IO::Stream> pdfStream = System::IO::File::Open(u"OutputDirectory\\XPStoPDF.pdf", System::IO::FileMode::Create, System::IO::FileAccess::Write);
// Xóa tài nguyên trong câu lệnh 'using'
System::Details::DisposeGuard<1> __dispose_guard_1({ pdfStream });
// ------------------------------------------
try {
	// Tệp nguồn
	System::SharedPtr<System::IO::Stream> xpsStream = System::IO::File::Open(u"SourceDirectory\\sample.xps", System::IO::FileMode::Open, System::IO::FileAccess::Read);
	// Xóa tài nguyên trong câu lệnh 'using'
	System::Details::DisposeGuard<1> __dispose_guard_0({ xpsStream });
	// ------------------------------------------

	try
	{
		// Tải tài liệu XPS từ luồng
		System::SharedPtr<XpsDocument> document = System::MakeObject<XpsDocument>(xpsStream, System::MakeObject<XpsLoadOptions>());
		// hoặc tải tài liệu XPS trực tiếp từ tệp. Không cần xpsStream sau đó.
		// Tài liệu XpsDocument = new XpsDocument (inputFileName, new XpsLoadOptions());

		// Khởi tạo đối tượng PdfSaveOptions với các tham số cần thiết.
		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;
		}();

		// Tạo thiết bị kết xuất cho định dạng PDF
		System::SharedPtr<Aspose::Page::XPS::Presentation::Pdf::PdfDevice> device = System::MakeObject<Aspose::Page::XPS::Presentation::Pdf::PdfDevice>(pdfStream);

		// Lưu tệp PDF
		document->Save(device, options);
	}
	catch (...)
	{
		__dispose_guard_0.SetCurrentException(std::current_exception());
	}
}
catch (...)
{
	__dispose_guard_1.SetCurrentException(std::current_exception());
}
Hình ảnh của tệp PDF đầu ra được tạo bởi mã mẫu

Hình ảnh của tệp PDF đầu ra được tạo bởi mã mẫu

Chuyển đổi các trang đã chọn của tài liệu XPS / OXPS sang định dạng PDF

Trong khi chuyển đổi các tệp XPS và OXPS sang định dạng PDF, bạn cũng có thể chỉ định các trang bạn muốn chuyển đổi. Tệp PDF đầu ra sẽ chỉ chứa các trang bạn chọn. Để đạt được điều này, vui lòng làm theo các bước dưới đây.

Đoạn mã mẫu sau đây trình bày cách chuyển đổi các trang được chọn của tài liệu XPS và OXPS sang định dạng PDF bằng C ++.

// Tệp đầu ra
System::SharedPtr<System::IO::Stream> pdfStream = System::IO::File::Open(u"OutputDirectory\\XPStoPDF.pdf", System::IO::FileMode::Create, System::IO::FileAccess::Write);
// Xóa tài nguyên trong câu lệnh 'using'
System::Details::DisposeGuard<1> __dispose_guard_1({ pdfStream });
// ------------------------------------------
try {
	// Tệp nguồn
	System::SharedPtr<System::IO::Stream> xpsStream = System::IO::File::Open(u"SourceDirectory\\sample.xps", System::IO::FileMode::Open, System::IO::FileAccess::Read);
	// Xóa tài nguyên trong câu lệnh 'using'
	System::Details::DisposeGuard<1> __dispose_guard_0({ xpsStream });
	// ------------------------------------------

	try
	{
		// Tải tài liệu XPS từ luồng
		System::SharedPtr<XpsDocument> document = System::MakeObject<XpsDocument>(xpsStream, System::MakeObject<XpsLoadOptions>());
		// hoặc tải tài liệu XPS trực tiếp từ tệp. Sau đó không cần xpsStream.
		// Tài liệu XpsDocument = new XpsDocument (inputFileName, new XpsLoadOptions());

		// Khởi tạo đối tượng PdfSaveOptions với các tham số cần thiết.
		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;
		}();

		// Tạo thiết bị kết xuất cho định dạng PDF
		System::SharedPtr<Aspose::Page::XPS::Presentation::Pdf::PdfDevice> device = System::MakeObject<Aspose::Page::XPS::Presentation::Pdf::PdfDevice>(pdfStream);

		// Lưu tệp PDF
		document->Save(device, options);
	}
	catch (...)
	{
		__dispose_guard_0.SetCurrentException(std::current_exception());
	}
}
catch (...)
{
	__dispose_guard_1.SetCurrentException(std::current_exception());
}
Hình ảnh của tệp PDF đầu ra được tạo bởi mã mẫu

Hình ảnh của tệp PDF đầu ra được tạo bởi mã mẫu

Nhận giấy phép miễn phí

Bạn có thể dùng thử API mà không có giới hạn đánh giá bằng cách yêu cầu giấy phép tạm thời miễn phí.

Sự kết luận

Trong bài viết này, bạn đã biết cách chuyển đổi tài liệu XPS và OXPS sang định dạng PDF bằng C ++. Ngoài ra, bạn đã thấy cách chuyển đổi các trang được chọn của tài liệu XPS / OXPS sang định dạng PDF bằng cách sử dụng API Aspose.Page cho C ++. API cung cấp nhiều tính năng bổ sung để làm việc với tài liệu XPS mà bạn có thể khám phá chi tiết bằng cách truy cập tài liệu chính thức. Trong trường hợp có bất kỳ câu hỏi nào, vui lòng liên hệ với chúng tôi trên diễn đàn hỗ trợ miễn phí của chúng tôi.

Xem thêm