我在做web打印的工作。要打印的页面是通过webbrowser的navigate导航得到。
现在需要根据不同的尺寸要求(比如,A4,B5)动态修改web页面的页面设置。
我原来是通过 sendkey的方式,将相应的数据自动填充到页面设置的对话框里。
这种办法不好。希望能通过代码实现更改。

解决方案 »

  1.   

    哈哈,你又在这儿提问题。这次我可以补充一下了。我查看了一下,每种应用程序的页面设置可能不一样的。记事本的和IE的页面设置界面风格都不一样。
    看起来IE页面设置可以由以下内容组成:1,纸张规格
    2,纸张来源
    3,页眉,页脚
    4,布局方式(横向、纵向)
    5,页边距(左,右,上,下)
    6,打印机
    ...(其余的就没有了吧)以上内容有IE的设置,也有打印机的设置。
    1,2,4,纸张规格、纸张来源、布局方式 信息来源于默认打印机的设置,也可以是IE当前使用的打印机的设置。
    3,5,页眉,页脚和页边距的信息来源于IE的设置,在注册表中存放。
    6,打印机是IE当前使用的打印机。(不一定就是默认打印机)
    知道了这些内容都是怎么来的,我们就要着手一下的事情:第一,学会设置(查看,增加)自定义纸张。addform,getform等
    第二,学会设置指定的自定义纸张为默认纸张。setform,setprinter 等。
    第三,学会设置默认打印机。setdefaultprinter
    第四,修改注册表。可在subkey :pagesetup中定义页眉页脚和页边距。
    第五,修改注册表,使得IE总是使用默认打印机打印。(可以实现,切换打印机打印,页面设置跟着变换)以上内容,希望对你有帮助!
      

  2.   

    好的,谢谢你!zpf_cn
    我再看看。
      

  3.   

    我是用下面的代码来设置我的纸张为默认纸张,pPrinterInfo2是我用GetPrinter获得的,
    但是为啥设置之后在打印机和传真里面看到的还是默认A4纸张,不知道哪里写错了?DWORD dwSecurity = ACCESS_SYSTEM_SECURITY;
    pPrinterInfo2->pSecurityDescriptor = &dwSecurity;
    pPrinterInfo2->pDevMode->dmFields |= DM_FORMNAME;
    memcpy(pPrinterInfo2->pDevMode->dmFormName, formName, sizeof(formName));
    if (!SetPrinter(hPrinter, 2, (LPBYTE)pPrinterInfo2, 0))
    {
        // Error
    }
    // Ok