gpt4 book ai didi

c++ - MuPDF SVG 导出错误?

转载 作者:太空宇宙 更新时间:2023-11-04 11:30:15 26 4
gpt4 key购买 nike

我正在尝试使用 MuPDF 库将 PDF 文件导出为 SVG 数据。我为此任务编写了以下函数:

PDFIMPORT_DECLSPEC int PDFImport::createSVGDataStr( const std::string & filenamePDF, Buffer & outputBuffer, Feedback* fbck )
{
std::array<std::mutex, FZ_LOCK_MAX> mutexes;

fz_locks_context lockCtx;
lockCtx.user = mutexes.data();
lockCtx.lock = lock;
lockCtx.unlock = unlock;

fz_document* doc = nullptr;
fz_context* ctx = fz_new_context(NULL, &lockCtx, FZ_STORE_UNLIMITED);
fz_register_document_handler(ctx, &pdf_document_handler);
fz_try(ctx)
{
doc = fz_open_document(ctx, const_cast<char*>(filenamePDF.c_str()));
}
fz_catch(ctx)
{
fz_free_context(ctx);
return Error_OpenFile;
}

int pageCount = fz_count_pages(doc);
if (pageCount < 1)
return Error_Content;

fz_page* page = fz_load_page(doc, 0);

fz_rect brect;
fz_bound_page(doc, page, &brect);

fz_buffer* buffer = fz_new_buffer(ctx, 1024);
fz_output* output = fz_new_output_with_buffer(ctx, buffer);
fz_device* device = fz_new_svg_device(ctx, output, brect.x1 - brect.x0, brect.y1 - brect.y0);

fz_cookie* fc = reinterpret_cast<fz_cookie*>(fbck);
fz_run_page(doc, page, device, &fz_identity, fc);


fz_buffer_printf(ctx, buffer, "</svg>");

outputBuffer.data = buffer->data;
outputBuffer.length = buffer->len;

fz_free_device(device);
fz_close_output(output);
fz_free_page(doc, page);
fz_free_context(ctx);

return Error_None;
}



我发现,总是缺少一个封闭的 </svg>数据缓冲区末尾的标记。我用各种 PDF 文件和 MuPDF 1.3 和 1.5 测试了它,结果相同

所以,我的问题是:我做错了吗,或者 MuPDF SVG 设备中是否存在错误?有人对此有任何经验吗?
谢谢!

最佳答案

这不是错误!您必须先关闭设备。如果你不关闭它,它就不会添加 </svg>在文档的末尾。您也可以在没有缓冲区的情况下实例化输出。

fz_rect brect;
fz_bound_page(ctx, page, &brect);

fz_output* output = fz_new_output_with_path(ctx, "output.svg", 0);
fz_device* device = fz_new_svg_device(ctx, output, brect.x1 - brect.x0, brect.y1 - brect.y0, 0, 0);

fz_run_page_contents(ctx, page, device, &fz_identity, NULL);

fz_close_device(ctx, device);
fz_close_output(ctx, output);

fz_drop_output(ctx, output);

关于c++ - MuPDF SVG 导出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25038744/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com