2009-04-15 4 views
1

Für Windows XP/Windows Server 2003Print EMF (WMF) von der Befehlszeile mit shimgvw.dll

Ich versuche, eine EMF (oder WMF) Dateiformat auf den virtuellen Drucker „Microsoft XPS Document Writer drucken "Verwenden von Windows-Bild- und Fax-Viewer (shimgvw.dll) über die Befehlszeile. Ich möchte, dass das resultierende XPS im Vektorformat ist, wie das WMF/EMF ist.

Es funktioniert mit allen Bildformaten außer WMF und EMF. Der Dialog zum Speichern des XPS-Druckers wird angezeigt, aber die gespeicherte XPS-Datei ist leer.

Ich kann es tun, wenn ich die WMF laden und klicken Sie auf Datei> Drucken von der Windows Picture und FaxViewer GUI, aber nicht von der Befehlszeile. Auch wenn ich mit der rechten Maustaste auf die WMF-Datei im Windows Explorer klicke und auf Drucken klicke, wird die ausgewählte WMF-Datei nicht zum Drucken freigegeben (WMF- und EMF-Dateien werden aus der Liste gefiltert).

Code:
ProcessStartInfo info = new ProcessStartInfo();
info.FileName = @"C:\WINDOWS\System32\rundll32.exe";
info.Arguments = @"C:\WINDOWS\System32\shimgvw.dll,ImageView_PrintTo /pt ""c:\vectorImage.emf"" ""Microsoft XPS Document Writer""";
Process.Start(info);

Ich habe viel über die WMF las eine Weile nutzen und kann nur annehmen, dass die direkte Drucken dieser Dateien entfernt worden ist? Aber wenn ich diese WMF-Dateien von der GUI aus drucken kann, sehe ich nicht, wie der Exploit vermieden wurde.

Ich möchte eine XPS-Vektordatei aus einer WMF/EMF-Datei programmatisch ohne Benutzerinteraktion erstellen. Ich könnte mir vorstellen, dass ich das tun könnte, weil alle beteiligten Formate zu Microsoft gehören.

Antwort

0

Werfen Sie einen Blick auf das folgende Beispiel in C, wie GDI in einem XPS-Dokument-Befehle zu erhalten: http://blogs.msdn.com/fyuan/archive/2005/09/16/469076.aspx

Was Sie tun möchten, ist der Drucker DC erstellen, StartDoc rufen, rufen Startpage, dann Setup Die Ansichtsfenster- und Fensterskala zum Platzieren der EMK, rufen Sie PlayEnhMetaFile(), EndPage, EndDoc auf.

Der Trick, den Feng Yuan präsentiert, ist die Verwendung des DocInfo-Arguments für StartDoc, um den XPS-Ausgabedateinamen anzugeben, und ich schlage vor, dass Sie den Metadateiinhalt in den Drucker-DC wiedergeben.

Ich glaube, der EMF-Exploit wurde vor einer Weile von Microsoft Update geschlossen. Das Problem, das Sie wahrscheinlich sehen werden, liegt daran, dass die GDI- und XPS-Druckpfade getrennt sind und es an Bemühungen fehlt, sie in diesem Fall zu überbrücken.

-Jason