2012-04-10 29 views
1

我有一個WPF應用程序需要將預先生成的EMF文件發送到指定的打印機/托盤。將EMF文件發送到WPF應用程序中的特定打印機/托盤

我不想顯示PrintDialog;實際的打印機/托盤是事先配置好的。我也不需要實際查看EMF文件;而只是將其發送給打印機。

到目前爲止,我所有的R & D已經導致了一堆處理EMF和WPF的5年的帖子,以及它如何不被支持。

以前有人有過這樣的幸運嗎?有人能指引我朝着正確的方向嗎?

回答

0

原來,這比我想象的要容易。你可以通過一個Image控制器,並使用一個轉換器。本示例將emf文件的文件位置,並將其放入一個WPF用戶控件,然後發送給打印機。

在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(); 
    } 
} 
相關問題