delphi - 缩放像素值以进行打印

标签 delphi printing

我正在尝试在与打印相关的一些旧代码中找到某种意义。

在打印机上绘制表格时,每个大小和位置属性都将乘以比例因子。该因子由以下代码计算:

    { 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?

最佳答案

好的,不确定我是否有完整的答案,但这也许会有助于朝着正确的方向刺激其他人:

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是为了远离打印机的物理限制的边缘?

关于delphi - 缩放像素值以进行打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3100895/

相关文章:

delphi - 让 Allen Bauer 的 TMulticastEvent<T> 正常工作

Delphi:DateTimeToStr 输出为零时间(午夜)

delphi - DLL 中的 VCL 风格问题

python - 与列表字典和值相关的文件输出错误

html - Bootstrap 固定导航栏的打印问题

internet-explorer - 在 Internet Explorer 中模拟打印媒体

delphi - 使用 'dcc32 -JL' 编译时从另一个包中的另一个单元访问 Delphi 方法指针

delphi - Indy SMTPServer 在 OnConnect 事件中发送错误消息

javascript - 打印预览 CSS,但在浏览器中

Java打印页面