2

我正在尝试将“DotNetBrowser.Browser”中加载的网页打印为 PDF 文档并使用 DotNetBrowser PrintHandler 在本地保存。这在带有 WinFormsBrowserView 的 windows 窗体应用程序中运行良好,但在控制台应用程序的情况下,PrintHandler 不会打印整个页面,即仅打印页面的某些部分并保存为 pdf。

4

2 回答 2

1

以下是演示如何加载网站并将其打印为 PDF 的示例代码:

using DotNetBrowser;
using DotNetBrowser.Events;
using System;
using System.Threading;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var browser = BrowserFactory.Create())
            {
                ManualResetEvent waitEvent = new ManualResetEvent(false);
                browser.FinishLoadingFrameEvent += delegate(object sender, FinishLoadingEventArgs e)
                {
                    // Wait until main document of the web page is loaded completely.
                    if (e.IsMainFrame)
                    {
                        waitEvent.Set();
                    }
                };
                browser.LoadURL("https://www.teamdev.com/dotnetbrowser");
                waitEvent.WaitOne();
                PrintPDF(browser, System.IO.Path.GetFullPath(@"test.pdf"));
            }
        }



        public static void PrintPDF(Browser browser, string sFileName) {
            ManualResetEvent waitEvent = new ManualResetEvent(false);

            var handler = new MyPDFPrintHandler((printJob) => {
                var printSettings = printJob.PrintSettings;
                printSettings.PrintToPDF = true; 
                printSettings.PDFFilePath = sFileName;
                printJob.PrintJobEvent += (s, e) =>
                {
                    System.Diagnostics.Debug.WriteLine("Printing done: " + e.Success);
                    waitEvent.Set();
                };
                return printSettings; 
            });


            browser.PrintHandler = handler;
            browser.Print();
            waitEvent.WaitOne();
        } 

        class MyPDFPrintHandler : PrintHandler 
        { 

            Func<PrintJob, PrintSettings> func; 

            public MyPDFPrintHandler(Func<PrintJob, PrintSettings> func) 
            { 
                this.func = func; 
            } 
            public PrintStatus OnPrint(PrintJob printJob) 
            {
                PrintSettings printSettings = func(printJob);
                printSettings.PrintToPDF = true;
                printSettings.Landscape = true;
                printSettings.PrintBackgrounds = true; 

                return PrintStatus.CONTINUE; 
            }


        } 
    }
}

如您所见,有一个同步打印——该方法在网页完全打印之前不会返回。

您能否在您的网站上测试此代码并让我知道结果?

于 2017-01-07T15:18:12.300 回答
1

最后,通过将初始大小设置为浏览器,我能够在控制台应用程序中打印 PDF。

browserView.Browser.SetSize(1280, 1024)

这是我的代码中缺少的。由于没有显示浏览器,设置初始大小解决了pdf打印不完整的问题。

于 2017-01-25T06:01:09.033 回答