需求:我需要实现给浏览器打印添加水印的效果
实现原理:通过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转换前的一样
尝试: