您好,我正在使用Aspose.words C++ linux 20.10, 将words保存成jpg的功能,但是我不想生成文件,想用内存数组去存数据,然后将数据进行base64转换。现在该如何将System::IO::MemoryStream转成vector呢?部分代码如下
auto doc1 = System::MakeObject(System::String("./2pages.docx"));
auto options = System::MakeObject<Aspose::Words::Saving::ImageSaveOptions>(Aspose::Words::SaveFormat::Jpeg);
options->set_PageCount(1);
// Save each page of the document as Jpeg.
std::cout << "page: " << doc1->get_PageCount() << std::endl;
for (int i = 0; i < doc1->get_PageCount(); i++)
{
options->set_PageIndex(i);
auto dstStream = System::MakeObject<System::IO::MemoryStream>();
std::string dest;
doc1->Save(dstStream, options);
base64_encode(dstStream->ToArray(),dest);
}
@pangchendong,
我们已将您的要求记录在我们的问题跟踪系统中。 您的票号是WORDSCPP-1032。 我们将进一步调查此要求的详细信息,并让您随时了解链接问题的状态。
@pangchendong,
有两种方法可以实现此目的:
1 MemoryStream::ToArray()
- 它创建内存流内部缓冲区的副本:
auto buffer = dstStream->ToArray();
base64_encode(buffer->data(), dest);
2 MemoryStream::GetBuffer()
- 它返回对内存流内部缓冲区的引用,但返回的缓冲区大于实际内存流内容。
auto internal_buffer = dstStream->GetBuffer();
base64_encode(internal_buffer->data(), dstStream->get_Length(), dest);
第一种解决方案更易于使用,但是会消耗更多的内存(它会分配其他向量)。
非常感谢,我用第一种方法解决了问题。但在项目中对aspose库的使用比较困难。例如我要把一个图片的vector数组转成aspose的document类型,必须先将vector转化为aspose的流类型,才能转化为document类型。而这文档是没有对应的例子。还有一个问题,aspose 20.10是用C++哪个标准实现的,c++11或者更新的标准,这个关乎到我的项目是否兼容的问题。
@pangchendong,
Aspose.Words for C ++使用C ++ 14标准,因为它取决于在C ++ 11中不起作用的模板功能。
你好,我在使用c++库的时候,存在内存泄露,但是我不确定是库的问题,还是我忘记调用aspose的释放内存的接口了。能否告知我没有调用哪个接口? 代码如下
startTime = clock();
apply_license_from_file();
endTime = clock();
base64_string_vec.clear();
std::cout << "the size of vec: " << base64_string_vec.size() << std::endl;
std::cout << "apply_license cost: " << (double)(endTime-startTime)/CLOCKS_PER_SEC << "s" << std::endl;
startTime = clock();
System::ArrayPtr<uint8_t> Bytes = System::MakeArray<uint8_t>(word_body);
auto byteStream = System::MakeObject<System::IO::MemoryStream>(Bytes);
auto doc = System::MakeObject<Document>(byteStream);
byteStream->Close();
auto options = System::MakeObject<Aspose::Words::Saving::ImageSaveOptions>(Aspose::Words::SaveFormat::Jpeg);
auto dstStream = System::MakeObject<System::IO::MemoryStream>();
options->set_PageCount(1);
options->set_Resolution(resolution);
for (int i = 0; i < doc->get_PageCount(); i++)
{
options->set_PageIndex(i);
std::string dest;
doc->Save(dstStream, options);
base64_encode(dstStream->ToArray()->data(),dest);
//doc->Save(System::String("./des/" + std::to_string(i) + ".jpg"), options);
base64_string_vec.push_back(dest);
}
dstStream->Close();
endTime = clock();
std::cout << "buf to jpg to base64 cost: " << (double)(endTime-startTime)/CLOCKS_PER_SEC << "s" << std::endl;
return 0;
@pangchendong,
请ZIP并将您输入的Word文档(您遇到此问题)上传到此处进行测试。 然后,我们将对此进行调查,并为您提供更多信息。
Here is the demo with source code.
链接: https://pan.baidu.com/s/1pbFvLnPRHYAm8tqR_lh04w
提取码: qi8k 复制这段内容后打开百度网盘手机App,操作更方便哦
Sorry, pls follow this link 链接: https://pan.baidu.com/s/1X9S8O-BgVw3pkxuOtxm9hQ
提取码: v4hg 复制这段内容后打开百度网盘手机App,操作更方便哦
@pangchendong,
恐怕您共享的两个链接都无法正常工作。 我们无法找到/下载您共享的文件。 请查看以下屏幕截图。404 error.png (17.8 KB)
您可以将文档压缩并附加到该论坛中。 如果您的.zip文件大小大于此论坛中的附件限制,则可以将ZIP文件上传到Dropbox或Google驱动器或任何其他文件托管服务,并在此处共享下载链接进行测试。
我把代码放在gitlab上了,这是链接地址https://gitlab.com/chendong.pang/demo_aspose_test
@pangchendong,
我们已在问题跟踪系统中记录了此问题。 您的票号是WORDSCPP-1035。 我们将进一步调查该问题的详细信息,并将使您随时了解链接问题的状态。 很抱歉给您带来不便。
@pangchendong,
不幸的是,WORDSCPP-1035尚未解决。 此问题当前正在等待分析,正在排队。 目前没有估算值。 在以后的Aspose.Words for C ++版本中解决此问题后,我们会通过此论坛线程通知您。 对于给您带来的不便,我们深表歉意。
The issue you have found earlier (filed as WORDSCPP-1032) have been fixed in this Aspose.Words for C++ 20.11 update.