将pdf与300dpi位图转换为svg

时间:2012-05-12 01:07:43

标签: c pdf svg cairo poppler

我正在创建一个将pdf转换为svg的工具。这些pdf包含图形数据,包括300 dpi的大位图和一堆矢量。我在here on stackoverflow附近找到pdf2svg,这很棒 - 就像魅力一样,矢量数据非常完美。但看起来位图缩小到72dpi。尺寸仍然是8x10英寸,但是当你放大时你可以看出dpi是不对的。软的默认值是72 dpi,但我需要全分辨率的位图图像。

pdf2svg使用poppler和cairo进行转换。我已经在代码中找到了,我看到它在哪里创建了一个poppler页面和一个cairo表面,我在documentation中看到poppler页面有一个似乎相关的“scale”概念,但我无法弄清楚将它插入的位置。我尝试(通过实验)将传递到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);

我不认为我想做的事情是非常深奥的,所以我希望有图书馆经验的人能立刻看到我的错误。当然,任何帮助都会受到极大的赞赏。

2 个答案:

答案 0 :(得分:4)

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

替换

poppler_page_render(page, drawcontext);

poppler_page_render_for_printing(page, drawcontext);

答案 1 :(得分:0)

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