Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF矢量打印-将DrawingGroup作为矢量发送到打印机_Wpf_Xaml_Vector_Printing_Raster - Fatal编程技术网

WPF矢量打印-将DrawingGroup作为矢量发送到打印机

WPF矢量打印-将DrawingGroup作为矢量发送到打印机,wpf,xaml,vector,printing,raster,Wpf,Xaml,Vector,Printing,Raster,我想使用WPF以编程方式打印。但是,我需要所有的材料都以矢量图形而不是光栅图形的形式发送到打印机 主要问题是,我不能让WPF打印矢量图形,打印总是光栅化 我使用,它将.svg文件转换为am.xaml绘图组。然后将该图形组插入到一个图像到一个flowdocument中,最后我使用XPSDocumentWriter发送该flowdocument进行打印 每次都很模糊。我将打印与从adobe Illustrator打印的.svg文件进行比较。昼夜品质 是否有任何方法可以将一个图形组作为矢量打印 我要悬

我想使用WPF以编程方式打印。但是,我需要所有的材料都以矢量图形而不是光栅图形的形式发送到打印机

主要问题是,我不能让WPF打印矢量图形,打印总是光栅化

我使用,它将.svg文件转换为am.xaml绘图组。然后将该图形组插入到一个图像到一个flowdocument中,最后我使用XPSDocumentWriter发送该flowdocument进行打印

每次都很模糊。我将打印与从adobe Illustrator打印的.svg文件进行比较。昼夜品质

是否有任何方法可以将一个图形组作为矢量打印

我要悬赏。您必须提交将以下图形组作为矢量图形发送到打印机所需的c#代码,这必须是可复制的,才能获得赏金。此外,在图像光栅化后简单地增加DPI也不符合答案。没有矢量打印-没有悬赏

是的,你可以!;-) 我想你最好忘了图像,用固定的文件

首先创建一个类,覆盖OnRender:

public partial class MapDrawingElement : FrameworkElement
{
    public MapDrawingElement()
    {
        InitializeComponent();
    }
    protected override void OnRender(DrawingContext drawingContext)
    {
        base.OnRender(drawingContext);
        var res = Resources["drawingGroup1"] as DrawingGroup;
        if (res != null)
            drawingContext.DrawDrawing(res);
    }
}
该类在其资源部分中具有drawingGroup1资源:

<FrameworkElement x:Class="DemoFixedpageDocument.MapDrawingElement"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="800" d:DesignWidth="800">
    <FrameworkElement.Resources>
        <DrawingGroup x:Key="drawingGroup1">
... here your xaml 16k lines ! ...
        </DrawingGroup>
    </FrameworkElement.Resources>
</FrameworkElement>
然后您可以打印:

    PrintDocumentImageableArea imageArea = null;
    XpsDocumentWriter xpsdw = PrintQueue.CreateXpsDocumentWriter(ref imageArea);
    if (xpsdw != null)
    {
        xpsdw.Write(DocumentMaker.GenerateFixedDocument());
    }
您还可以打印预览或发送到XPS文件

请参见链接中的工作演示:


关于

看起来这在6年前就已经是一个问题了:-所以也许你最好使用svg到GDI库,比如?我在这些库中没有看到任何将svg作为矢量发送到打印的东西。它们都是帮助在显示器上渲染的工具,但不是打印工具。我认为GDI只是光栅图形。
    PrintDocumentImageableArea imageArea = null;
    XpsDocumentWriter xpsdw = PrintQueue.CreateXpsDocumentWriter(ref imageArea);
    if (xpsdw != null)
    {
        xpsdw.Write(DocumentMaker.GenerateFixedDocument());
    }