【问题标题】:Printing Issues under Terminal Services (Win32)终端服务下的打印问题 (Win32)
【发布时间】:2010-11-17 12:54:05
【问题描述】:

对于我们的应用程序,我们需要能够在页面的特定位置打印输出。例如,我们需要能够在相对于页面左上角的精确位置 (1.00", 1.00") 打印一些文本。问题在于,各种 GDI 调用中的所有坐标都不是相对于显示器的左上角,而是相对于设备相关的偏移量,可以通过以下代码获得:

int cx = ::GetDeviceCaps(hDC, PHYSICALOFFSETX);
int cy = ::GetDeviceCaps(hDC, PHYSICALOFFSETY);

当然,这些都是设备单位,因此您可以根据需要将它们转换为逻辑单位。然后,您可以在其他 API 调用中调整您的坐标,以便在您需要的地方准确获取输出。

当直接在 Windows 下运行时,这就像一个魅力。但是,当使用终端服务打印到 Windows Server 2008 上的重定向打印机时,DeviceCaps 函数不再报告正确的信息,至少对于大量不同的打印机而言。设备偏移量报告为 0,当查询页面上的可打印区域时,返回不正确的信息(API 夸大了可用空间的数量)。更糟糕的是,似乎 MS 或打印机驱动程序供应商都意识到了这个问题,因为当打印作业假脱机到您的本地机器时(以便它可以假脱机到您的本地打印机),所有的输出都会被一些补偿转移数量;在本地查询打印机功能时,该数量与 GetDeviceCaps 报告的正确值相差甚远。

因此,结果是打印输出被移出页面......

还有其他人看到过此类问题吗?我想精确控制打印输出是不是疯了?当然,为了正确分页,需要一个准确的可用打印空间量值,不是吗?任何帮助或指示将不胜感激。

【问题讨论】:

    标签: winapi printing gdi


    【解决方案1】:
    猜你喜欢
    • 2014-02-16
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    • 2016-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多