如何从Web浏览器控件设置纸张尺寸和边距打印

时间:2017-10-19 18:13:10

标签: c# .net winforms printing webbrowser-control

我正在尝试从winform应用程序中的Web浏览器控件进行打印。问题是它将字母设置为默认纸张大小,但我需要 A4 。此外,它会自动设置一些边距错误,我可以将它们设置为手动更正设置,但我想以编程方式进行设置。

怎么可能?

这是我要打印的代码。

private void metroButton1_Click(object sender, EventArgs e)
    {
        loadprintData();
        // Create a WebBrowser instance. 
        WebBrowser webBrowserForPrinting = new WebBrowser();

        // Add an event handler that prints the document after it loads.
        wa.DocumentCompleted +=
            new WebBrowserDocumentCompletedEventHandler(ShowPrintDocument);
        wa.ShowPrintPreviewDialog();
        reloadpage();

    }
    private void ShowPrintDocument(object sender,WebBrowserDocumentCompletedEventArgs e)
    {
        // Print the document now that it is fully loaded.
        ((WebBrowser)sender).ShowPrintPreviewDialog();

        // Dispose the WebBrowser now that the task is complete. 
        // ((WebBrowser)sender).Dispose();
        reloadpage();
    }
    private void PrintDocument(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        // Print the document now that it is fully loaded.
        ((WebBrowser)sender).Print();

        // Dispose the WebBrowser now that the task is complete. 
       // ((WebBrowser)sender).Dispose();
    }

2 个答案:

答案 0 :(得分:8)

要更改边距大小,您必须在打印前编辑(HKCU)注册表:

string pageSetupKey = "Software\\Microsoft\\Internet Explorer\\PageSetup";
bool isWritable = true;

RegistryKey rKey = Registry.CurrentUser.OpenSubKey(pageSetupKey, isWritable);

if (stringToPrint.Contains("something"))
{
    rKey.SetValue("margin_bottom", 0.10);
    rKey.SetValue("margin_top", 0.25);
}
else
{
    //Reset old value
    rKey.SetValue("margin_bottom", 0.75);
    rKey.SetValue("margin_top", 0.75);
}

别忘了将其恢复为默认值。

Ref Microsoft KB Article

要更改纸张尺寸,您必须在打印前在其他位置编辑(HKCU)注册表:

string pageSetupKey2 = "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings";
isWritable = true;

rKey = Registry.CurrentUser.OpenSubKey(pageSetupKey2, isWritable);

// Use 1 for Portrait and 2 for Landccape 
rKey.SetValue("PageOrientation", 2, RegistryValueKind.DWord); 
// Specifies paper size. Valid settings are 1=letter, 5=Legal, 9=A4, 13=B5.Default setting is 1.
rKey.SetValue("PaperSize", 9, RegistryValueKind.DWord); 
// Specifies print quality
rKey.SetValue("PrintQuality ", 1, RegistryValueKind.DWord);

Ref MSDN

答案 1 :(得分:0)

我已经尝试了很多东西,但最后我发现无法轻松地从代码中编程打印机设置。但是我可以通过@jeremy的回答做边距。 我发现,对于从WebBrowser控件打印,它使用我们所知道的Internet Explorer,但最初它使用的是资源管理器7,我不得不将其更改为默认情况下的资源管理器11。 然后我看到它的资源管理器没有自己的打印设置。它使用默认的打印机设置。 因此,您必须更改默认打印机预览。您将看到预览将以此方式显示。