当前位置: 首页 > news >正文

SOUI里实现打印预览续

之前写了一篇关于SOUI里实现打印预览的短文,为什么现在又有续呢,原因是之前实现的打印预览出现了水土不服,反复测试在我的环境没问题的实现在有高清分辨率显示器的环境下,出现打印预览显示不全的问题。为了说明问题,先来一段我实现打印的模板配置文件

<PrintTemplate name="A4_CUSTOMER_FOCUS" description="A4突出客户信息" paperWidth="2020" paperHeight="2890"><!-- 顶部品牌区 --><Item type="text" x="0" y="10" width="2020" height="-1" align="center" font="size:55,bold:1"><Content>{CompanyName}</Content></Item><Item type="text" x="0" y="90" width="2020" height="-1" align="center" font="size:30"><Content>{CompanyAddress} | {CompanyPhone}</Content></Item>

这里只有一小部分,其它部分基本一致,为了方便我的配置实现使用的mm单位,这样,很方便就可以通过配置来定义模板,因为使用MM就很直观。这样我就需要在代码里使用

// 0.1mm一个单位
dc.SetMapMode(MM_LOMETRIC);来实现,水土不服也就出现在这个代码上,因为我为了画出预览图,那么就需要知道确切的DPI这样才能计算出需要的内存DC大小,这里就分了两种情况,一是使用清单让系统知道我的程序支持DPI识别处理,还有就是不处理DPI,正常情况下的内存DC计算方式为

 SIZE sz = { dmPaperWidth * g_curPrintDpi.XDPI / 254, dmPaperHeight * g_curPrintDpi.YDPI / 254 };

其中DPI可以通过GetDeviceCaps(hdc,LOGPIXELSX)和GetDeviceCaps(hdc,LOGPIXELSY)来获取,对于不支持DPI识别的程序,那么它始终返回96,对于支持DPI的返回96*系统设置的缩放。水土不服的来源正源自此处,不管使用哪种方式获取,最后都是有问题的,先说不支持DPI识别的情况,如果放在高分率的显示上,很显然,同样宽度会有更多的点,这样计算出的内存DC大小就会小,不足以容纳内容。再说支持DPI识别的情况,如果是正常的使用系统推荐的缩放那么一般也可以得到比较准的计算,但是上面说的,在使用DPI识别的情况,API并没有正确返回屏的真实DPI,而MM_LOMETRIC的映射方式是基于真实DPI的,也就是如果系统推荐的是100%绽放,那系统设置了125%的缩放,最后计算的大小则会比需要的大,而且这个缩放完全是人为不可控的。总不能告诉别人,你用我的软件必须严格按系统推荐缩放使用吧(虽然系统推荐通常就是最佳的选择)。针对这个问题,我觉得大概有如下可行方式

方式一、获取系统推荐绽放然后和96计算得到它的最接近DPI,然后使用这个DPI来计算DC大小。(这个绘制代码基本不需要任何修改,但是我使用过搜索的AI都没有得到比较好的方法。按理说这个推荐应该在注册表里能找到,还没时间研究,有知道的佬告诉一下)

方式二、使用自定义映射,即使用SetWindowExtEx和SetViewportExtEx来实现,目前我使用这个方式来实现,其中nScale 是缩放系数,这样不仅可以不需要管系统DPI,并且可以自由实现缩放。

SetMapMode(MM_ANISOTROPIC);
SetWindowExtEx(hDC, 254, 254, NULL);
SetViewportExtEx(hDC, 96 * nScale / 100, 96 * nScale / 100, NULL);

这个方式需要注意它的坐标系Y的方向和MM_LOMETRIC是相反,尝试使用SetViewportExtEx(hDC, 96 * nScale / 100, -96 * nScale / 100, NULL);来 实现没有成功。文字输出完全不对。当然这个方式也不是完全没有问题正常输出 使用SetWindowExtEx后输出 可以看到中文和字母的间格是不对的,此外还有数字间距不知道如何解决目前。

目前先到这,有更好的解决方法再水一章

http://www.dtcms.com/a/471987.html

相关文章:

  • C++基础:(十)vector 类的基础使用
  • 网站内容架构wordpress无法创建目录
  • 专门做茶叶会的音乐网站浙江省住房和城乡建设厅官网
  • 网站搜索算法成都 网站建设培训
  • 济南网站建设公司按需定制比较好的前端网站
  • 网站开发类参考文献wordpress 主题 保存
  • 阿里网站建设需要准备什么软件京东网站设计特点
  • 源码网站怎么做快速生成网站
  • 燃气调压器故障诊断方案
  • 电子商务网站建设服务模式论文网络编程技术及应用
  • 老k频道网站入口营销公司网络检索
  • 网上银行建设银行株洲seo推广
  • 什么叫做线上销售汕头网站排名优化
  • 广州黄埔做网站公司用iis为公司做一个内部网站
  • 中国建设银行网站打不开网络营销外包团队
  • 如何获得更多高质量MAG?
  • le网站源码商城网站系统建设
  • 2003访问网站提示输入用户名密码使用jquery的网站
  • 嘉兴市南湖区城乡规划建设局网站花店网站建设论文
  • 仿卢松松博客网站源码seo方案书案例
  • 深圳电商网站开发公司网络营销策略相关理论
  • 在pc端网站基础上做移动端网站建设带有注册账号
  • 团购网站轻量应用服务器做网站
  • 网站建设公司 合肥仿做唯品会网站
  • 古蔺网站建设济南网站优化技术厂家
  • jsp网站怎么做的好看新建的网站需要维护吗
  • 网站建设企业资质等级做网站建设公司排名
  • 怎样做浏览的网站不被发现望野眼上海话
  • 湖南专业做网站企业在电脑制作手机网站用什么软件
  • 陆良建设局网站app界面设计案例分析