MuPDF SVG导出错误
MuPDF SVG export bug?
我试图导出PDF文件作为SVG数据,使用MuPDF库。我为这个任务写了一个下面的函数:
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设备中有bug ?有人有这方面的经验吗?
谢谢!
这不是一个bug!你得先关闭设备。如果不关闭它,则不会在文档末尾添加</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);
您可能会更好地将此报告为错误,我建议您到bugs.ghostscript.com并在那里报告。
相关文章:
- 分段错误当我试图运行程序时出错
- .h 和.cpp文件分离时出错,但仅使用 .h 文件时没有错误.我做错了什么?
- 创建 OpenCV 非自由版本 v4.3 时出错,可折叠.cpp错误 C2039、2605
- 制作时出错,C++"db.c:2127:错误:在"||"标记之前应使用";"
- C++语法错误,编译器不会警告或 int v = func(&v) 出错;
- 在VS2015中访问类成员时运行时错误,但在Linux上未访问时出错
- 如何更改路径以修复错误"./main:加载共享库 libmkl_core.so 时出错?
- 为什么在定义类之前声明类的对象会在友元类中给出错误,而在友元函数中不会出错
- 安装 mply 库时出错.致命错误:gsl/gsl_sf.h:没有这样的文件或目录
- Rcpp/C++/R:比较日期时间矢量与日期时间时出错(错误:"运算符>"的不明确重载)
- 编译特征程序时出错:错误:'seq'不是'Eigen'的成员
- 可能的 GCC 链接器错误会导致将弱符号和局部符号链接在一起时出错
- 非标准语法;使用 '&' 创建指向成员的指针错误,将成员函数分配给向量时出错
- 为 freebsd 11 编译 gcc4.8.5 时出错: 错误: 未知类型名称 'choke'
- 运算符重载时出错(错误:"运算符<<不匹配(操作数类型为"std::basic_ostream<char>"和"const char [2]")
- 我同时使用了莱布尼茨和瓦利斯公式来估算π但输出数字错误,我不知道我哪里出错了
- 显示错误消息框时出错.我该如何显示它
- 使用 swig 时出错:输入 (1) 中的语法错误
- 编译类 C++ 中的线程时出错(错误 xthread)
- 在 Visual Studio 2015 社区中消除错误时出错