我试图在一些与打印相关的旧代码中找到一些意义。
将表单绘制到打印机时,每个大小和位置属性都会乘以比例因子。该因子通过以下代码计算:
{ Printer device-specific information }
FXScale := (GetDeviceCaps(Printer.Handle, LOGPIXELSX)/96) -
((2-(GetDeviceCaps(Printer.Handle, HORZRES)*2) /
GetDeviceCaps(Printer.Handle, PHYSICALWIDTH)));
FYScale := (GetDeviceCaps(Printer.Handle, LOGPIXELSY)/96) -
((2-(GetDeviceCaps(Printer.Handle, VERTRES)*2) /
GetDeviceCaps(Printer.Handle, PHYSICALHEIGHT)));
有谁能解释这里发生了什么?我猜屏幕分辨率和打印机分辨率之间存在一些映射,但其余的呢?为什么选择2?
答案 0 :(得分:3)
好的,不确定我是否已经得到了完整的答案,但也许这有助于刺激其他人朝着正确的方向前进:
FXScale = (LogPixelsX / 96) - (2 - ((2 * HorzRes) / PhysicalWidth))
= (LogPixelsX / 96) - (2 - (2 * (HorzRes / PhysicalWidth)))
= (LogPixelsX / 96) - (2 * (1 - (HorzRes / PhysicalWidth)))
由于PhysicalWidth
保证大于或等于HorzRes
(请参阅MS documentation),1 - (HorzRes / PhysicalWidth) = ((PhysicalWidth - HorzRes) / PhysicalWidth)
。然后我们有:
FXScale = (LogPixlesX / 96) - (2 * ((PhysicalWidth - HorzRes) / PhysicalWidth)
(LogPixelsX / 96)
=打印机DPI与屏幕DPI的比率((PhysicalWidth - HorzRes) / PhysicalWidth)
=不可打印宽度与纸张总宽度的比率因此,看起来计算打印机DPI与屏幕DPI的比率,然后减去不可打印宽度与纸张总宽度之比的两倍。也许2是要远离打印机物理极限的边缘?
答案 1 :(得分:1)
这里只是一个提示......不要硬编码96.较新的显示器可以在更高的分辨率下运行。因此,如果您希望保持使打印报告与屏幕上的大小“大致相同”的功能,则应动态确定。
答案 2 :(得分:0)
纸张两边可能有1英寸的边距吗?