2012-04-10 2 views
1

미리 생성 된 EMF 파일을 지정된 프린터/트레이로 보내야하는 WPF 응용 프로그램이 있습니다.WPF 응용 프로그램의 특정 프린터/트레이에 EMF 파일 보내기

PrintDialog를 표시하고 싶지 않습니다. 실제 프린터/트레이는 수동으로 구성됩니다. EMF 파일을 실제로 볼 필요도 없습니다. 대신 프린터로 보냅니다.

지금까지이 모든 나의 R & D는 EMF와 WPF를 다루는 5 년 된 게시물과 그것이 지원되지 않는 게시물의 무리입니다.

누구도 이전에이 행운이 있었나요? 누군가 올바른 방향으로 나를 가리킬 수 있습니까?

답변

0

이것은 내가 생각했던 것보다 쉬웠다. Image 컨트롤을 사용하고 변환기를 사용할 수 있습니다. 이 예제에서는 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(); 
    } 
}