Chuyển đổi hình ảnh XPS, OXPS sang JPG hoặc PNG bằng C ++

Tài liệu XPSOXPS tương tự như tệp PDF và xác định bố cục, giao diện và thông tin in cho tài liệu. Có thể có các tình huống mà bạn có thể cần phải chuyển đổi tài liệu XPS và OXPS sang định dạng hình ảnh JPGPNG. Để đạt được mục tiê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 ảnh JPG và PNG bằng C ++.

API C ++ để chuyển đổi tệp XPS, OXPS sang định dạng JPG hoặc PNG

Aspose.Page cho 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 các định dạng ảnh JPG và PNG. 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 JPG

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

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

// Tập tin đầu vào
System::String inputFileName = u"SourceDirectory\\sample.xps";
//Tệp đầu ra 
System::String outputFileName = u"OutputDirectory\\XPStoImage_out.jpeg";
// Khởi tạo luồng đầu vào XPS
{
	System::SharedPtr<System::IO::Stream> xpsStream = System::IO::File::Open(inputFileName, 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_1({ 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 JpegSaveOptions với các tham số cần thiết.
		System::SharedPtr<JpegSaveOptions> options = [&] { 
			auto tmp_0 = System::MakeObject<JpegSaveOptions>(); 
			tmp_0->set_SmoothingMode(System::Drawing::Drawing2D::SmoothingMode::HighQuality); 
			tmp_0->set_Resolution(300); 
			tmp_0->set_PageNumbers(System::MakeArray<int32_t>({ 1, 2, 6 })); 
			return tmp_0; 
		}();

		// Tạo thiết bị kết xuất cho định dạng JPG
		System::SharedPtr<ImageDevice> device = System::MakeObject<ImageDevice>();

		document->Save(device, options);

		// Lặp lại qua các phân vùng tài liệu (tài liệu cố định, theo điều kiện XPS)
		for (int32_t i = 0; i < device->get_Result()->get_Length(); i++)
		{
			for (int32_t j = 0; j < device->get_Result()[i]->get_Length(); j++)
			{
				// Khởi tạo luồng đầu ra hình ảnh
				{
					System::SharedPtr<System::IO::Stream> imageStream = System::IO::File::Open(System::IO::Path::GetDirectoryName(outputFileName) + u"\\" + System::IO::Path::GetFileNameWithoutExtension(outputFileName) + u"_" + (i + 1) + u"_" + (j + 1) + System::IO::Path::GetExtension(outputFileName), 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_0({ imageStream });
					// ------------------------------------------

					try
					{
						imageStream->Write(device->get_Result()[i][j], 0, device->get_Result()[i][j]->get_Length());
					}
					catch (...)
					{
						__dispose_guard_0.SetCurrentException(std::current_exception());
					}
				}
			}
		}
	}
	catch (...)
	{
		__dispose_guard_1.SetCurrentException(std::current_exception());
	}
}
Hình ảnh JPG được tạo bởi mã mẫu

Hình ảnh JPG được tạo bởi mã mẫu

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

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

Đ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 PNG bằng C ++.

// Tập tin đầu vào
System::String inputFileName = u"SourceDirectory\\sample.xps";
//Tệp đầu ra 
System::String outputFileName = u"OutputDirectory\\XPStoImage_out.png";
// Khởi tạo luồng đầu vào XPS
{
	System::SharedPtr<System::IO::Stream> xpsStream = System::IO::File::Open(inputFileName, 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_1({ 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 PngSaveOptions với các tham số cần thiết.
		System::SharedPtr<PngSaveOptions> options = [&] { 
			auto tmp_0 = System::MakeObject<PngSaveOptions>(); 
			tmp_0->set_SmoothingMode(System::Drawing::Drawing2D::SmoothingMode::HighQuality); 
			tmp_0->set_Resolution(300); 
			tmp_0->set_PageNumbers(System::MakeArray<int32_t>({ 1, 2, 6 })); 
			return tmp_0; 
		}();

		// Tạo thiết bị kết xuất cho định dạng PNG
		System::SharedPtr<ImageDevice> device = System::MakeObject<ImageDevice>();

		document->Save(device, options);

		// Lặp lại qua các phân vùng tài liệu (tài liệu cố định, theo điều kiện XPS)
		for (int32_t i = 0; i < device->get_Result()->get_Length(); i++)
		{
			for (int32_t j = 0; j < device->get_Result()[i]->get_Length(); j++)
			{
				// Khởi tạo luồng đầu ra hình ảnh
				{
					System::SharedPtr<System::IO::Stream> imageStream = System::IO::File::Open(System::IO::Path::GetDirectoryName(outputFileName) + u"\\" + System::IO::Path::GetFileNameWithoutExtension(outputFileName) + u"_" + (i + 1) + u"_" + (j + 1) + System::IO::Path::GetExtension(outputFileName), 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_0({ imageStream });
					// ------------------------------------------

					try
					{
						imageStream->Write(device->get_Result()[i][j], 0, device->get_Result()[i][j]->get_Length());
					}
					catch (...)
					{
						__dispose_guard_0.SetCurrentException(std::current_exception());
					}
				}
			}
		}
	}
	catch (...)
	{
		__dispose_guard_1.SetCurrentException(std::current_exception());
	}
}
Hình ảnh PNG được tạo bởi mã mẫu

Hình ảnh PNG đượ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 này, bạn đã học cách chuyển đổi tài liệu XPS và OXPS sang định dạng ảnh JPG và PNG bằng C ++. Hơn nữa, API Aspose.Page cho C ++ cung cấp nhiều định dạng bổ sung khác nhau để bạn sử dụng. Bạn có thể khám phá API 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