适用于 Windows XP / Windows Server 2003
我正在尝试从命令行使用 Windows 图片和传真查看器 (shimgvw.dll) 将 EMF(或 WMF)文件格式打印到虚拟打印机“Microsoft XPS Document Writer”。我希望生成的 XPS 是矢量格式,就像 WMF/EMF 一样。
它适用于除 WMF 和 EMF 之外的所有图像格式。XPS 打印机保存对话框出现,但保存的 XPS 文件为空。
如果我加载 WMF 并从 Windows 图片和 FaxViewer GUI(而不是从命令行)单击文件>打印,我可以做到这一点。此外,如果我在 Windows 资源管理器中右键单击 WMF 文件并单击“打印”,它将不允许打印所选的 WMF 文件(它会将 WMF 和 EMF 文件从列表中过滤掉)。
代码:
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);
不久前我读过很多关于 WMF 漏洞利用的文章,只能假设这些文件的直接打印已被删除?但是,如果我可以从 GUI 打印这些 WMF 文件,那么我看不到如何避免利用。
我想要做的是以编程方式从 WMF/EMF 文件创建 XPS 矢量文件,无需用户交互。我想我应该能够做到这一点,因为所涉及的所有格式都属于微软。