Tài liệu XPS và OXPS 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 JPG và PNG. Để đạ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
- Chuyển đổi tài liệu XPS / OXPS sang định dạng JPG
- Chuyển đổi tài liệu XPS / OXPS sang định dạng PNG
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.
- Khởi tạo luồng bằng tệp XPS / OXPS nguồn.
- Tạo một phiên bản của lớp XpsDocument bằng luồng XPS / OXPS.
- Tạo một phiên bản của lớp JpegSaveOptions.
- Chỉ định các tùy chọn như SmoothingMode và Resolution.
- Tạo một thể hiện của lớp ImageDevice.
- Lưu tài liệu XPS / OXPS vào ImageDevice bằng cách sử dụng XpsDocument-> Save (System :: SharedPtr thiết bị, Hệ thống :: SharedPtr tùy chọn) phương pháp.
- Lặp lại các phân vùng tài liệu.
- Khởi tạo luồng đầu ra và lưu ảnh 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());
}
}
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.
- Khởi tạo luồng bằng tệp XPS / OXPS nguồn.
- Tạo một phiên bản của lớp XpsDocument bằng luồng XPS / OXPS.
- Tạo một phiên bản của lớp PngSaveOptions.
- Chỉ định các tùy chọn như SmoothingMode và Resolution.
- Tạo một thể hiện của lớp ImageDevice.
- Lưu tài liệu XPS / OXPS vào ImageDevice bằng cách sử dụng XpsDocument-> Save (System :: SharedPtr thiết bị, Hệ thống :: SharedPtr tùy chọn) phương pháp.
- Lặp lại các phân vùng tài liệu.
- Khởi tạo luồng đầu ra và lưu hình ảnh 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());
}
}
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.