【问题标题】:How to print SVG file with C# to get not bitmap but vector image on printout?如何使用 C# 打印 SVG 文件以在打印输出时获得不是位图而是矢量图像?
【发布时间】:2014-10-21 02:04:41
【问题描述】:

我成功地为我的应用程序添加了显示和打印 svg 的功能,以实现我使用的 https://github.com/vvvv/SVG。库从提供的 SVG 文件渲染位图,就编辑而言,这没问题。当涉及到打印时,问题就开始了。使用 PrintDocument 组件将文件打印到虚拟 PDF 打印机,当发送到打印的文本平滑时,svg 元素是位图,我想从 svg 提供的“高质量”外观中受益。有什么方法可以直接将 SVG 发送到打印页面而不将其转换为位图?

【问题讨论】:

    标签: c# svg printing


    【解决方案1】:

    一种可能性:当您开始打印时,将 SVG 重新渲染为仅用于打印作业的新位图,其中位图大小考虑了作业的实际打印分辨率。也就是说,如果您以 300 dpi 打印并希望 SVG 在 2x2 英寸正方形的区域中打印(例如),则位图将是 600x600 位图,而不是您用于屏幕显示的任何位图。

    请注意,这意味着您的 PDF 将包含高分辨率位图,使其更大。这解决了质量问题,但以文件大小为代价。

    如果没有平台 API 将 SVG 实际绘制到用于打印作业的 Graphics 实例(我不知道),那么将 SVG 数据保持为矢量格式会更加困难。

    也就是说,我没有仔细查看您正在使用的库,但如果它使用 Windows API 渲染为位图,这意味着可能存在 HDC(本机 Win32)或图形 (.NET) 实例被吸引。您可以为 HDC 或 Graphics 对象使用元文件而不是位图,这将保留渲染的矢量性质,而当您将其渲染到 PDF 打印机驱动程序时,可能会被保留(届时,一切都取决于 PDF 打印机驱动程序,这是您无法控制的)。

    【讨论】:

    • 是的,我没想到,这不是完美的解决方案,但现在应该可以了,我也认为 iTextSharp 库是一种解决方案,但它需要我做更多的工作跨度>
    猜你喜欢
    • 1970-01-01
    • 2014-07-22
    • 1970-01-01
    • 1970-01-01
    • 2013-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多