2014-10-20 41 views
0

我成功地設法添加顯示和打印svg到我的應用程序的能力,以實現我已經使用https://github.com/vvvv/SVG。庫從提供的SVG文件中呈現位圖,就編輯而言,這是可以的。問題始於打印。文件打印PrintDocument組件到虛擬PDF打印機,當文本發送到打印是平穩的,svg元素是位圖,我想到的是從svg提供的「高質量」外觀獲益。有沒有辦法將SVG直接發送到打印頁面而不將其轉換爲位圖?如何使用C#打印SVG文件以獲取打印輸出中的位圖和矢量圖像?

回答

1

一種可能性:當您開始打印時,將SVG重新渲染爲僅用於打印作業的新位圖,其中位圖大小考慮作業的實際打印分辨率。也就是說,如果您以300 dpi打印並希望SVG在2 x 2平方英寸的區域內打印(例如),則位圖將爲600x600位圖,而不是您用於屏幕顯示的任何位圖。

請注意,這意味着您的PDF將包含高分辨率位圖,使其更大。這解決了質量問題,但是以文件大小爲代價。如果沒有一個實際將SVG繪製到Graphics實例的平臺API(我不知道),那麼將SVG數據保存爲矢量格式會更困難。這就是說,我沒有仔細看看你使用的庫,但是如果它使用Windows API渲染成位圖,那意味着可能有HDC(原生Win32)或Graphics(.NET)正在繪製的實例。您可以使用HDC或圖形對象的圖元文件而不是位圖,這將保留渲染的矢量性質,當您將它渲染到PDF打印機驅動程序時,它將保留(此時它將會完全取決於您無法控制的PDF打印機驅動程序)。

+0

是的,我沒有想到,它不是完美的解決方案,但它現在應該做,我也認爲iTextSharp庫作爲某種解決方案,但它會需要更多的工作從我 – MoreThanChaos 2014-10-21 14:03:03