chromium内核浏览器hook添加打印水印尺寸异常

需求:我需要实现给浏览器打印添加水印的效果

实现原理:通过hook打印API Endpage,在调用Endpager前获取打印机HDC,并通过该HDC使用GDI+的DrawImage画出我需要的水印内容

出现问题:notepad,office,ie浏览器,火狐浏览器等进程都已经能按预期打印出期望的水印内容,位置和尺寸都符合,但是测试Chrome浏览器的时候,画出来的坐标和尺寸都被放大了好几倍,经过多个软件测试,发现chromium内核的浏览器都有这个问题,包括360浏览器,QQ浏览器,chrome浏览器。

测试用打印机:XPS

参考资料
https://www.codeproject.com/Articles/764057/GDI-Drawing-and-Printing 该文章描述了显示器和打印机DPI不同,所以若期望打印结果跟屏幕显示一样,则需要按照屏幕和打印机的比例对水印尺寸做处理,我按照文章描述对尺寸做处理后,notepad测试打印出来的尺寸效果是预期内的了,但是chrome打印出来的尺寸都是DPI转换前的一样

尝试

  1. IsProcessDPIAware导致?
    结果:经过测试,notepad和chrome返回都是TRUE。
  2. 获取HDC和HDC关联的Gdiplus::Graphics对象基础信息,对比notepad和chrome得到的属性是否一致(可能有遗漏)
    结果:一致,GetDpiX/Y、GetPageScale、GetPageUnit等怀疑影响画图大小的属性都对比过是一样的
  3. 我用的图片有问题?
    结果:没问题,改用API画图,chrome进程用DrawRectangle的画出来的结果也是大几倍