Printing 使用SHIMGVW.DLL从命令行打印EMF(WMF)

Printing 使用SHIMGVW.DLL从命令行打印EMF(WMF),printing,vector,xps,.emf,wmf,Printing,Vector,Xps,.emf,Wmf,适用于Windows XP/Windows Server 2003 我正在尝试从命令行使用Windows图片和传真查看器(shimgvw.dll)将EMF(或WMF)文件格式打印到虚拟打印机“Microsoft XPS Document Writer”。我希望生成的XPS是矢量格式,就像WMF/EMF一样 它适用于除WMF和EMF之外的所有图像格式。XPS打印机保存对话框出现,但保存的XPS文件为空 如果我加载WMF并从Windows Picture and FaxViewer GUI中单击“文

适用于Windows XP/Windows Server 2003

我正在尝试从命令行使用Windows图片和传真查看器(shimgvw.dll)将EMF(或WMF)文件格式打印到虚拟打印机“Microsoft XPS Document Writer”。我希望生成的XPS是矢量格式,就像WMF/EMF一样

它适用于除WMF和EMF之外的所有图像格式。XPS打印机保存对话框出现,但保存的XPS文件为空

如果我加载WMF并从Windows Picture and FaxViewer GUI中单击“文件”>“打印”,而不是从命令行,我就可以这样做。另外,如果我在Windows资源管理器中右键单击WMF文件并单击“打印”,则将不允许打印所选的WMF文件(它会从列表中过滤WMF和EMF文件)

代码:

ProcessStartInfo=newProcessStartInfo()
info.FileName=@“C:\WINDOWS\System32\rundll32.exe”
info.Arguments=@“C:\WINDOWS\System32\shimgvw.dll,ImageView_PrintTo/pt”“C:\vectorImage.emf”“Microsoft XPS Document Writer”“
进程启动(信息);

我以前读过很多关于WMF漏洞的文章,我只能假设这些文件的直接打印已经被删除了?但是,如果我可以从GUI打印这些WMF文件,那么我看不出如何避免利用该漏洞


我想做的是从WMF/EMF文件以编程方式创建XPS矢量文件,无需用户交互。我想我应该能够做到这一点,因为所有涉及的格式都属于Microsoft

看看C中的以下示例,了解如何将GDI命令放入XPS文档中:

您要做的是创建打印机DC,调用StartDoc,调用StartPage,然后设置用于放置emf的视口和窗口比例,调用PlayenMetaFile(),EndPage,EndDoc

冯媛介绍的技巧是使用DocInfo参数StartDoc指定输出XPS文件名,我建议您将图元文件内容播放到打印机DC中

我相信EMF漏洞在不久前被Microsoft Update关闭。您可能看到的问题是由于GDI和XPS打印路径是分开的,并且在这种情况下没有努力将它们连接起来

-杰森