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
将EMF文件发送到WPF应用程序中的特定打印机/托盘_Wpf_Printing_.emf - Fatal编程技术网

将EMF文件发送到WPF应用程序中的特定打印机/托盘

将EMF文件发送到WPF应用程序中的特定打印机/托盘,wpf,printing,.emf,Wpf,Printing,.emf,我有一个WPF应用程序,需要将预生成的EMF文件发送到指定的打印机/托盘 我不想显示打印对话框;实际打印机/纸盘是在手动之前配置的。我也不需要实际查看EMF文件;而是直接把它送到打印机上 到目前为止,我在这方面的所有研发都导致了一堆5年前的帖子,它们都在讨论EMF和WPF,以及它是如何不受支持的 以前有人在这方面运气好吗?有人能给我指出正确的方向吗?事实证明这比我想象的要容易。您可以通过图像控件和使用转换器来执行此操作。本例获取emf文件的文件位置,并将其放入WPF usercontrol中,然

我有一个WPF应用程序,需要将预生成的EMF文件发送到指定的打印机/托盘

我不想显示打印对话框;实际打印机/纸盘是在手动之前配置的。我也不需要实际查看EMF文件;而是直接把它送到打印机上

到目前为止,我在这方面的所有研发都导致了一堆5年前的帖子,它们都在讨论EMF和WPF,以及它是如何不受支持的


以前有人在这方面运气好吗?有人能给我指出正确的方向吗?

事实证明这比我想象的要容易。您可以通过
图像
控件和使用转换器来执行此操作。本例获取emf文件的文件位置,并将其放入WPF usercontrol中,然后将其发送到打印机

在XAML中:

<Grid Margin="12">
    <Image Source="{Binding Path=FileName, Converter={StaticResource emfImageConverter}, Mode=OneWay}"></Image>
</Grid>
[ValueConversion(typeof(string), typeof(BitmapImage))]
public class EmfImageConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var fileName = (string)value;
        if (fileName == null || !File.Exists(fileName))
            return new BitmapImage();
        using (var stream = File.Open(fileName, FileMode.Open))
        {
            return GetImage(stream);
        }
    }

    internal BitmapImage GetImage(Stream fileStream)
    {
        var img = Image.FromStream(fileStream);
        var imgBrush = new BitmapImage { CacheOption = BitmapCacheOption.OnLoad, CreateOptions = BitmapCreateOptions.PreservePixelFormat };
        imgBrush.BeginInit();
        imgBrush.StreamSource = ConvertImageToMemoryStream(img);
        imgBrush.EndInit();
        return imgBrush;
    }

    public MemoryStream ConvertImageToMemoryStream(Image img)
    {
        var ms = new MemoryStream();
        img.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
        return ms;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}