我搞mfc的,第一次来这个板块发帖,是看到你回复别人虚拟打印技术的问题。所以特来请教。希望  朋友们  回帖以需求为主。 因为发过不少帖子了,很多人都不理解我提出的需求。 回复的答案没有解决问题。
 谢谢了啊。 呵呵需求:启动我们的软件,打开一个选择文件对话框,选择文件的类型是word, ppt, excel, pdf这四种。选择后,则把选择的文件 转换为图片,存到磁盘里。转换工作室后台进行,不能让用户看到。所以有的人说,你安装一个虚拟打印机,然后你使用这个软件不就行了。诸如此类答案,我觉得 违背需求, 我们一旦在自己的程序里选择要打开的目标文件后,后台就开始转换了。 而不是去使用 虚打印机这个软件。
初步想法:微软既然没有提供虚拟打印接口,只有使用第三方了。 目前我没有找到。我已经使用com把这些可以转换图片了,但是效果很差。所以 公司让我是用虚拟打印。 据说这个东西涉及到驱动.

解决方案 »

  1.   

    c#版word/excel/ppt/pdf/xps转图片我倒是刚做过,完全没用虚拟打印机,但是office文档用到了office提供的SaveAsPDFandXPS插件,和Adobe Acrobat X Pro提供的COM组件
      

  2.   

    推荐1个blog的2篇文章你看下吧
    http://blog.csdn.net/shi0090/article/details/7284428
    http://blog.csdn.net/shi0090/article/details/7262199
      

  3.   


    拜托啊,我已经说了,后台转换,无论什么技术,选择文件后,就不能让用户去点击操作来转换,更不能弹出其他软件的对话框来,作为用户,我觉得这么想也是合理的吧?你说xps文件是什么东西, 请明示思路和原因。寥寥数语,不能理解。
      

  4.   


    已经下载了,
    初步看了英文版的chm,
    由于只提供了一个dll,按照c++调用dll的原理,想使用这个dll的一些类,那么就必须有头文件,可惜没有并没有,只有dll,就意味着我无法使用。我在chm看了,里面说c++也可以使用这个库,我觉得不太可能。
      

  5.   

    一旦在自己的程序里选择要打开的目标文件后
    你调用类似 Process.Start("winword.exe /p " + yourdocument);
    执行后台的转换。虚拟打印机有很多,但是免费开源的不太好找,这里有一个,你看看
    http://sourceforge.net/projects/posterprinter/files/
    C++写的。
      

  6.   

    no
    像word这样的软件,调用 /p 参数打印不会出现打印设置对话框。
      

  7.   

    word, ppt, excel, pdf这个4个应该没有技术难度啊,都提供了COM可以支持转换为图片,pdf最简单就是利用clipboard,但ppt saveas的时候需要注意一个注册表参数,HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\PowerPoint\Options下增加ExportBitmapResolution,具体参考这里,另外对于word/excel分辨率要求比较高,建议通过COM saveas成xps,然后通过canvas重新measure/arrange得到高分辨率,前提是矢量内容
      

  8.   


    pdf是用那个公司提供的com?微软是没有的。
      

  9.   


    嗯,xps事实上就是一个好用的,可以静默运行的虚拟打印机。
      

  10.   


    adobe acrobat, 需要license,上次看到论坛里有人总结了pdf读取方法可以找找
      

  11.   

    http://nonocast.cn/pdfconverter/
      

  12.   

    sf.net有几个虚拟打印的东东。
    xps并不是每个机器都装的,
    如果客户机器没有装offce,不是白费了?
      

  13.   


    我调用com其实可以转成图片,图片质量太差,关键代码while (nFormat=EnumClipboardFormats(nFormat)){HANDLE hEmf = ::GetClipboardData(nFormat);if (hEmf){CString str,str2;j=i;str.Format("c:\\%d.xps", i++);str2.Format("c:\\%d.bmp",j);
    HBITMAP h = (HBITMAP)::CopyEnhMetaFile((HENHMETAFILE)hEmf, str);if (h){////emf to bmpCConvertEMFToBMP conv;
    if(!conv.ConvertEMFToBMP(str,str2,0)){::MessageBox(NULL,_T("emf to bmp failed!"),_T("提示"),MB_OK);}break;}}}你大概可以猜测,这是转换为emf ,然后再转换为bmp格式 。但是质量非常差,无奈,就按照你的说法,改成了xps,注意:str.Format("c:\\%d.xps", i++);这一句, 我已经从网上下载了 xps安装,
    结果发现,不能从预览*.xps文件。
    粗布原因分析:
    我没有用你说的canvas进行转换。所以导致错误。
    搜了一下,canvas这个技术,似乎很少,而且我不太熟悉。
    能否提供这方面的资料。
      

  14.   

    你这个代码的原始格式是什么?pdf?如果是pdf那么clipboard出来已经不是矢量的了,直接把clipboard save成bitmap即可,通过xps不会有任何质量的提升,xps只是针对word,excel,ppt自家的,而且C++做xps也会很麻烦,canvas什么都是WPF体系中
      

  15.   


    代码是针对word写的, 可以转化的。采用的是word提供的com
      

  16.   

     office的调用COM组件
     PDF的使用Acrobat COM