2012-04-10 3 views
1

Ich habe eine WPF-Anwendung, die vorgenerierte EMF-Dateien an einen bestimmten Drucker/Fach senden muss.Senden einer EMF-Datei an einen bestimmten Drucker/Fach in der WPF-Anwendung

Ich möchte den PrintDialog nicht anzeigen; Der tatsächliche Drucker/Fach ist vor der Hand konfiguriert. Ich muss die EMF-Datei auch nicht sehen; sondern senden Sie es einfach an den Drucker.

Bis jetzt, alle meine R & D in diese hat dazu geführt, ist eine Reihe von Posts, die 5 Jahre alt sind, Umgang mit EMF und WPF und wie es nicht unterstützt wird.

Hat jemand schon einmal Glück gehabt? Kann mir jemand in die richtige Richtung zeigen?

Antwort

0

Es stellte sich heraus, das war einfacher als ich dachte. Sie können dies über eine Image Steuerung und Verwendung eines Konverters tun. In diesem Beispiel wird der Speicherort der EMF-Datei genommen und in ein WPF-Benutzersteuerelement eingefügt, das ich dann an einen Drucker sende.

In XAML:

<Grid Margin="12"> 
    <Image Source="{Binding Path=FileName, Converter={StaticResource emfImageConverter}, Mode=OneWay}"></Image> 
</Grid> 

und Ihre Konverterklasse:

[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(); 
    } 
} 
Verwandte Themen