2012-05-12 4 views
9

Я создаю инструмент для преобразования pdf в svg. Эти pdf-файлы содержат графические данные, включая большие растровые изображения с разрешением 300 точек на дюйм и множество векторов. Сотрясающ here on stackoverflow, я нашел pdf2svg, который отлично работает как шарм, и векторные данные совершенны. Но похоже, что растровые изображения уменьшаются до 72 точек на дюйм. Размеры по-прежнему составляют 8x10 дюймов, но вы можете сказать, что при приближении увеличить значение dpi не соответствует. Мягкое значение имеет смысл, что значения по умолчанию будут использовать 72 dpi, но мне нужны растровые изображения с полным разрешением.конвертировать pdf с растровыми изображениями 300dpi в svg

pdf2svg использует poppler и cairo для преобразования. Я искал код, и я вижу, где он создает страницу с poppler и поверхность cairo, и я видел в documentation, что на странице Poppler есть понятие «масштаб», которое кажется актуальным, но я могу " t выяснить, где его подключить. Я попытался (экспериментально) жестко кодировать высоту и ширину, прошедшие в 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); 

Я не думаю, что я пытаюсь сделать, это очень эзотерический, поэтому я надеюсь, что кто-то, кто имеет опыт работы с библиотеками будут видеть свою ошибку сразу. Любая помощь, конечно, была бы очень оценена.

+1

Большой вопрос, я надеюсь, что вы получите хороший ответ. – jimw

ответ

0

Может ли помочь cairo_surface_set_fallback_resolution()? (Нет, я даже не уверен в этом сам)

4

Я только что внес изменения в источник, как описано в http://lists.freedesktop.org/archives/poppler/2011-December/008451.html, и он отлично работал - изображения, похоже, находятся в их собственном разрешении.

Заменить

poppler_page_render(page, drawcontext); 

с

poppler_page_render_for_printing(page, drawcontext);