C++를 사용하여 XPS, OXPS를 JPG 또는 PNG 이미지로 변환

XPSOXPS 문서는 PDF 파일과 유사하며 문서의 레이아웃, 모양 및 인쇄 정보를 정의합니다. XPS 및 OXPS 문서를 JPGPNG 이미지 형식으로 변환해야 하는 시나리오가 있을 수 있습니다. 이를 위해 이 기사에서는 C++를 사용하여 XPS 및 OXPS 문서를 JPG 및 PNG 이미지 형식으로 변환하는 방법을 설명합니다.

XPS, OXPS 파일을 JPG 또는 PNG 형식으로 변환하기 위한 C++ API

Aspose.Page for C++는 XPS 및 PostScript 파일을 렌더링하고 조작하기 위한 C++ 라이브러리입니다. XPS 문서를 만들고 읽고 업데이트할 수 있습니다. 또한 API는 XPS 및 OXPS 문서를 JPG 및 PNG 이미지 형식으로 변환하는 것을 지원합니다. NuGet을 통해 API를 설치하거나 다운로드 섹션에서 직접 다운로드할 수 있습니다.

PM> Install-Package Aspose.Page.Cpp

XPS/OXPS 문서를 JPG 형식으로 변환

다음은 XPS 및 OXPS 문서를 JPG 형식으로 변환하는 단계입니다.

  • 소스 XPS/OXPS 파일로 스트림을 초기화합니다.
  • XPS/OXPS 스트림을 사용하여 XpsDocument 클래스의 인스턴스를 만듭니다.
  • JpegSaveOptions 클래스의 인스턴스를 만듭니다.
  • SmoothingModeResolution와 같은 옵션을 지정합니다.
  • ImageDevice 클래스의 인스턴스를 만듭니다.
  • [XpsDocument->Save(System::SharedPtr)를 사용하여 XPS/OXPS 문서를 ImageDevice에 저장합니다. 장치, 시스템::SharedPtr 옵션)]15 메서드.
  • 문서 파티션을 반복합니다.
  • 출력 스트림을 초기화하고 JPG 이미지를 저장합니다.

다음 샘플 코드는 C++를 사용하여 XPS/OXPS 문서를 JPG 형식으로 변환하는 방법을 보여줍니다.

// 입력 파일
System::String inputFileName = u"SourceDirectory\\sample.xps";
//결과물 파일 
System::String outputFileName = u"OutputDirectory\\XPStoImage_out.jpeg";
// XPS 입력 스트림 초기화
{
	System::SharedPtr<System::IO::Stream> xpsStream = System::IO::File::Open(inputFileName, System::IO::FileMode::Open, System::IO::FileAccess::Read);
	// 'using' 문에서 리소스 지우기
	System::Details::DisposeGuard<1> __dispose_guard_1({ xpsStream });
	// ------------------------------------------

	try
	{
		// 스트림에서 XPS 문서 로드
		System::SharedPtr<XpsDocument> document = System::MakeObject<XpsDocument>(xpsStream, System::MakeObject<XpsLoadOptions>());
		// 또는 파일에서 직접 XPS 문서를 로드합니다. 그러면 xpsStream이 필요하지 않습니다.
		// XpsDocument 문서 = new XpsDocument(inputFileName, new XpsLoadOptions());

		// 필요한 매개변수를 사용하여 JpegSaveOptions 개체를 초기화합니다.
		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; 
		}();

		// JPG 형식의 렌더링 장치 만들기
		System::SharedPtr<ImageDevice> device = System::MakeObject<ImageDevice>();

		document->Save(device, options);

		// 문서 파티션을 통해 반복(고정 문서, 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++)
			{
				// 이미지 출력 스트림 초기화
				{
					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);
					// '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());
	}
}
샘플 코드로 생성된 JPG 이미지

샘플 코드로 생성된 JPG 이미지

XPS/OXPS 문서를 PNG 형식으로 변환

다음은 XPS 및 OXPS 문서를 PNG 형식으로 변환하는 단계입니다.

  • 소스 XPS/OXPS 파일로 스트림을 초기화합니다.
  • XPS/OXPS 스트림을 사용하여 XpsDocument 클래스의 인스턴스를 만듭니다.
  • PngSaveOptions 클래스의 인스턴스를 만듭니다.
  • SmoothingModeResolution와 같은 옵션을 지정합니다.
  • ImageDevice 클래스의 인스턴스를 만듭니다.
  • [XpsDocument->Save(System::SharedPtr)를 사용하여 XPS/OXPS 문서를 ImageDevice에 저장합니다. 장치, 시스템::SharedPtr 옵션)]22 메서드.
  • 문서 파티션을 반복합니다.
  • 출력 스트림을 초기화하고 PNG 이미지를 저장합니다.

다음 샘플 코드는 C++를 사용하여 XPS/OXPS 문서를 PNG 형식으로 변환하는 방법을 보여줍니다.

// 입력 파일
System::String inputFileName = u"SourceDirectory\\sample.xps";
//결과물 파일 
System::String outputFileName = u"OutputDirectory\\XPStoImage_out.png";
// XPS 입력 스트림 초기화
{
	System::SharedPtr<System::IO::Stream> xpsStream = System::IO::File::Open(inputFileName, System::IO::FileMode::Open, System::IO::FileAccess::Read);
	// 'using' 문에서 리소스 지우기
	System::Details::DisposeGuard<1> __dispose_guard_1({ xpsStream });
	// ------------------------------------------

	try
	{
		// 스트림에서 XPS 문서 로드
		System::SharedPtr<XpsDocument> document = System::MakeObject<XpsDocument>(xpsStream, System::MakeObject<XpsLoadOptions>());
		// 또는 파일에서 직접 XPS 문서를 로드합니다. 그러면 xpsStream이 필요하지 않습니다.
		// XpsDocument 문서 = new XpsDocument(inputFileName, new XpsLoadOptions());

		// 필요한 매개변수를 사용하여 PngSaveOptions 개체를 초기화합니다.
		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; 
		}();

		// PNG 형식의 렌더링 장치 만들기
		System::SharedPtr<ImageDevice> device = System::MakeObject<ImageDevice>();

		document->Save(device, options);

		// 문서 파티션을 통해 반복(고정 문서, 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++)
			{
				// 이미지 출력 스트림 초기화
				{
					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);
					// '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());
	}
}
샘플 코드로 생성된 PNG 이미지

샘플 코드로 생성된 PNG 이미지

무료 라이선스 받기

무료 임시 라이선스를 요청하면 평가 제한 없이 API를 사용해 볼 수 있습니다.

결론

이 기사에서는 C++를 사용하여 XPS 및 OXPS 문서를 JPG 및 PNG 이미지 형식으로 변환하는 방법을 배웠습니다. 또한 Aspose.Page for C++ API는 사용할 수 있는 다양한 추가 형식을 제공합니다. 공식문서에서 API를 자세히 살펴볼 수 있다. 질문이 있는 경우 무료 지원 포럼을 통해 언제든지 문의하십시오.

또한보십시오