2012-05-12 31 views
9

Tôi đang tạo một công cụ để chuyển đổi pdf thành svg. Các tệp pdf này chứa dữ liệu đồ họa, bao gồm các bitmap lớn ở mức 300 dpi và một loạt các vectơ. Poking xung quanh here on stackoverflow, tôi đã tìm thấy pdf2svg, công cụ tuyệt vời - hoạt động như nét duyên dáng và dữ liệu vectơ là hoàn hảo. Nhưng có vẻ như các bitmap bị hạ xuống 72dpi. Kích thước vẫn là 8x10 inch, nhưng bạn có thể biết rằng dpi không đúng khi bạn phóng to. Soft có nghĩa là các giá trị mặc định sẽ giả định 72 dpi, nhưng tôi cần hình ảnh bitmap có độ phân giải đầy đủ.chuyển đổi pdf với bitmap 300dpi thành svg

pdf2svg sử dụng poppler và cairo để thực hiện chuyển đổi. Tôi đã poked xung quanh trong mã, và tôi thấy nơi nó tạo ra một trang poppler và một bề mặt cairo, và tôi đã thấy trong documentation rằng một trang poppler có một khái niệm "quy mô" có vẻ có liên quan, nhưng tôi có thể ' Tôi đã thử (thử nghiệm) hardcoding chiều cao và chiều rộng thông qua vào cairo_svg_surface_create với các giá trị chính xác, nhưng nó làm cho các kích thước áp dụng cho toàn bộ svg lớn hơn, mà không ảnh hưởng đến bitmap nhúng.

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); 

Tôi không nghĩ rằng những gì tôi đang cố gắng làm là rất bí truyền, vì vậy tôi hy vọng ai đó có kinh nghiệm với các thư viện sẽ thấy lỗi của tôi ngay lập tức. Bất kỳ trợ giúp, tất nhiên, sẽ được vô cùng đánh giá cao.

+1

Great câu hỏi, tôi hy vọng bạn sẽ có được một câu trả lời tốt. – jimw

Trả lời

0

Có cairo_surface_set_fallback_resolution() có lẽ hữu ích không? (Không, tôi thậm chí không chắc chắn về điều này bản thân mình)

4

Tôi vừa thực hiện thay đổi đối với nguồn như được mô tả trong http://lists.freedesktop.org/archives/poppler/2011-December/008451.html và nó hoạt động hoàn hảo - hình ảnh dường như ở độ phân giải gốc của chúng.

Thay

poppler_page_render(page, drawcontext); 

với

poppler_page_render_for_printing(page, drawcontext);