如何将GeckoWebBrowser打印到默认打印机?

时间:2017-08-01 09:24:48

标签: printing geckofx

我试图在GeckoWebBrowser中打印文档,但文档是有限的,对我来说,它一点也不清楚。

我在互联网上发现了一些至少与打印机通信的代码(它开始发出哔哔声),但我认为打印机要求使用Letter尺寸的纸张,但是如果设置为print.GetGlobalPrintSettingsAttribute()则需要设置,如果我尝试自己的设置,它给了我一个 NotImplementedException

我怀疑这是我的Gecko.PrinterSettings引发的异常,因为当我在ps中交换print.Print(ps, null);时  使用全局设置,不会引发此异常。

以下代码:

        var domWindow = browser.Window.DomWindow;
        var print = Gecko.Xpcom.QueryInterface<Gecko.nsIWebBrowserPrint>(domWindow);

        Gecko.PrintSettings ps = new Gecko.PrintSettings();
        ps.SetPrintSilentAttribute(false);
        ps.SetPrintToFileAttribute(false);
        ps.SetShowPrintProgressAttribute(false);
        ps.SetOutputFormatAttribute(1); //2 == PDF, so I assume 1 is actual printer
        ps.SetPrintBGImagesAttribute(true);
        ps.SetStartPageRangeAttribute(1);
        ps.SetEndPageRangeAttribute(100);
        ps.SetPrintOptions(2, true); // evenPages
        ps.SetPrintOptions(1, true); // oddpages
        ps.SetEffectivePageSize(768 * 20f, 1024 * 20f);
        ps.SetShrinkToFitAttribute(true);
        ps.SetScalingAttribute(1.0);
        ps.SetPrintBGImagesAttribute(true);

        print.Print(ps, null);

1 个答案:

答案 0 :(得分:0)

管理以提出解决方案。

抛出异常是什么

public void SetPersistMarginBoxSettingsAttribute(bool aPersistMarginBoxSettings)
{
    throw new NotImplementedException();
}

以上是在PrinterSettings.cs中,因此它被编码为硬编码,以对数字off属性抛出 NotImplementedException (上面的属性不是唯一一个硬编码的属性例外)因为它没有完成(?),所以我不能使用它。

但是,我可以使用GetGlobalSettingsAttribute(),因为它使用与PrinterSettings(nsiPrintSettings)相同的接口,因此它将具有为我填充的相同属性。

所以我能做的是:

我只是将GetGlobalPrintSettingsAttribute()复制到我自己的打印机设置中,并根据需要进行调整。

var mySettings = print.GetGlobalPrintSettingsAttribute();
mySettings.SetPrintSilentAttribute(true);
mySettings.SetPrintToFileAttribute(true);
mySettings.SetShowPrintProgressAttribute(false);
mySettings.SetOutputFormatAttribute(2); //2 == PDF
mySettings.SetToFileNameAttribute(@"c:\temp\temp.pdf");
mySettings.SetPrintBGImagesAttribute(true);
mySettings.SetStartPageRangeAttribute(1);
mySettings.SetEndPageRangeAttribute(100);
mySettings.SetPrintOptions(2, true); // evenPages
mySettings.SetPrintOptions(1, true); // oddpages
mySettings.SetShrinkToFitAttribute(true);
mySettings.SetScalingAttribute(1.0);
mySettings.SetPrintBGImagesAttribute(true);

print.Print(mySettings, new Gecko.WebProgressListener());
  • 请注意我暂时还原为SetOutputFormatAttribute(2); //2 == PDF

  • 同时将print.Print(ps, null);更改为print.Print(mySettings, new Gecko.WebProgressListener());,但我认为nullGecko.WebProgressListener()不会有所作为。

Etvoilà! - 现在,进入下一步,即打印到打印机,而不是PDF文件。