caozhy大师进

bsnry 2012-12-20 05:07:28
我搞mfc的,第一次来这个板块发帖,是看到你回复别人虚拟打印技术的问题。所以特来请教。

希望 朋友们 回帖以需求为主。 因为发过不少帖子了,很多人都不理解我提出的需求。 回复的答案没有解决问题。
谢谢了啊。 呵呵

需求:

启动我们的软件,打开一个选择文件对话框,选择文件的类型是word, ppt, excel, pdf这四种。

选择后,则把选择的文件 转换为图片,存到磁盘里。

转换工作室后台进行,不能让用户看到。所以有的人说,你安装一个虚拟打印机,然后你使用这个软件不就行了。

诸如此类答案,我觉得 违背需求, 我们一旦在自己的程序里选择要打开的目标文件后,后台就开始转换了。 而不是去使用 虚打印机这个软件。


初步想法:微软既然没有提供虚拟打印接口,只有使用第三方了。 目前我没有找到。

我已经使用com把这些可以转换图片了,但是效果很差。

所以 公司让我是用虚拟打印。 据说这个东西涉及到驱动.


...全文
502 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingmax54212008 2012-12-25
  • 打赏
  • 举报
回复
office的调用COM组件 PDF的使用Acrobat COM
nonocast 2012-12-24
  • 打赏
  • 举报
回复
你这个代码的原始格式是什么?pdf?如果是pdf那么clipboard出来已经不是矢量的了,直接把clipboard save成bitmap即可,通过xps不会有任何质量的提升,xps只是针对word,excel,ppt自家的,而且C++做xps也会很麻烦,canvas什么都是WPF体系中
bsnry 2012-12-24
  • 打赏
  • 举报
回复
引用 19 楼 caozhy 的回复:
引用 16 楼 nonocast 的回复:word, ppt, excel, pdf这个4个应该没有技术难度啊,都提供了COM可以支持转换为图片,pdf最简单就是利用clipboard,但ppt saveas的时候需要注意一个注册表参数,HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\PowerPoint\Options下……
引用 16 楼 nonocast 的回复:
word, ppt, excel, pdf这个4个应该没有技术难度啊,都提供了COM可以支持转换为图片,pdf最简单就是利用clipboard,但ppt saveas的时候需要注意一个注册表参数,HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\PowerPoint\Options下增加ExportBitmapResolut……
我调用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 bmp CConvertEMFToBMP 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这个技术,似乎很少,而且我不太熟悉。 能否提供这方面的资料。
bsnry 2012-12-24
  • 打赏
  • 举报
回复
bsnry 2012-12-24
  • 打赏
  • 举报
回复
引用 24 楼 nonocast 的回复:
你这个代码的原始格式是什么?pdf?如果是pdf那么clipboard出来已经不是矢量的了,直接把clipboard save成bitmap即可,通过xps不会有任何质量的提升,xps只是针对word,excel,ppt自家的,而且C++做xps也会很麻烦,canvas什么都是WPF体系中
代码是针对word写的, 可以转化的。 采用的是word提供的com
hzexe 2012-12-23
  • 打赏
  • 举报
回复
sf.net有几个虚拟打印的东东。 xps并不是每个机器都装的, 如果客户机器没有装offce,不是白费了?
nonocast 2012-12-23
  • 打赏
  • 举报
回复
nonocast 2012-12-23
  • 打赏
  • 举报
回复
引用 18 楼 bsnry 的回复:
引用 16 楼 nonocast 的回复:word, ppt, excel, pdf这个4个应该没有技术难度啊,都提供了COM可以支持转换为图片,pdf最简单就是利用clipboard,但ppt saveas的时候需要注意一个注册表参数,HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\PowerPoint\Options下……
adobe acrobat, 需要license,上次看到论坛里有人总结了pdf读取方法可以找找
threenewbee 2012-12-23
  • 打赏
  • 举报
回复
引用 16 楼 nonocast 的回复:
word, ppt, excel, pdf这个4个应该没有技术难度啊,都提供了COM可以支持转换为图片,pdf最简单就是利用clipboard,但ppt saveas的时候需要注意一个注册表参数,HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\PowerPoint\Options下增加ExportBitmapResolut……
嗯,xps事实上就是一个好用的,可以静默运行的虚拟打印机。
bsnry 2012-12-23
  • 打赏
  • 举报
回复
引用 16 楼 nonocast 的回复:
word, ppt, excel, pdf这个4个应该没有技术难度啊,都提供了COM可以支持转换为图片,pdf最简单就是利用clipboard,但ppt saveas的时候需要注意一个注册表参数,HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\PowerPoint\Options下增加ExportBitmapResolut……
pdf是用那个公司提供的com? 微软是没有的。
bsnry 2012-12-23
  • 打赏
  • 举报
回复
引用 15 楼 caozhy 的回复:
一些虚拟打印机软件有自身的对话框(因为它们是通用软件,需要用户设置参数),但是如果你能自己实现一个,你就能自己控制了。
虚拟打印软件众多,那么你推荐我那一款合适呢?或者说, 开发我这种功能的同行,他们是采用哪一款软件? 这个我真不知道。
nonocast 2012-12-23
  • 打赏
  • 举报
回复
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得到高分辨率,前提是矢量内容
threenewbee 2012-12-23
  • 打赏
  • 举报
回复
一些虚拟打印机软件有自身的对话框(因为它们是通用软件,需要用户设置参数),但是如果你能自己实现一个,你就能自己控制了。
threenewbee 2012-12-23
  • 打赏
  • 举报
回复
no 像word这样的软件,调用 /p 参数打印不会出现打印设置对话框。
bsnry 2012-12-23
  • 打赏
  • 举报
回复
引用 12 楼 caozhy 的回复:
一旦在自己的程序里选择要打开的目标文件后 你调用类似 Process.Start("winword.exe /p " + yourdocument); 执行后台的转换。 虚拟打印机有很多,但是免费开源的不太好找,这里有一个,你看看 http://sourceforge.net/projects/posterprinter/files/ C++写的。 ……
你提供了2个方案, 第一个是否是说: 是利用 下载的软件进行 打印。只不过发送命令的形式。 恕我直言,这个方案,怕是很受伤。 比如我们都去过打印店, 点击打印的时候,弹出一个对话框里进行设置一些参数, 即使你不设置也是要 点击确定的。 所以说,确实受伤。
threenewbee 2012-12-23
  • 打赏
  • 举报
回复
一旦在自己的程序里选择要打开的目标文件后 你调用类似 Process.Start("winword.exe /p " + yourdocument); 执行后台的转换。 虚拟打印机有很多,但是免费开源的不太好找,这里有一个,你看看 http://sourceforge.net/projects/posterprinter/files/ C++写的。
bsnry 2012-12-23
  • 打赏
  • 举报
回复
顶起来啊不要沉了
bsnry 2012-12-21
  • 打赏
  • 举报
回复
引用 3 楼 marclee44 的回复:
c#版word/excel/ppt/pdf/xps转图片我倒是刚做过,完全没用虚拟打印机,但是office文档用到了office提供的SaveAsPDFandXPS插件,和Adobe Acrobat X Pro提供的COM组件
已经下载了, 初步看了英文版的chm, 由于只提供了一个dll,按照c++调用dll的原理,想使用这个dll的一些类,那么就必须有头文件, 可惜没有并没有,只有dll,就意味着我无法使用。 我在chm看了,里面说c++也可以使用这个库,我觉得不太可能。
bsnry 2012-12-21
  • 打赏
  • 举报
回复
引用 7 楼 XinYaping 的回复:
打印成XPS文件。
拜托啊,我已经说了,后台转换,无论什么技术,选择文件后,就不能让用户去点击操作来转换,更不能弹出其他软件的对话框来, 作为用户,我觉得这么想也是合理的吧? 你说xps文件是什么东西, 请明示思路和原因。 寥寥数语,不能理解。
YapingXin 2012-12-20
  • 打赏
  • 举报
回复
打印成XPS文件。
加载更多回复(6)

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧