【问题标题】:Set page orientation when printing from the WebBrowser control in c#. (NON WPF Application)从 c# 中的 WebBrowser 控件打印时设置页面方向。 (非 WPF 应用程序)
【发布时间】:2018-07-24 08:38:33
【问题描述】:

是否可以在使用 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;
}

有人知道如何改变方向吗?

【问题讨论】:

  • 谢谢杰伊,是的,我找到了那个,并试图在该问题的给定答案中检查应用程序。永远无法使项目中的应用程序正常工作。但是对于这个问题,我从来没有看到真正回答了这个问题的答案。我还发现了一些其他问题,例如我在 SO 上的问题,但没有一个直接引用 c# 或非 wpf。我还想添加一些关于我当前代码的信息以设置默认打印机。 ;)
  • 抱歉,我没有注意到您的非 WPF 状况。我最初回答说没有办法做你所要求的并引用kb236777。我意识到虽然我从来没有真正检查过这个,所以删除了我的答案。
  • :) 我希望这必须是在打印机上设置默认设置的某种方式......我现在并不关心 WebBrowser......我想我可以设置打印机默认值,然后打印。

标签: c# printing webbrowser-control orientation


【解决方案1】:

您可以通过使用 IE 打印模板来做到这一点。关于这方面的文档不多,但下面是另一个堆栈溢出帖子,其中提出了一些关于这方面的有用链接,它实际上对我有很大帮助:

WebBrowser print settings

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

res://ieframe.dll/preview.dlg

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

res://ieframe.dll/preview.js

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

【讨论】:

    【解决方案2】:

    //编辑: 我测试错了。引用此注册表项的文档适用于 Windows CE...所以正确的答案是不可能,正如文档中“解释”的那样:http://support.microsoft.com/kb/236777

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

    这么基本的事情竟然做不到,真是不可思议……

    //老答案: 我一直在寻找相同的内容,最后发现您确实无法直接使用 webbrowser 组件更改打印机设置(页面方向、页眉、页脚、边距......),唯一的方法是将注册表项更改为设置 Internet Explorer 的默认行为。

    对于页面方向,它将是:

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

    您应该保留旧值并在打印后恢复它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-12
      • 2010-12-04
      • 1970-01-01
      • 2010-11-12
      • 2011-02-03
      • 2011-03-17
      相关资源
      最近更新 更多