9

我正在创建一个将 pdf 转换为 svg 的工具。这些 pdf 包含图形数据,包括 300 dpi 的大位图和一堆矢量。在 stackoverflow 上四处寻找,我发现pdf2svg非常棒——就像一个魅力,矢量数据是完美的。但看起来位图正在缩小到 72dpi。尺寸仍然是 8x10 英寸,但是当您放大时可以看出 dpi 不正确。默认值假定为 72 dpi 是有道理的,但我需要全分辨率位图图像。

pdf2svg 使用 poppler 和 cairo 进行转换。我在代码中四处寻找,我看到它在哪里创建了一个 poppler 页面和一个 cairo 表面,我在文档中看到一个 poppler 页面有一个看起来相关的“比例”概念,但我可以'不知道在哪里插入它。我尝试(实验性地)将传入的高度和宽度硬编码为cairo_svg_surface_create正确的值,但它使应用于整个 svg 的尺寸更大,而不会影响嵌入的位图。

poppler_page_get_size (page, &width, &height);

// Open the SVG file
surface = cairo_svg_surface_create(svgFilename, width, height);
drawcontext = cairo_create(surface);

// Render the PDF file into the SVG file
poppler_page_render(page, drawcontext);
cairo_show_page(drawcontext);

我不认为我想做的事情很深奥,所以我希望有图书馆经验的人能马上看到我的错误。当然,任何帮助都将不胜感激。

4

2 回答 2

4

我刚刚按照http://lists.freedesktop.org/archives/poppler/2011-December/008451.html中的描述对源进行了更改,并且效果很好 - 图像似乎是它们的原始分辨率。

代替

poppler_page_render(page, drawcontext);

poppler_page_render_for_printing(page, drawcontext);
于 2012-06-13T17:58:44.907 回答
0

cairo_surface_set_fallback_resolution() 可能有帮助吗?(不,我自己也不确定)

于 2012-05-12T07:53:32.497 回答