我正在创建一个将pdf转换为svg的工具。这些pdf包含图形数据,包括300 dpi的大位图和一堆矢量。在stackoverflow上闲逛,我发现了pdf2svg,它很棒 - 就像一个魅力,矢量数据是完美的。但看起来位图正在缩小到 72dpi。尺寸仍然是 8x10 英寸,但您可以说放大时 dpi 不正确。Soft of 有道理,默认值将假定为 72 dpi,但我需要全分辨率位图图像。
PDF2SVG使用Poppler和Cairo进行转换。我已经在代码中四处寻找,我看到它在哪里创建了一个poppler页面和一个cairo表面,我在文档中看到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);
我不认为我试图做的事情是非常深奥的,所以我希望有图书馆经验的人会立即看到我的错误。当然,任何帮助将不胜感激。
我刚刚按照 http://lists.freedesktop.org/archives/poppler/2011-December/008451.html 中所述对源进行了更改,并且效果很好 - 图像似乎处于原始分辨率。
取代
poppler_page_render(page, drawcontext);
跟
poppler_page_render_for_printing(page, drawcontext);
cairo_surface_set_fallback_resolution(( 可能会有所帮助吗?(不,我自己甚至不确定(