在c#中从WebBrowser控件打印时设置页面方向。(非WPF应用)

在c#中从WebBrowser控件打印时设置页面方向。(非WPF应用),c#,printing,webbrowser-control,orientation,C#,Printing,Webbrowser Control,Orientation,使用webbrowser控件时,是否可以更改打印机的方向?我需要把它改成景观。如果我需要更改打印机本身的打印机默认值,那就可以了,因为我会在完成后将它们设置回原来的值。(这就是我目前必须使用非默认打印机进行打印的原因) 我现在用它暂时设置默认打印机,然后在完成打印工作后将其设置回原来的位置 private string SetDefaultPrinter(string newDefaultPrinter) { //Get the list of configured printers:

使用webbrowser控件时,是否可以更改打印机的方向?我需要把它改成景观。如果我需要更改打印机本身的打印机默认值,那就可以了,因为我会在完成后将它们设置回原来的值。(这就是我目前必须使用非默认打印机进行打印的原因)

我现在用它暂时设置默认打印机,然后在完成打印工作后将其设置回原来的位置

private string SetDefaultPrinter(string newDefaultPrinter)
{
    //Get the list of configured printers: 
    string strQuery = "SELECT * FROM Win32_Printer";
    string currentDefault = string.Empty;

    System.Management.ObjectQuery oq = new System.Management.ObjectQuery(strQuery);
    System.Management.ManagementObjectSearcher query1 = new System.Management.ManagementObjectSearcher(oq);
    System.Management.ManagementObjectCollection queryCollection1 = query1.Get();
    System.Management.ManagementObject newDefault = null;

    foreach (System.Management.ManagementObject mo in queryCollection1)
    {
        System.Management.PropertyDataCollection pdc = mo.Properties;
        if ((bool)mo["Default"])
        {
            currentDefault = mo["Name"].ToString().Trim();

            if (newDefaultPrinter == null || newDefaultPrinter == string.Empty)
            {
                //Just need to know the default name 
                break;
            }
        }
        else if (mo["Name"].ToString().Trim() == newDefaultPrinter)
        {
            //Save this for later
            newDefault = mo;
        }
    }

    //Reset the default printer
    if (newDefault != null) 
    {
        //Execute the method 
        System.Management.ManagementBaseObject outParams = newDefault.InvokeMethod("SetDefaultPrinter", null, null);
    }

    return currentDefault;
}
有人知道如何更改方向吗?

//编辑: 我测试错了。引用此注册表项的文档适用于windows CE。。。因此,正确答案是不可能,正如文档中“解释”的那样:

一种可能的解决方法是通过css旋转整个页面(transform:rotate(90deg)),但是相对位置一直是旧的,因此对于多个页面来说就是一团糟

令人难以置信的是,如此基本的事情无法做到

//旧答案: 我一直在寻找相同的设置,最终发现您确实无法直接使用webbrowser组件更改打印机设置(页面方向、页眉、页脚、页边距…),唯一的方法是更改注册表项以设置internet explorer的默认行为

对于页面方向,它将是:

Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", true).SetValue("PageOrientation", 2);

您应该保留旧值,并在打印后将其还原。

您可以使用IE打印模板来完成此操作。关于这方面的文档并不多,但下面是另一篇堆栈溢出文章,它提供了一些关于这方面的有用链接,实际上对我帮助很大:

最有用的部分是建议通过导航到IE内的以下URL来查看标准IE打印模板:

res://ieframe.dll/preview.dlg

您还可以通过导航到IE中的以下URL来查看相关JavaScript文件:

res://ieframe.dll/preview.js


这两个文件帮助我了解了背景中的情况,通过更改“preview.js”文件中的“Printer.orientation”值,我可以成功更改打印的HTML文档的方向。

可能会有所帮助。谢谢Jay,是的,我找到了一个,并试图在给出的答案中检查该问题的应用程序。永远无法使项目中的应用程序正常工作。但是对于这个问题,我从来没有看到一个真正回答这个问题的答案。我还发现了一些其他问题,比如我的问题,但没有一个直接提到c#,或者非wpf。我还想添加有关当前代码的信息,以设置默认打印机。;)对不起,我没有注意到您的非WPF状态。我最初的回答是,没有办法做到你所要求和提到的。我意识到,虽然我从未真正检查过这一点,所以删除了我的答案。:)我希望这是某种设置打印机默认设置的方式。。。在这一点上我真的不在乎WebBrowser。。。我想我可以设置打印机默认值,然后打印。